如何使用 pulseaudio 消除回声后保持立体声输出?

如何使用 pulseaudio 消除回声后保持立体声输出?

我的耳机有问题,我的麦克风播放我从电脑上听到的音频(应用程序音频,如 spotify/youtube 等,被我的麦克风拾取)

为了解决这个问题,我实现了一个回声消除脚本,它在系统启动时运行以下命令:

#!/usr/bin/env bash
pactl unload-module module-echo-cancel
pactl load-module module-echo-cancel aec_method=webrtc source_name=echocancel sink_name=echocancel1
pacmd set-default-source echocancel
pacmd set-default-sink echocancel1

这已经解决了上述问题。

不幸的是,这将我的耳机的输出从立体声变成了单声道,我想知道是否有办法将其从单声道改回立体声,或者是否可以在脚本中添加一些额外的东西来防止这种情况发生。

我尝试了以下命令来修复它,但无法恢复到立体声:

pacmd load-module module-remap-sink sink_name=echocancel-stereo master=echocancel1 channels=2 channel_map=left,right

我对 Linux 还很陌生(我最近从 Windows 转换过来)所以我想你可以称我为菜鸟,而且我对音频的工作原理知之甚少。

任何帮助都将不胜感激:)

答案1

对我来说,解决方案是指定主接收器和源设备并包含该use_master_format选项。我创建了以下 bash 脚本:

#!/bin/bash

# masters
source_master=alsa_input.usb-Audio-Technica_AT2005USB-00.analog-stereo
sink_master=alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__hw_sofhdadsp__sink

# names
source_name=input.echo-cancel
sink_name=output.echo-cancel

# properties
source_properties=device.description=$source_name
sink_properties=device.description=$sink_name

# other options
use_master_format=yes

# load the module
pactl load-module module-echo-cancel \
  source_name=$source_name \
  source_master=$source_master \
  source_properties=$source_properties \
  sink_name=$sink_name sink_master=$sink_master \
  sink_properties=$sink_properties \
  use_master_format=$use_master_format

您需要更改source_mastersink_master以匹配系统上的设备。您可以使用pactl list sinkspactl list sources来获取名称。

可能还有其他方法可以解决这个问题,但这是我的解决方案。

参考:PulseAudio 文档

相关内容