Конфигурация ALSA для обеспечения совместного использования устройств несколькими процессами - PullRequest
0 голосов
/ 21 ноября 2011

У меня есть следующий код в файле .asoundrc в моем домашнем каталоге -

pcm.lol
{
    type dmix
    ipc_key 1024
    ipc_key_add_uid true
    slave{
        pcm "hw:0,0"
        period_time 125000
        rate 48000
        format S32_LE
        channels 2
    }
}

Когда я запускаю этот пример , он работает нормально (я изменил имя устройства на plug:lol). Я слышу звук, играющий в моих наушниках. Проблема возникает, когда два или более процессов пытаются вывести аудиоданные одновременно. В этом случае более поздний процесс не сможет правильно вывести свои аудиоданные.

Например, я запустил медиаплеер, который воспроизводил песню, а затем попытался запустить этот пример. Я не слышал ни звука из этого, все, что я мог слышать, это музыка, воспроизводимая в медиаплеере. Подобное происходит, когда я сначала запускаю этот пример, а затем медиаплеер, и в этом случае я слушаю только вывод звука из моего примера.

Как я могу решить эту проблему? Есть ли какие-либо ошибки в конфигурации моего устройства PCM? Или я должен предоставить какие-либо дополнительные параметры конфигурации PCM в коде примера?

Кроме того, было бы очень хорошо, если бы я мог создать эту конфигурацию логического устройства программно, а не использовать файл конфигурации, подобный этому.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2011

Насколько я искал и проверял, в ALSA, по-видимому, нет конкретного способа сделать это.Я могу поделиться встроенным устройством default между несколькими процессами, но любая другая конфигурация не обеспечивала эту функциональность.Кроме того, я не смог найти какой-либо программный способ настройки устройства ALSA.Файл конфигурации, кажется, единственный способ сделать это.

0 голосов
/ 21 ноября 2011

Я думаю, что проблема в том, что ваш звук по-прежнему по умолчанию равен hw0,0, но вы хотите, чтобы он по умолчанию был lol, поэтому вам нужно будет следовать примеру с веб-сайта ALSA идобавьте следующее в начало вашего .asoundrc:

pcm.!default {
    type plug
    slave.pcm "lol"
}

К сожалению, я не знаю ни одного программного способа настройки .asoundrc.

...