CentOS系统下Realtek ALC886声卡双音频输入并行录制问题求助
我之前帮朋友处理过类似的Realtek ALC886多输入录制需求,在CentOS环境下确实因为官方驱动停更(2014年后没更新)的原因,没法像Windows那样直接开启“独立输入设备”选项,但通过ALSA或PulseAudio的配置调整,还是能实现并行录制的,给你几个可行的方向:
1. 直接通过ALSA配置独立输入设备
Realtek HD Audio在Linux下默认会把多个输入插孔合并成一个混音设备,我们可以手动在ALSA配置里拆分出独立设备:
首先看你的arecord -l输出,找到声卡的卡号(比如card 0)和设备号(比如device 0),然后编辑~/.asoundrc(用户级)或者/etc/asound.conf(系统级),添加类似下面的配置:
# 定义第一个输入设备(比如前置麦克风) pcm.mic_front { type hw card 0 # 替换成你的声卡卡号 device 0 # 替换成你的设备号 subdevice 0 # 对应具体的输入插孔,需根据实际测试调整 } # 定义第二个输入设备(比如后置麦克风) pcm.mic_rear { type hw card 0 device 0 subdevice 1 }
配置完成后,就可以用gstreamer分别指定这两个设备并行录制了:
# 后台录制前置麦克风到front.wav gst-launch-1.0 alsasrc device=mic_front ! audioconvert ! wavenc ! filesink location=front.wav & # 录制后置麦克风到rear.wav gst-launch-1.0 alsasrc device=mic_rear ! audioconvert ! wavenc ! filesink location=rear.wav
注意:subdevice的编号需要你自己测试确认——比如用arecord -D hw:0,0,0 -c 1 -r 44100 -f S16_LE test1.wav录制,说话测试哪个插孔对应这个子设备,再调整配置里的编号。
2. 用PulseAudio虚拟源拆分输入
如果你之前试PulseAudio没成功,可能是没配置对虚拟源。可以试试创建两个独立的虚拟源,映射到Realtek声卡的不同输入通道:
- 先通过
pactl list sources找到你的Realtek输入源名称,比如alsa_input.pci-0000_00_1b.0.analog-stereo - 编辑
~/.config/pulse/default.pa,添加以下内容:
# 创建第一个虚拟源(对应左通道输入) load-module module-remap-source source_name=mic1 master=alsa_input.pci-0000_00_1b.0.analog-stereo channel_map=front-left # 创建第二个虚拟源(对应右通道输入) load-module module-remap-source source_name=mic2 master=alsa_input.pci-0000_00_1b.0.analog-stereo channel_map=front-right
- 重启PulseAudio生效:
pulseaudio -k && pulseaudio --start
之后就可以用gstreamer的pulsesrc指定虚拟源录制:
gst-launch-1.0 pulsesrc device=mic1 ! audioconvert ! wavenc ! filesink location=mic1.wav & gst-launch-1.0 pulsesrc device=mic2 ! audioconvert ! wavenc ! filesink location=mic2.wav
3. 备选方案:用alsa_in创建额外输入设备
如果上面的方法都不行,可以试试alsa_in工具(属于alsa-utils包,需要先安装:yum install alsa-utils),它能把音频输入端口映射成独立的ALSA设备:
比如先启动一个alsa_in实例对应前置麦克风:
alsa_in -d hw:0,0,0 -r 44100 -f S16_LE -c 1 -j mic_front &
再启动另一个对应后置麦克风:
alsa_in -d hw:0,0,1 -r 44100 -f S16_LE -c 1 -j mic_rear &
之后就可以像方法1那样,用gstreamer指定mic_front和mic_rear设备录制了。
内容的提问来源于stack exchange,提问作者Avner Gidron

