LINUX.ORG.RU

Что почитать об архитектуре ALSA и её взаимодействии с pulseaudio и jack?


0

1

1) Хочется понять в деталях, как userspace взаимодействует со звуковыми устройствами через ALSA. Существуют ли для устройств файлы в /dev или всё через ioctl и как именно.

2) Если открыть в современной Ubuntu любое ALSA - устройство (hw:0,0), то поднимается процесс pulseaudio. Если его грохнуть - звук останавливается. Если pulseaudio снесни из системы - ALSA работает без него. Какая связь между alsa и pulseaudio и как она реализована? Зачем - знаю, как - не знаю. pulseaudio как-то перехватывает обращения приложений к ALSA, предоставляет всем возможность открыть одно и то же устройство и микширует их потоки? Как реализован этот перехват, причём такой прозрачный, что pulseaudio можно снести и ничего не сломается? Или в убунте сносилка умная (-;

3) Приоритетность ALSA-кода. Звуковуха с аппаратным 48000 требует ресемплинга для других ЧД. Но устройство hw:0,0 можно открыть на 44100, то есть ресемплинг делается на уровне системы ALSA прозрачно для приложений. Какой приоритет у этого кода? Есть непонятный эффект: имеется приложение, рисующее с помощью Qt картинку примерно 1024x1024, плавно (30fps) движущуюся подобно прокручивающейся странице документа. В старой gentoo не было проблем, в современной убунте в звуке появляются слышимые эффекты (неск раз в секунду), похожие на пропуски воспроизведения семплов. Если такое приложение свернуть, оно жрёт столько же проца, но не пользуется иксами - эффект пропадает. Это связано с более высоким приоритетом у процесса xorg над кодом, работающим со звуковыми устройствами?

★☆

Последнее исправление: kiverattes (всего исправлений: 1)

Какая связь между alsa и pulseaudio и как она реализована?

помойму пульса создает виртуальный девайс, через который играет альса. Когда ты сносишь пульсу, альса просто использует следующий доступный девайс.

Это связано с более высоким приоритетом у процесса xorg над кодом, работающим со звуковыми устройствами?

а если запустить пульсу с realtime priority под realtime kernel?

как-то так (нет убунты чтобы проверить):

sudo apt-get install linux-rt linux-headers-rt

sudo su -c 'echo @audio - rtprio 99 >> /etc/security/limits.conf'
sudo su -c 'echo @audio - nice -19 >> /etc/security/limits.conf'
sudo su -c 'echo @audio - memlock unlimited >> /etc/security/limits.conf'
stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Спасибо, попробую позже. О пульсе здесь уже речи не может идти, она снесена. Эффект наблюдается на чистой ALSA.

kiverattes ★☆
() автор топика
Ответ на: комментарий от stevejobs

помойму пульса создает виртуальный девайс, через который играет альса. Когда ты сносишь пульсу, альса просто использует следующий доступный девайс.

Если ALSA может играть через такой виртуальный pulse-девайс, тогда сам такой pulse-девайс должен быть связан со звуковухой, а это функции alsa. Наверное наоборот? - Pulse показывает юзер-спейсу девайсы под видом alsa, сам играет через конкретное устройство alsa, например hw:0,0.

kiverattes ★☆
() автор топика
Ответ на: комментарий от stevejobs

Фигасе. Я думал ALSA в принципе не умеет жить, не шарясь по железу, не дёргая всякие ядерные вызовы.

kiverattes ★☆
() автор топика

Вопрос знатокам - mpd установил на убунту (с кедами). Если mpd играет, то больше никакие звуки не могут воспроизводиться. Если поставить mpd на паузу, то всё норм. Если включить звук из другого приложения, то mpd молчит, если попробовать его запустить. Как побороть? Пробовал в mpd.conf ставить вывод звука через alsa или pulse, результат одинаковый.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от prischeyadro

Говно эта ваша ALSA. Я для того, чтобы звук от нескольких приложений слышать, какой-то .asoundrc создавал и там про какой-то dmix писал

Zorn
()
Ответ на: комментарий от stevejobs

Когда у меня был школоарч с альсой, то в нём mpd прекрасно уживался с кедами. После того как школоарч накрылся звездой из-за обновления с переносом либ, и я поставил вместо него убунту - сразу вспомнил, почему в своё время ушёл с убунты на школоарч.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от stevejobs

sudo su

facepalm jpg

echo ... echo ... echo ...

Ман here documents.

anonymous
()

файлы в /dev или всё через ioctl

ioctl не зря первым аргументом принимает файловый дескриптор...

/dev/snd/* (для чего там каждый файл внутри, понятия не имею).

Q3164
()
Ответ на: комментарий от prischeyadro

http://www.alsa-project.org/main/index.php/Asoundrc , секция Software mixing. Видимо ваша звуковая карта, как и большинство звуковых карт (поправьте если ошибаюсь), не умеет аппаратно микшировать звук, поэтому его необходимо реализовать программно. Обычно в дистрибутивах оно включено по-умолчанию.

P.S. если звуковые приложения буду нагружать процессор, то скорее всего вы неверно установили частоту дескритизации для DMix'а.

NegatiV
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.