Зміст
ALSA
Все пользовательские настройки устройств хранятся в файле ~/.asoundrc
Маршрутизация каналов
Простая конфигурация маршрутов для четырёх каналов, при которой 2 стерео-канала (№0 и №1) перенаправляются в тыловые каналы (№2 и №3). Сделать это можно при помощи плагина “route”.
pcm.torear {
type route # Route & Volume conversion PCM
#slave STR # Slave name
# or
slave { # Slave definition
pcm "dmixer" # Slave PCM name
# or
#pcm { } # Slave PCM definition
#[format STR] # Slave format
channels 4 # Slave channels
}
ttable {
0 { # Таблица коэффициентов передачи канала №0 (передний левый) в другие каналы:
0 0.0 # в передний левый с коэффициентом 0
1 0.0 # в передний правый с коэффициентом 0
2 1.0 # в тыловой левый с коэффициентом 1 (т.е. 100%)
3 0.0 # в тыловой правый с коэффициентом 0
}
1 { # Таблица коэффициентов передачи канала №1 (передний правый) в другие каналы:
0 0.0 # в передний левый с коэффициентом 0
1 0.0 # в передний правый с коэффициентом 0
2 0.0 # в тыловой левый с коэффициентом 0
3 1.0 # в тыловой правый с коэффициентом 1 (т.е. 100%)
}
}
}
Такая запись в файле ~/.asoundrc создаст ALSA-устройство под названием “torear”. Если после этого настроить в какой-либо программе вывод звука через это устройство, звук будет попатать только в два тыловых канала. Например,
mplayer -ao alsa:device=torear music.ogg
aqualung --device=torear
Микшеры
Для того, чтобы несколько приложений могли использовать аудиоустройства одновременно, необходимо создать устройства-микшеры, способные принимать аудиосигнал от нескольких приложений и смешивать его.
Воспроизведение
Для микшера воспроизведения используется плагин ALSA под названием “dmix”
pcm.dmixer {
type dmix
ipc_key 234885
slave {
pcm "hw:0,0"
period_time 0
buffer_time 0
period_size 1024
buffer_size 8192
# rate 44100
# channels 6
}
# bindings {
# 0 0
# 1 1
# 2 2
# 3 3
# 4 4
# 5 5
# }
}
Запись
Для совместного доступа приложений к устройству записи (захвата звука) используем ALSA-плагин “dsnoop”
pcm.dsnooper {
type dsnoop
ipc_key 234886
ipc_perm 0660
slave.pcm "hw:0,0"
}
Дуплекс
Чтобы приложения могли использовать одно устройство для записи и воспроизведения звука, нам нужно “дуплексное” устройство. Т.е. такое устройство, которое имеет канал для захвата звука и независимый канал для воспроизведения звука. Для этого используем ALSA-плагин “asym”
pcm.duplexasym {
type asym
playback.pcm "dmixer" # playback on all speakers
capture.pcm "dsnooper" # recording
}
pcm.duplex { # plug and play on all speakers
type plug
slave.pcm "duplexasym"
}
Шумоподавитель
Примитивный шумодав (написан правильно, но на деле очень плохо работает), входящий в набор “CMT”. Его единственный параметр указывает пороговое значение, при превышении которого канал “открывается” и звук становится слышен. Допустимые значения от 0 до 1.
pcm.noise_gate {
type plug
slave.pcm "ladspa_noise_gate";
}
pcm.ladspa_noise_gate {
type ladspa
slave.pcm "duplex"
path "/usr/lib/ladspa";
plugins [{
label hard_gate
input {
controls [ 0.1 ]
}
}]
}
Эквалайзер
Сначала необходимо установить плагин для ALSA, реализующий функции эквалайзера. В качестве этого плагина зачастую выбирают плагин Eq2x2, входящий в состав набора C*A*P*S.
В Gentoo для этого достаточно выполнить команду
# emerge -va alsaequal
которая установит пакет media-plugins/alsaequal вместе с набором плагинов media-plugins/caps-plugins
После этого в пользовательский файл настроек ALSA ( ~/.asoundrc ) необходимо добавить следующие записи:
pcm.equalplug {
# Or if you want the equalizer to be your
# default soundcard uncomment the following
# line and comment the above line.
# pcm.!default {
type plug;
slave.pcm equal;
}
pcm.equal {
type equal;
slave.pcm "dmixplug";
}
ctl.equal {
type equal;
}
Теперь после перезапуска звуковой подсистемы ALSA
# /etc/init.d/alsasound restart
появится возможность использовать эквалайзер. Настроить его можно при помощи утилиты
$ alsamixer
Эквалайзер в alsamixer'е представлен как отдельная звуковая карта. Для того, чтобы её выбрать, нужно нажать F6 и выбрать пункт enter device name…
после чего ввести в поле названия звуковой карты “equal”
Поле этого на экране появятся настройки 10-полосного эквалайзера
Настроив эквалайзер, можно воспроизводить звук через него, указывая в качестве устройства вывода звука equalplug. Например,
mplayer -ao alsa:device=equalplug audiofile.flac
или
aqualung -d equalplug
Устройство по умолчанию (default)
Не все программы позволяют пользователю указать в явном виде, какое аудиоустройство использовать. Вместо этого почти все они ищут в системе устройство по умолчанию (“default”). Для того, чтобы взять это устройство под свой контроль, создаём запись для него, направив весь звук (как записываемый, так и воспроизводимый) из него в ранее созданное дуплексное устройство.
pcm.!default {
type plug
slave.pcm "duplexasym"
#slave.pcm "hw:0,0"
}
Результирующий файл
- .asoundrc
pcm.noise_gate { type plug slave.pcm "ladspa_noise_gate"; } pcm.ladspa_noise_gate { type ladspa slave.pcm "duplex" path "/usr/lib/ladspa"; plugins [{ label hard_gate input { controls [ 0.1 ] } }] } pcm.dsnooper { type dsnoop ipc_key 234886 ipc_perm 0660 slave.pcm "hw:0,0" } pcm.dmixer { type dmix ipc_key 234885 slave { pcm "hw:0,0" period_time 0 buffer_time 0 period_size 1024 buffer_size 8192 # rate 44100 } # bindings { # 0 0 # 1 1 # } } pcm.duplexasym { type asym playback.pcm "dmixer" # playback on all speakers capture.pcm "dsnooper" # recording } pcm.duplex { # plug and play on all speakers type plug slave.pcm "duplexasym" } pcm.!default { type plug slave.pcm "duplexasym" }
- .asoundrc
pcm.amp3db { type plug slave.pcm "ladspa_amp3db" } pcm.ladspa_amp3db { type ladspa #slave.pcm "plughw:0,0"; slave.pcm "dmixplug"; #slave.pcm "dmixer"; # error: Slave PCM not usable #slave.pcm "default"; path "/usr/lib/ladspa"; plugins [{ label amp_stereo input { # gain, dB controls [3.0] } }] } pcm.amp6db { type plug slave.pcm "ladspa_amp6db" } pcm.ladspa_amp6db { type ladspa #slave.pcm "plughw:0,0"; slave.pcm "dmixplug"; #slave.pcm "dmixer"; # error: Slave PCM not usable #slave.pcm "default"; path "/usr/lib/ladspa"; plugins [{ label amp_stereo input { # gain, dB controls [6.0] } }] } pcm.amp9db { type plug slave.pcm "ladspa_amp9db" } pcm.ladspa_amp9db { type ladspa #slave.pcm "plughw:0,0"; slave.pcm "dmixplug"; #slave.pcm "dmixer"; # error: Slave PCM not usable #slave.pcm "default"; path "/usr/lib/ladspa"; plugins [{ label amp_stereo input { # gain, dB controls [9.0] } }] } pcm.amp12db { type plug slave.pcm "ladspa_amp12db" } pcm.ladspa_amp12db { type ladspa #slave.pcm "plughw:0,0"; slave.pcm "dmixplug"; #slave.pcm "dmixer"; # error: Slave PCM not usable #slave.pcm "default"; path "/usr/lib/ladspa"; plugins [{ label amp_stereo input { # gain, dB controls [12.0] } }] } pcm.amp15db { type plug slave.pcm "ladspa_amp15db" } pcm.ladspa_amp15db { type ladspa #slave.pcm "plughw:0,0"; slave.pcm "dmixplug"; #slave.pcm "dmixer"; # error: Slave PCM not usable #slave.pcm "default"; path "/usr/lib/ladspa"; plugins [{ label amp_stereo input { # gain, dB controls [15.0] } }] } pcm.!default{ type plug slave.pcm "duplex"; } pcm.duplex { type asym playback.pcm "dmixer" capture.pcm "mixin" } #ctl.!default { # type hw # card 0 #} pcm.dmixplug { type plug slave.pcm "dmixer"; } pcm.dmixer { type dmix ipc_key 1024 slave { pcm "hw:0,0" period_time 0 period_size 1024 buffer_size 8192 #periods 128 rate 44100 } bindings { 0 0 1 1 } } ctl.dmixer { type hw card 0 } pcm.mixin { type dsnoop ipc_key 5978293 # must be unique for all dmix plugins!!!! ipc_key_add_uid yes slave { pcm "hw:0,0" channels 2 period_size 1024 buffer_size 4096 rate 44100 periods 0 period_time 0 } bindings { 0 0 0 1 } } # playback PCM device: using loopback subdevice 0,0 pcm.amix { type dmix ipc_key 219345 slave.pcm "hw:Loopback,0,0" } # capture PCM device: using loopback subdevice 0,1 pcm.asnoop { type dsnoop ipc_key 219346 slave.pcm "hw:Loopback,0,1" }
Тест возможностей звуковой карты
arecord -c 2 -f FLOAT_LE -r 192000 test.wav
pcm.hard {
type plug
slave {
pcm "hw:0,0"
}
}
aplay -Dhard test.wav
mplayer -ao alsa:device=hard test.wav



