天天看点

树莓派3B+ 安装 `ReSpeaker 4-Mics Pi HAT` 声卡,录音与播放树莓派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。所以一定是版本问题。