Pull to refresh

Эмуляция OSS в Linux

Configuring 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
Tags:
Hubs:
Total votes 23: ↑21 and ↓2 +19
Views 6.1K
Comments Comments 3