Цитата Busla:
AMDBulldozer, оно в принципе может и без операционной системы работать - каналы микшируются на аппаратном уровне. »
|
Основная парадигма Unix: "всё, что угодно - это файл". В частности, устройства вывода звуковой карты (/dev/dsp) тоже файл. Файлы символьных устройств открываются по умолчанию в режиме эксклюзивного доступа. Поэтому, когда один процесс открыл этот файл, никакой другой ничего записать туда уже не сможет. И это логично. Можно иметь аппаратный микшер, который будет смешивать звуковой ряд от нескольких устройств (тех же самых /dev/dsp может быть много - /dev/dsp0, /dev/dsp1...). Но если несколько процессов примутся писать по-очереди в одно и то же устройство, ничего кроме какафонии не получится.
Тот же самый принцип действует и для блочных устройств. Жесткий диск (или один из разделов жесткого диска) можно открыть в режиме исключительного доступа (только этот режим уже придется указывать явно). После этого, только один процесс - тот, который захватил диск, сможет выполнять операции на этом диске. Зачем это может быть нужно? К примеру для того, чтобы результаты работы утилиты восстановления файловой системы (или утилиты изменения размеров ФС) не были прерваны попыткой записи на диск, которая окончательно угробит его содержимое.
Понятно, что монопольный захват диска процессом не является нормальным способом организации ввода-вывода. Обычно процесс обращается к промежуточному агенту - драйверу файловой системы.
Абсолютно аналогичная ситуация со звуковыми устройствами. Если нужен монопольный вывод - открывается устройство. В обычных условиях, программа обращается к промежуточному агенту - демону (программе без управляющего терминала), обеспечивающему программное микширование.
Наиболее распространенный демон - pulseaudio. Его запуск в разных дистрибутивах осуществляется по-разному.
Обычно его включают в список сервисов автоматически запускающихся при загрузке ОС.
Проверить, запущен ли он, можно командой "pgrep -l pulseaudio". Или, если команда pgrep не установлена, то "ps ax | grep pulseaudio", но последний вариант выдаст еще и строчку соответствующую самой команде grep.
Если pulseaudio не запущен, его можно попытаться запустить (для дистрибутивов с bsd-стилем инициализации) командами
"/etc/init.d/pulseaudio start" или "service pulseaudio start".