LinuxForum.Fans
Тема

dmix + default soundcard

Автор: Armoyt 2 сообщений 4377 просмотров
#139485

доброго времени суток
После пересборки ядра вопрос о настройки алсы возник снова. Проблема в том, что не работает аппаратное микширование, если нужная аудиокарта не первая в списке:
[console]cat /proc/asound/cards
0 [Dummy ]: Dummy - Dummy
Dummy 1
1 [Loopback ]: Loopback - Loopback
Loopback 1
2 [NVidia ]: HDA-Intel - HDA NVidia
HDA NVidia at 0xfd778000 irq 21
[/console]
В ядре моя карта собрана НЕ модулем, потому решения, выловленные в гугле не помогают.
Если определить карту по умолчанию в ~/.asoundrc :
[console]pcm.!default {
type hw
card NVidia
}

ctl.!default {
type hw
card NVidia
}[/console]
, то она работает как дефолтная, но микширование не работает.
Когда звук был модулем, проблема решалась добавлением в /etc/modprobe.d/alsa.conf строчки с моделью карты, но теперь это не канает для alsa.conf, да и тогда не было вопроса о определение дефолтной карты. А тут прямо максимальную сложность задачи себе сделал: и карт несколько и микшер не работает. Русскоязычные доки по алсе рассматривают оба случая по-отдельности: или выставление дефолтной карты или включение дмикса вручную, а как сделать это одновременно непонятно.
Буду признателен если кто натолкнёт на нужные мысли.
Или тупо пересоборать ядро так, чтобы в списке была одна карта, без виртуальных?

#139669

Проблему решил следующим образом:
В ~/.asoundrc добавил следующее:
[console]pcm.!default {
type plug
slave.pcm "dmixer"
}

pcm.dsp0 {
type plug
slave.pcm "dmixer"
}

pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:2,0"
period_time 0
period_size 1024
buffer_size 8192
rate 44100
}
bindings {
0 0
1 1
}
}[/console]

Как я понял, pcm.!default определяет дефолтную карту, slave.pcm "dmixer" указывает, что в этом определении будет участвовать микшер алсы, pcm.dmixer определяет микшер как некое устройство с параметрами, указанными ниже (самое главное, видимо, это частота дискретизации rate 44100), pcm "hw:2,0" указывает что микшер будет работать с карточкой номер 2 (у меня нулевая и первая это виртуальные карточки), bindings мудрит что-то с каналами, так как канала у меня 2, то там две строки. Не понял что такое:
[console]pcm.dsp0 {
type plug
slave.pcm "dmixer"[/console]

и что это за параметры:

period_time 0
period_size 1024
buffer_size 8192

Помимо этого, в конце некоторые люди ещё добавляют следующее:

[console]ctl.dmixer {
type hw
card <номер_карты>
}[/console]

У меня работает без этой части. И я вообще не понял зачем это нужно, если есть:
[console]pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:2,0"
.....
[/console]

Так и оставил без ctl.dmixer { и всё вроде работает.

Если кто прокомментирует, буду благодарен, а так проблема можно сказать решилась (во всяком случае внешне). Теперь звук микшируется для карточки номер 2 софтварно.

ах, да, если это кому-нибудь понадобиться в будущем:
Изменения в ~/.asoundrc вступают в силу после релогина в системе (убить иксы и залогиниться снова).
посмотреть какие карты определились ядром можно командой
[console]cat /proc/asound/cards[/console]
посмотреть как ситема интерпретирует карты через hw:x,y можно командой:
[console]aplay -l[/console]
, где первая цифра (x) это номер устройства, а вторая цифра (y) это номер субустройства (в моей дешёвой карточке там только одно субустройство под номером ноль, а может так везде, не знаю).
Посмотреть какую частоту поддерживает карточка можно командой:
[console]cat /proc/asound/card2/codec#0 | grep rate
[/console]
Если интересующая карта не номер 2, а например номер 0 (первая в списке), то писать соответственно
/proc/asound/card0/codec#0
Правда не врубился чем codec#0 отличается от доступного в той же директории codec#1...

Войдите или зарегистрируйтесь, чтобы ответить.