树莓派3B+ 安装 `ReSpeaker 4-Mics Pi HAT` 声卡,录音与播放

树莓派3B+ 安装 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

参数解析:

  1. -D 指定了录音设备,0,1 是card 0 device 1的意思
  2. -d 指定录音的时长,单位时秒
  3. -f 指定录音格式,通过上面的信息知道只支持 cd cdr dat
  4. -r 指定了采样率,单位时Hz
  5. -c 指定channel 个数
  6. -t 指定生成的文件格式

5. 播放

aplay hello.wav// make sure default device
// Audio will come out via audio jack of Raspberry Pi

6. 软件测试

  1. 可以通过audacity软件测试。打开Audacity后,选择 AC108和2通道 作为输入,bcm2835 alsa: - (hw:0,0) 作为输出来测试
  2. 使用 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。所以一定是版本问题。

你可能感兴趣的:(树莓派)