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

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


alsa

Розбіжності

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

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

Both sides previous revision Попередня ревізія
alsa [2013/06/04 14:19]
wombat Equalizer added
alsa [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
alsa.txt · В останнє змінено: 2013/06/04 14:22 by wombat