使用 Alsa 和 PulseAudio 将 LADSPA 滤波器仅应用于多通道输出的一个通道

使用 Alsa 和 PulseAudio 将 LADSPA 滤波器仅应用于多通道输出的一个通道

我想要将过滤器(特别是 SWH 的 glame-bandpass-iir)应用于多个输出通道中的其中一个。

看了下面列出的示例后,我仍然感到困惑。我很确定module-ladspa-sinkmodule-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"

经过数周的挫折后进行了编辑......

我尝试了几乎所有我能想到的配置,但都没有成功。我尝试使用 | 的各种排列/etc/pulse/default.pa来设置alsa,其中有 4 或 6 个通道,分别命名为前左、前右、左、右、aux0-4、后左、后右和以及预期的。虽然过滤器可以在一个、两个或四个通道上工作,但不可能同时通过任何其他通道获得未过滤的输出。~/pulse/default.pamodule-udev-detectmodule-alsa-sinkmodule-remap-sinkmodule-combine-sinkmodule-ladspa-sink

我在 irc 上的 #pulseaudio 上问过,被告知仅使用 pulse 无法实现我想要的功能。如果有人能为我指出特定的 pulseaudio 解决方案或使用其他工具的解决方案,我将不胜感激。

谢谢。

答案1

将 LADSPA 滤波器分配给单个音频通道

我们可以通过微调来实现pulseaudio LADSPA 接收模块。此模块加载一个接收器,任何 LADSP 插件都将应用于该接收器。通常情况下,将过滤器应用于所有通道,但我们也可以通过重新映射然后组合通道来定义要分配过滤器的单个通道。

下列脉冲音频命令涉及:

  1. 获取有效的sink_namechannel_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-水槽作为主人,我们需要清洁的渠道需要未过滤接收器作为主接收器。最后,我们再次组合单独的通道,得到新的组合接收器。


双通道示例

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使用以下方式创建新的接收器:带通_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

A已过滤名称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 滤波器进行过滤。

如果我们有两个以上的通道,我们将必须对所有通道执行这些步骤,用已过滤或未过滤的信号替换每个通道,以便在最后一步再次将它们组合起来。

相关内容