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

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


alsa

Розбіжності

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

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

Both sides previous revision Попередня ревізія
Наступна ревізія
Попередня ревізія
alsa [2013/02/15 23:32]
wombat [Маршрутизация каналов]
alsa [2013/06/04 17: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