树莓派3B+ 安装 ReSpeaker 4-Mics Pi HAT
声卡,录音与播放
ReSpeaker 4-Mics Pi HAT
1. 查看默认声卡
利用cat /proc/asound/cards 可以查看系统出现的声卡,编号为0的为默认声卡
cat /proc/asound/cards
2. 查看录音设备
arecord –l
3. 查看播放设备
aplay -l
4. 录音
选择 ac108 , 4通道
arecord -D ac108 -f S32_LE -r 16000 -c 4 hello.wav
// only support 4 channels
参数解析:
- -D 指定了录音设备,0,1 是card 0 device 1的意思
- -d 指定录音的时长,单位时秒
- -f 指定录音格式,通过上面的信息知道只支持 cd cdr dat
- -r 指定了采样率,单位时Hz
- -c 指定channel 个数
- -t 指定生成的文件格式
5. 播放
aplay hello.wav
// make sure default device
// Audio will come out via audio jack of Raspberry Pi
6. 软件测试
- 可以通过audacity软件测试。打开Audacity后,选择 AC108和2通道 作为输入,bcm2835 alsa: - (hw:0,0) 作为输出来测试
- 使用 alsamixer 调节音量。
7. 默认声卡无法设置为 ReSpeaker 4-Mics 的处理办法
打开 /etc/asound.conf 文件
sudo nano /etc/asound.conf
更改为以下内容:
defaults.pcm.rate_converter “samplerate”
pcm.bcm2835 {
type hw
card ALSA
}
pcm.seeed_4mic_voicecard {
type hw
card seeed4micvoicec
}
pcm.softvol {
type softvol
slave {
pcm “pduplex”
}
control {
name “Master”
card 0
}
}
pcm.!default {
type asym
playback.pcm “plug:softvol”
capture.pcm “pduplex”
}
pcm.recmixer {
ipc_key 140325
ipc_key_add_uid true
type dsnoop
slave.pcm “seeed_4mic_voicecard”
}
pcm.duplex {
type asym
playback.pcm “bcm2835”
capture.pcm “recmixer”
}
pcm.pduplex {
type plug
slave.pcm “duplex”
}
ctl.pduplex {
type hw
card 0
}
pcm.dsp0 {
type plug
slave.pcm “duplex”
}
ctl.mixer0 {
type hw
card 0
}
8. 此时可录制,但使用pyaudio时会出现错误,大致如下:
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1613:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
Cannot connect to server socket err = No such file or directory
Cannot connect to server socket
jack server is not running or cannot be started
解决方法如下:
修改 /etc/asound.conf 文件:
defaults.pcm.card 0
defaults.pcm.device 0
defaults.ctl.card 0
pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm “dmix”
}
capture.pcm {
type plug
slave.pcm “hw:1,0”
}
}
1)针对于麦克风,配置生效的是:
capture.pcm {
type plug
slave.pcm “hw:1,0”
}
使用
arecord -D hw:1,0 -f S32_LE -r 16000 -c 4 hello.wav
测试录音功能。
2)针对于播放,配置生效的是:
defaults.pcm.card 0
defaults.pcm.device 0
defaults.ctl.card 0
使用
aplay -D hw:0,0 hello.wav
测试播放功能。
9. 如果录音、播放正常,但pyaudio依然出现错误,建议升级安装pyaudio。
首先卸载掉以前我们用的库,安装新的库。原因是以前的库有BUG,在python里带的pyaudio库各种报错,最后查看了“stackoverflow”上的一些解决方案,定位错误的源头,发现我的库里read函数不能屏蔽IOerror。所以一定是版本问题。