Користувальницькі налаштування

Налаштування сайту


alsa

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версійПопередня ревізія
Наступна ревізія
Попередня ревізія
alsa [2013/02/15 21:32] – [Маршрутизация каналов] wombatalsa [2013/06/04 14:22] (поточний) – [Эквалайзер] wombat
Рядок 1: Рядок 1:
 +====== 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"
 +  }
 +
 +===== Результирующий файл ======
 +
 +<file txt .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"
 +}
 +</file>
 +
 +<file txt .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"
 +}
 +</file>
 +
 +====== Тест возможностей звуковой карты ======
 +
 +  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