Применение фильтра LADSPA только к одному каналу многоканального выхода с помощью Alsa и PulseAudio

Я хочу применить фильтр, в частности SWE glame-bandpass-iir, только к одному из нескольких выходных каналов.

Я все еще в недоумении после просмотра примеров, перечисленных ниже. Я вполне уверен, что module-ladspa-sink и module-remap-sink являются решением моих потребностей. Однако я не могу понять документы по module-remap-sink. Для простоты давайте предположим, что цель состоит в том, чтобы front L/R soundcard jack выводил нефильтрованный звук, а rear L/R soundcard jack выводил фильтрованный звук.

sink_name: The name for the new virtual sink. 
master: The name of the sink of which channels you're remapping. 
channels: Channel count of the new sink. 
channel_map: List of the channels that this sink will accept. 
master_channel_map: The channels in the master sink, where the channels listed in channel_map will be relayed to. channel_map and master_channel_map must have equal number of channels listed, because the channels will be mapped based on their position in the list, i.e. the first channel in channel_map will be relayed to the first channel in master_channel_map and so on. 
remix: Allow remixing of the mono or stereo streams to multiple channels (default is yes; set to "no" if you don't want the stereo stream to be up-mixed to all channels except subwoofer and channels named aux0-aux15).

http://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Modules#module-remap-sink

Ниже приведен фильтр раковина, которую я хочу использовать:

### LADSPA Sink
.ifexists module-ladspa-sink.so
.nofail
load-module module-ladspa-sink sink_name=ladspa_out master=alsa_out plugin=bandpass_iir_1892 label=bandpass_iir control=660.0,440.0,2
.fail
.endif

Может ли кто-нибудь любезно объяснить, как я выполняю source -> ladspa_out -> center jack on soundcard. В частности, как мне это заполнить?

load-module module-remap-sink filt_sink <?> 2 <?left,?right> <?m_left,?m_right> <?yes>

В случае необходимости я использую встроенный звук i945: alsa.long_card_name = "Intel ICH7 with ALC850 at irq 17"

Отредактировано после нескольких недель разочарования ...

I Я попробовал почти все конфигурации как /etc/pulse/default.pa, так и ~/pulse/default.pa, которые я могу представить без успеха. Я пытался использовать различные перестановки module-udev-detect | module-alsa-sink для настройки alsa с 4 или 6 каналами, названными передний левый, передний правый, левый, правый, aux0-4, задний левый, задний правый и module-remap-sink и module-combine-sink, а также предполагаемый module-ladspa-sink. Хотя фильтр будет работать с одним, двумя или четырьмя каналами, было невозможно одновременно получать нефильтрованный выход через любые другие каналы.

Я спросил на #pulseaudio на irc и мне сказали, что то, что я хочу, невозможно с одним пульсом. Я был бы очень признателен, если бы кто-то мог указать мне либо конкретное решение для импульсной аудиосигнала, либо решение с другими инструментами.

Спасибо.

2
задан 21 December 2013 в 05:04

1 ответ

Назначение фильтра LADSPA одному аудиоканалу

Мы можем сделать это с тонкой настройкой модуля приемника LADSPA pulseaudio . Этот модуль загружает приемник, к которому будет применен любой плагин LADSP. Обычно применяется применение фильтра ко всем каналам, но мы также можем определить отдельный канал для назначения фильтра путем переназначения и последующего объединения каналов.

Используются следующие команды Pulse Audio :

  1. Получите действительные sink_name и channel_map:

    pacmd list-sinks
    
    [ 1122]
  2. Загрузить фильтр LADSPA:

    load-module module-ladspa-sink sink_name=ladspa_out master=alsa_out plugin=<filer> label=<label> control=<control>
    
  3. Создать новый переназначенный приемник:

    load-module remap-sink sink_name=<name> master=<sink> channels=<n> master_channel_map=<list> channel_map=<list>
    
  4. Создать новый комбинированный приемник:

    pacmd load-module module-combine-sink sink_name=<name> sink_properties=device.description=<displayed_name> slaves=<list_of_n_sinks> channels=<n>
    

Чтобы получить желаемый эффект, нам нужно загрузить фильтр LADSPA, чтобы создать ladspa_out -поток с отфильтрованным звуком из данного тонуть. Затем нам нужно создать отдельные именованные приемники для каждого аудиоканала. Каналы, к которым мы хотим применить фильтр, должны использовать ladspa_out -sink в качестве главного, каналы, которые мы должны очистить, должны использовать нефильтрованный приемник в качестве главного. Наконец, мы снова объединяем отдельные каналы, чтобы дать нам новый комбинированный приемник.


Пример для двух каналов

pacmd load-module module-ladspa-sink sink_name=ladspa_out master=alsa_output.pci-0000_00_14.2.analog-stereo plugin=bandpass_iir_1892 label=bandpass_iir control=660.0,440.0,2

Новый приемник ladspa_out создается с использованием фильтра bandpass_iir с заданными элементами управления, применяемыми к аудиосигналу от нашего основного приемника (замените с главным приемником из шага 1. выше)

pacmd load-module module-remap-sink sink_name=remapR master=ladspa_out channels=1 master_channel_map=front-right channel_map=front-right

Для спереди справа создается фильтрованный отфильтрованный приемник с именем remapR ] аудиоканал из отфильтрованного приемника ladspa_out.

pacmd load-module module-remap-sink sink_name=remapL master=alsa_output.pci-0000_00_14.2.analog-stereo channels=1 master_channel_map=front-left channel_map=front-left

Нефильтрованный приемник remapL для левого переднего аудиоканала создается из нашего нефильтрованного главного приемника, как определено выше.

pacmd load-module module-combine-sink sink_name=combine sink_properties=device.description=myCombine slaves=remapL,remapR channels=2

Новый приемник combine (или любое другое выбранное вами имя) будет создан с 2 каналами, используя нефильтрованный приемник remapL для левого канала и отфильтрованный приемник remapR для правого. канал.

Теперь мы можем выбрать этот вновь созданный приемник (отображаемый как «myCombine») в настройках звука, чтобы левый канал не фильтровался, а правый канал фильтровался сверху с помощью фильтра LADSP сверху.

Если у нас более двух каналов, нам придется выполнить эти шаги для всех каналов, заменив каждый канал фильтрованными или нефильтрованными сигналами, чтобы снова объединить их на последнем шаге.

0
ответ дан 21 December 2013 в 05:04

Другие вопросы по тегам:

Похожие вопросы: