树莓派3B+
ReSpeaker 4-Mics Pi HAT
3.5mm耳机
wukong-robot: link
具体参考官方手动安装教程
该问题wukong-robot社区有解决方案,但是并没有解决我遇到的问题,根据经验赞同他们提的思路:alsa 和 pulseaudio 冲突。
首先判断声卡及音响是否正常:
// 查看音频输入设备
pi@raspberrypi:~ $ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: ArrayUAC10 [ReSpeaker 4 Mic Array (UAC1.0)], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
// 查看音响输出设备
pi@raspberrypi:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 1: ArrayUAC10 [ReSpeaker 4 Mic Array (UAC1.0)], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
确认设备识别没问题,在相关文件配置中,麦克风设备表示为‘hw:1,0’,3.5mm耳机表示为‘hw:0,0’,使用下面指令测试麦克风和耳机可以正常工作
// 实时播放麦克风采集的音频
arecord -D plughw:1,0 -f cd |aplay -D plughw:0,0 -f cd
但是偏偏每次执行sudo python3 wukong.py时,麦克风可以使用但是听不到声音(此时未更换唤醒词,且在web配置界面我把唤醒灵敏度调到最大,这样可以从终端log打印上看到基本上随便说句话都能触发唤醒)。
于是尝试顺着alsa 和 pulseaudio冲突去搜索解决问题, 在这篇文章中找到了答案:
第一步:修改analog-output.conf.common
//1、终端执行
sudo nano /usr/share/pulseaudio/alsa-mixer/paths/analog-output.conf.common
//2、找到以下代码段
[Element PCM]
switch = mute
volume = merge
override-map.1 = all
override-map.2 = all-left,all-right
//3、改成下面这样
[Element PCM]
switch = mute
volume = ignore
volume-limit = 0.01
override-map.1 = all
override-map.2 = all-left,all-right
第二步:修改default.pa
// 1、终端执行
sudo nano /etc/pulse/default.pa
//2、找到包含这两句的
load-module module-alsa-sink
load-module module-udev-detect
//3、修改成下面这样(被注释掉的话要打开)
load-module module-alsa-sink control=PCM
load-module module-udev-detect ignore_dB=1
第三步:重启pulseaudio
// 终端依次执行
pulseaudio -k
pulseaudio --start
至此该问题成功解决,附上结果过程中尝试过的其他办法:
链接1
链接2
链接3
pulseaudio模块wiki文档