IoT-For-Beginners 实战:Raspberry Pi 麦克风与扬声器配置完整指南(基于 ALSA 与 ReSpeaker)
【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners
本篇技术指南以 IoT-For-Beginners 项目第 6 个项目(消费类 IoT 语音识别)中的 Raspberry Pi 硬件配置章节为核心,讲解如何为树莓派外接并配置麦克风与扬声器,使其具备音频采集与回放能力。读者学完本篇后,将掌握arecord、aplay、ALSA 默认声卡配置以及alsamixer调音工具的使用方法,为后续的语音采集、语音转文字(Speech to Text)实验打下硬件基础。
硬件需求:Pi 没有内置麦克风
Raspberry Pi 板载没有麦克风,因此必须外接一个录音设备。可供选择的方案包括:
- USB 麦克风:即插即用,是成本最低、最稳妥的方案;
- USB 耳机:麦克风与耳机一体,兼顾录音与回放;
- USB 一体式会议通话设备(all in one speakerphone):通常内置麦克风阵列与扬声器;
- USB 音频适配器 + 3.5mm 麦克风:通过适配器将模拟麦克风接入 USB;
- ReSpeaker 2-Mics Pi HAT:Seeed 出品的树莓派扩展板,板载双麦克风(详见 ReSpeaker 2-Mics Pi HAT 产品页)。
💁 注意:Raspberry Pi 对 Bluetooth 麦克风的支持并不完整。如果你使用蓝牙麦克风或蓝牙耳机,可能会在配对或音频采集环节遇到问题,建议优先使用 USB 方案。
输出设备方面,Raspberry Pi 自带 3.5mm 耳机插孔,可连接耳机、耳麦或外置音箱;也可以通过以下方式扩展音频输出:
- HDMI 音频:经由显示器或电视输出;
- USB 扬声器;
- USB 耳机;
- USB 一体式会议通话设备;
- ReSpeaker 2-Mics Pi HAT:在其 3.5mm 插孔或 JST 端口上外接扬声器。
在本项目的后续课程中,Pi 需要一块 Grove 按钮来控制录音(详见 pi-audio.md),而 ReSpeaker HAT 板载了一个按钮,因此使用该 HAT 时不再需要 Grove Base Hat 底板。
连接并配置麦克风
检查录音设备:arecord -l
将麦克风通过合适的方式接入 Pi(例如插入 USB 端口)后,在 Pi 终端(或通过 VS Code Remote SSH 连接)执行:
arecord -l该命令会列出所有可用的录音(CAPTURE)硬件设备,输出形如:
pi@raspberrypi:~ $ arecord -l **** List of CAPTURE Hardware Devices **** card 1: M0 [eMeet M0], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0如果只接了一个麦克风,列表中应只有一条记录。Linux 下多麦克风配置较复杂,因此建议只保留一个麦克风,拔掉其余设备,降低配置难度。
请务必记下声卡编号(card number),后续代码中会用到。以上例而言,card 1表示该 USB 麦克风的声卡编号为1。
使用 ReSpeaker 2-Mics Pi HAT
如果选用 ReSpeaker 2-Mics Pi HAT:
- 取下 Grove Base Hat 底板,将 ReSpeaker HAT 安装到原位置:
- 安装完成后需要安装驱动,请参考 Seeed 官方《ReSpeaker 2-Mics Pi HAT 入门指南》中的驱动安装说明。
⚠️ 官方驱动说明使用
git克隆仓库。若 Pi 上尚未安装git,先执行:sudo apt install git --yes
连接并配置扬声器
检查回放设备:aplay -l
连接扬声器后,执行以下命令查看所有可用的回放(PLAYBACK)硬件设备:
aplay -l输出形如:
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: M0 [eMeet M0], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0card 0: Headphones对应的是板载 3.5mm 耳机插孔,总是会出现;额外添加的 USB 扬声器等设备会作为独立条目列出。
设置默认输出声卡:编辑/usr/share/alsa/alsa.conf
如果你使用的是额外的扬声器(而非插在板载耳机孔上的耳机/音箱),需要将其设为系统默认输出设备:
sudo nano /usr/share/alsa/alsa.conf该命令会用nano终端文本编辑器打开 ALSA 全局配置文件。用键盘方向键滚动,找到如下行:
defaults.pcm.card 0将其中的0改成aplay -l输出中你希望使用的声卡编号。例如上面输出中第二块声卡为card 1: M0 [eMeet M0], device 0: USB Audio [USB Audio],要使用它就把该行改为:
defaults.pcm.card 1修改完成后按Ctrl+x保存并退出:按y确认保存,再按Enter确认文件名。之后默认回放将路由到指定声卡。
该配置会全局影响 ALSA 的默认 PCM 回放设备。若后续播放出错,第一排查点就是这里设置的
defaults.pcm.card是否与真实声卡编号一致。
测试麦克风与扬声器
录制 5 秒音频
执行以下命令,通过麦克风录制 5 秒 WAV 音频:
arecord --format=S16_LE --duration=5 --rate=16000 --file-type=wav out.wav参数含义:
| 参数 | 含义 |
|---|---|
--format=S16_LE | 采样格式为 16 位有符号小端整数(PCM) |
--duration=5 | 录制 5 秒 |
--rate=16000 | 采样率 16KHz,足够供语音识别模型使用 |
--file-type=wav | 输出 WAV 容器格式 |
命令运行期间,请对着麦克风发出声音——说话、唱歌、beatbox、弹奏乐器皆可。
回放录音
5 秒后录制自动停止,执行:
aplay --format=S16_LE --rate=16000 out.wav即可通过扬声器听到刚才的录音,必要时调节扬声器音量。
调节音量与麦克风增益:alsamixer
如果需要调节板载麦克风端口音量或调整麦克风增益,可使用alsamixer交互工具(参见 Linux alsamixer 手册页)。
若回放出现错误,请再次核对alsa.conf中defaults.pcm.card是否指向了正确的声卡编号。
与课程代码的衔接:声卡编号与采样率如何影响代码
完成硬件配置后,下一步是编写 Python 录音代码(完整代码见 code-record/pi/smart-timer/app.py)。在 pi-audio.md 的录音程序中,声卡编号直接决定音频流的输入输出设备:
microphone_card_number = <microphone card number> speaker_card_number = <speaker card number>其中<microphone card number>来自本节arecord -l的输出,<speaker card number>则是你在alsa.conf中设置的同一个编号。采样率也在代码中声明:
rate = 48000 #48KHz如果运行时出现OSError: [Errno -9997] Invalid sample rate之类的采样率错误,把rate改为44100或16000即可——采样率越高音质越好,但对硬件支持要求也越高。
到了语音转文字阶段(完整代码见 code-speech-to-text/pi/smart-timer/app.py),录音缓冲区会以Content-Type: audio/wav; codecs=audio/pcm; samplerate={rate}的请求头发送给云端语音服务,因此本节确定的采样率会直接影响后续识别请求的格式声明,录制与识别两端必须保持一致。整个实验的课程背景、麦克风原理与语音识别概念见 课程 README。
【免费下载链接】IoT-For-Beginners12 Weeks, 24 Lessons, IoT for All!项目地址: https://gitcode.com/GitHub_Trending/io/IoT-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考