版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/weixin_40490238/article/details/88848335
博主环境:树莓派3B,python3,更新过g++,gcc(不过影响不大)
树莓派更换源:https://blog.csdn.net/weixin_40490238/article/details/83786584
通用性应该比较强
github:https://github.com/kitt-ai/snowboy
snowboy:https://snowboy.kitt.ai/
更新pip3
pip3 install --upgrade pip
安装依赖环境
sudo apt-get install python-pyaudio python3-pyaudio sox
pip install pyaudio
测试音频录制
rec temp.wav
这里时会报错,can't open input 'default': .......
这时安装(配置麦克什么的)
sudo apt-get install alsa-utils pulseaudio
再进行测试
rec test.wav
ctrl+c停止录音,aplay test.wav 播放成功。
到这就成功了一大半。
在这就得自己下载snowboy,编译出适合自己用的_snowboydetect.so
下载snowboy:https://github.com/kitt-ai/snowboy
安装swig(3.0.10或者更高的版本)
sudo apt-get install swig
然后安装atlas
矩阵计算库:(必须安装,否则编译报错)
sudo apt-get install libatlas-base-dev
打开snowboy的下载包,解压
cd /snowboy/swig/Python3
make
得到了编译好的文件_snowboydetect.so
下载snowboy官方raspberry的包:https://s3-us-west-2.amazonaws.com/snowboy/snowboy-releases/rpi-arm-raspbian-8.0-1.1.1.tar.bz2
解压此包,将_snowboydetect.so放入该目录
在此生成自己的唤醒词:https://snowboy.kitt.ai/hotword/34901
然后将自己的**.pmdl文件放入目录
python3 demo.py jingling.pmdl
运行成功,唤醒提示
如果报错,采取以下建议:
arecord -l
得到的结果类似这样:
pi@raspberrypi:~$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 2: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
上面的结果说明当前接入了两个录音设备,选择你要使用的录音设备,并记下声卡编号(或名字)和设备编号。例如,我希望使用 USB PnP Sound Device 这个设备,则声卡编号为 2 (声卡名为 Device
),设备编号为 0 。
类似的方法获取音响的声卡编号和设备编号:
aplay -l
结果类似这样:
pi@raspberrypi:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
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 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
上面的结果说明当前接入了三个播放设备,其中 card 0 是树莓派自带的声卡,如果您是使用 AUX 3.5 口外接的音响/或耳机,那么应该使用 card 0;card 1 和 card 2 则是其他的设备。记下您要使用的声卡
编号和设备编号。
首先创建 /home/pi/.asoundrc :
touch /home/pi/.asoundrc
之后添加您选择的声卡编号和设备。这里举两种常见的配置。
- 第一种:您使用的是一个自带音响和录音的组合设备(例如会议麦克风喇叭,或者一块连接了麦克风和音响的独立USB声卡),那么只需设置 pcm 为该组合设备的编号即可。示例:
pcm.!default {
type plug slave {
pcm "hw:1,0"
}
}
ctl.!default {
type hw
card 1
}
上面的 hw:1,0
表示使用 card 1,设备 0。即 C-Media USB Headphone Set 。如果配成 hw:Set,0
,效果相同(个人更推荐使用声卡名字)。
- 第二种:您使用的是一个单独的 USB 麦克风,并直接通过树莓派的 AUX 3.5 口外接一个音响。那么可以参考如下配置:
pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm "hw:0,0"
}
capture.pcm {
type plug
slave.pcm "hw:2,0"
}
}
ctl.!default {
type hw
card 2
}
由于播放设备(playback)和录音设备(capture)是独立的,所以需要各自配置。
完成后可以测试下命令行录音和播放,看看是否能正常工作。
参考文献:
https://github.com/dingdang-robot/dingdang-robot/wiki/configuration#