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

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

Я все еще в тупике после просмотра примеров, перечисленных ниже. Я уверен, что 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

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

### 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"

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

Я попробовал почти каждую конфигурацию обоих /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 и мне сказали, что то, что я хочу, невозможно с одним пульсом. Я был бы очень признателен, если бы кто-то мог указать мне на конкретное решение для работы с пульсом или на решение с другими инструментами.

Благодарю.

1 ответ

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

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

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

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

    pacmd list-sinks
    
  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-sink с отфильтрованным звуком из данного приемника. Затем нам нужно создать отдельные именованные приемники для каждого аудиоканала. Каналы, к которым мы хотим применить фильтр, должны использовать 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 сверху.

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

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