Эмуляция OSS в Linux

    Последние веяния моды в IT привели к тому, что подавляющее количество устройств в современном компьютере стали «программными». Помимо дополнительной нагрузки на процессор это создает немало проблем для пользователей альтернативных систем.

    В моем предыдущем компе стояла материнская плата в которую была интегрированная звуковая карта на базе VIA VT8237. VT8237 полностью аппаратное решение и проблем с проигрыванием звука в Windows/FreeBSD/Linux не было.

    После апгрейда встроенная карточка поменялась на Realtek ALC883, которая не имела аппаратного микширования. Это порождало спектр различных проблем при использовании нескольких alsa приложений или одновременной работе alsa и oss эмуляции.

    Способы решения этих проблем под катом

    Микширование нескольких потоков в ALSA сейчас реализовано программно и если использовать только устройство по-умолчанию (alsa:default), то проблемы нет. А вот с эмуляцией OSS плохо. Есть несколько вариантов реализации OSS в linux:
    • нативная OSS с эмуляцией ALSA
    • aoss — перехват обращений к /dev/dsp через alsa-oss
    • padsp — перехват обращений к /dev/dsp через pulseaudio
    • эмуляция OSS через ALSA в ядре
    • ...

    Я пробовал alsa-oss и OSS через ALSA в ядре. Первое решение часто глючит из-за неполной реализации интерфейса OSS (да и не всегда возможен перехват обращений к /dev/dsp). А OSS через ALSA в ядре дает ошибку (звуковая карта «программная» и не умеет микшировать несколько потоков), если запущено хоть одно alsa приложение (микшер в трее например). Выгружать все, что использует ALSA и потом загружать обратно можно, но не удобно.

    Относительно недавно наткнулся на упоминание OSS proxy в одной из рассылок. OSS proxy — реализация OSS через CUSE. CUSE — реализация символьных устройств (char devices) в Linux.

    OSS proxy состоит из сервиса, который посредством CUSE создает символьные устройства /dev/dsp, /dev/adsp и /dev/mixer. Затем обращения к этим устройствам транслируются в формат, понятный бэкендам (сейчас есть вывод через pulseaudio и alsa).

    Я собрал пакет для Debian Squeeze. Для тех, кому этот пакет не подходит, могут пересобрать его из пакета с исходными текстами.

    Вечер использования эмуляции через OSS proxy показал его работоспособность в ситуациях:
    • одновременной работы нескольких OSS приложений
    • одновременной работы ALSA и OSS

    На мой взгляд OSS proxy — лучшее решение для эмуляции OSS на софтварных звуковых картах.

    UPD: собрал новый билд 1.3.2-2 в котором исправлены замечания lintian. Перед установкой новой версии старую желательно вычистить:

    sudo dpkg -P ossp или sudo aptitude purge ossp
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 3

      –1
      Keep up the good work!
        0
        Это все хорошо, но какие программы остались, которые только oss используют? Даже эмуляторы для динги теперь пишутся с использованием libao(кстати, классная штука!)
          0
          У меня без OSS не работает звук в Heroes III и Unreal Tournament (первый). Оба приложения нативные и заточены под использование OSS.

        Only users with full accounts can post comments. Log in, please.