====== ALSA ======
Все пользовательские настройки устройств хранятся в файле //~/.asoundrc//
===== Маршрутизация каналов =====
Простая конфигурация маршрутов для четырёх каналов, при которой 2 стерео-канала (№0 и №1) перенаправляются в тыловые каналы (№2 и №3). Сделать это можно при помощи плагина "[[http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html#pcm_plugins_route|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 под названием "[[http://alsa.opensrc.org/Dmix|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-плагин "[[http://alsa.opensrc.org/Dsnoop/|dsnoop]]"
pcm.dsnooper {
type dsnoop
ipc_key 234886
ipc_perm 0660
slave.pcm "hw:0,0"
}
==== Дуплекс ====
Чтобы приложения могли использовать одно устройство для записи и воспроизведения звука, нам нужно "дуплексное" устройство. Т.е. такое устройство, которое имеет канал для захвата звука и независимый канал для воспроизведения звука. Для этого используем ALSA-плагин "[[http://alsa.opensrc.org/Asym|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"
}
===== Шумоподавитель =====
Примитивный шумодав (написан правильно, но на деле очень плохо работает), входящий в набор "[[http://www.ladspa.org/cmt/|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, реализующий функции эквалайзера. В качестве этого плагина зачастую выбирают плагин [[http://quitte.de/dsp/caps.html#Eq2x2|Eq2x2]], входящий в состав набора [[http://quitte.de/dsp/caps.html|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...''
{{:alsamixer-choose-soundcard.png}}
после чего ввести в поле названия звуковой карты "**equal**"
{{:alsamixer-soundcard-equal.png}}
Поле этого на экране появятся настройки 10-полосного эквалайзера
{{:alsamixer-equalizer.png}}
Настроив эквалайзер, можно воспроизводить звук через него, указывая в качестве устройства вывода звука **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"
}
===== Результирующий файл ======
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