Все пользовательские настройки устройств хранятся в файле ~/.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”). Для того, чтобы взять это устройство под свой контроль, создаём запись для него, направив весь звук (как записываемый, так и воспроизводимый) из него в ранее созданное дуплексное устройство.
pcm.!default {
type plug
slave.pcm "duplexasym"
#slave.pcm "hw:0,0"
}
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"
}
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