音频
概述
在 GitHub 上修改
Raspberry Pi音频板为您现有的高保真或基于Raspberry Pi的设备和项目带来高质量的音频。我们提供四种不同的顶部附加硬件(HAT)选项,适用于使用40针GPIO接头的任何Raspberry Pi。
每个板卡都有特定的用途和一组功能。我们的DAC PRO、DAC+和DigiAMP+板卡提供最高音频质量的播放,支持高达HD音频(192kHz);而Codec Zero支持高达HD音频(96kHz),并包括一个内置麦克风,非常适合紧凑型项目。
功能一览
Line out | Balanced out | Stereo speakers | Mono speaker | Headphones | Aux in | Aux out | Ext mic | Built-in mic | |
---|---|---|---|---|---|---|---|---|---|
DAC Pro |
✓ |
✓ |
✓ |
||||||
DAC+ |
✓ |
✓ |
|||||||
DigiAmp+ |
✓ |
||||||||
Codec Zero |
✓ |
✓ |
✓ |
✓ |
✓ |
- 排线
-
双唱机/RCA连接器,通常为红色和白色。此输出是一个变量 模拟信号(0-2V RMS),可以连接到您现有的高保真(前置放大器或放大器),也可以使用 驱动内置放大器的有源扬声器。
- 平衡
-
XLR连接器,通常是三针公连接器。这用于工作室设置,在一些 高端高保真系统。它也可以用来驱动有源监听扬声器,比如俱乐部或 舞台指向DJ或表演者。
- 立体声扬声器
-
两套用于2×25W扬声器的螺丝端子。这些用于没有内置放大的传统高保真扬声器。这些被称为无源扬声器。
- 单声道扬声器
-
用于单个1.2W扬声器的螺丝端子,如晶体管收音机或类似产品中所示。
- 耳机
-
为一组耳机提供立体声音频的3.5毫米插孔插座。Raspberry Pi DAC板上的耳机放大器可以驱动高达80/90Ω阻抗的耳机。
- 辅助
-
双Phono/RCA连接器或3.5毫米插座。接受高达1V RMS的模拟音频。这可用于录制来自可变模拟源(如手机、MP3播放器或类似设备)的音频。
- 辅助输出
-
双Phono/RCA连接器或3.5毫米插座。提供高达1V RMS的模拟音频输出。与线路输出相比,这可用于以较小的音量将音频馈入放大器。
- 外部麦克风
-
一个3.5毫米插座,用于外部驻极体麦克风。当使用外部麦克风输入连接器时,Codec Zero上的内置MEMS麦克风会自动禁用。
Raspberry Pi DAC Pro
在 GitHub 上修改
Raspberry Pi DAC Pro HAT是我们最高保真的数模转换器(DAC)。

借助德州仪器PCM5242,DAC Pro提供出色的信噪比(SNR) 并支持与唱机/RCA线路级输出并行的平衡/差分输出。它还包括一个 专用耳机放大器。DAC Pro由Raspberry Pi通过GPIO接头供电。
作为DAC Pro的一部分,两个三针接头(P7/P9)暴露在Raspberry Pi的USB和以太网端口上方,供可选的XLR板使用,从而实现差分/平衡输出。
Pinouts
P1 |
Analogue out (0-2V RMS), carries GPIO27, MUTE signal (headphone detect), left and right audio and left and right ground. |
P6 |
Headphone socket signals (1: LEFT, 2: GROUND, 3: RIGHT, 4: GROUND, 5: DETECT). |
P7/9 |
Differential (0-4V RMS) output (P7: LEFT, P9: RIGHT). |
P10 |
Alternative 5V input, powering Raspberry Pi in parallel. |
Raspberry Pi DAC+
在 GitHub 上修改
Raspberry Pi DAC+是一款高分辨率音频输出HAT,可提供24位192kHz数字音频输出。

DAC+中使用德州仪器PCM5122将模拟音频传送到设备的唱机连接器。它还支持专用耳机放大器,并通过GPIO接头通过Raspberry Pi供电。
Raspberry Pi DigiAMP+
在 GitHub 上修改
借助Raspberry Pi DigiAMP+,您可以连接2个高达35W的无源立体声扬声器,输出可变,非常适合用于基于Raspberry Pi的高保真系统。
DigiAMP+使用德州仪器TAS5756MPowerDAC,必须由外部电源供电,需要12-24V直流电源(推荐使用XP Power VEC65US19电源)。

DigiAMP+的圆形电源连接器为5.5mm×2.5mm。
开机时,放大器默认静音(静音LED亮起)。软件负责静音状态和LED控制(Raspberry Pi GPIO22)。
DigiAMP+旨在为Raspberry Pi和DigiAMP+并行供电,通过GPIO接头以2.5amp的速度向Raspberry Pi提供5.1V。
Warning
|
使用DigiAMP+时,不要对Raspberry Pi自己的电源输入供电。 |
Raspberry Pi 零编码器
在 GitHub 上修改
Raspberry Pi Codec Zero是一款Raspberry Pi Zero大小的音频HAT。它在Raspberry Pi和Codec Zero的板载Dialog Semchi DA7212编解码器之间提供双向数字音频信号(I2S)。Codec Zero支持一系列输入和输出设备。
-
高性能 24 位音频编码器
-
支持 8-96kHz 之间的常见音频采样率
-
内置微电机电气(MEMS)麦克风(Mic2)
-
单声道电容麦克风(Mic2 左)
-
插入检测时自动禁用 MEMS 麦克风(Mic2)
-
支持额外的单声道电容麦克风(Mic1 右)
-
立体声辅助输入通道(AUX IN) - PHONO/RCA 连接器
-
立体声辅助输出通道(耳机/AUX OUT)
-
灵活的模拟和数字混音路径
-
数字信号处理器(DSP)用于自动电平控制(ALC)
-
五段均衡器
-
单声道线路输出/迷你扬声器驱动器:1.2W @ 5V,THD<10%,R=8Ω

Codec Zero 包括一个 EEPROM,必要时可用于自动配置 Linux 环境。它集成了 MEMS 麦克风,可通过一个 3.5 毫米插座和一个单声道扬声器(1.2W/8Ω)与立体声麦克风输入一起使用。
除了绿色(GPIO23)和红色(GPIO24)LED外,还提供了触觉可编程按钮(GPIO27)。
配置
在 GitHub 上修改
所有Raspberry Pi音频板都包含预编程的EEPROM。Raspberry Pi音频板设计为即插即用;Raspberry Pi OS能够自动检测和配置自身。在Raspberry Pi OS中,右键单击屏幕右上角的音频设置将允许您在板载音频设置和HAT音频设置之间切换:

有许多可用于Raspberry Pi的第三方音频软件应用程序将支持我们音频板的即插即用功能。这些通常是无显示器使用的。它们可以通过PC或Mac应用程序或安装在Raspberry Pi上的网络服务器进行控制,并通过网页进行交互。
如果你需要自己配置树莓派操作系统,也许如果你正在运行自己的无显示器系统,并且没有通过GUI进行控制的选项,你需要让你的树莓派音频板成为树莓派操作系统中的主要音频设备,禁用树莓派的板载音频设备。这是通过编辑 /boot/firmware/config.txt
文件来完成的。使用通过SSH连接到树莓派的终端,运行以下确定来编辑文件:
$ sudo nano /boot/firmware/config.txt
在文件中找到 dtparam=audio=on
行,并在该行的开头放置一个#符号将其注释掉。程序将忽略任何给定行中#符号之后写入的任何内容。您的 /boot/firmware/config.txt
文件现在应该包含以下条目:
#dtparam=audio=on
按 Ctrl+X
,然后按 Y
键,然后按 Enter 保存。最后,重新启动您的Raspberry Pi以使设置生效。
$ sudo reboot
另外,可以直接在树莓派的 microSD 卡上的 /boot/firmware/config.txt
文件进行编辑,方法是将卡插入到您常用的计算机中。使用默认的文件管理器,打开卡上的 /boot/firmware/
分区,使用合适的文本编辑器编辑 config.txt
文件,然后保存文件,弹出 microSD 卡并重新插入回您的树莓派。
安装HAT
Raspberry Pi音频板连接到Raspberry Pi的40针接头。它们设计为使用随附的电路板支架和螺丝支持Raspberry Pi。Raspberry Pi音频板无需焊接即可正常操作,除非您使用特定连接器的硬接线连接,例如DAC Pro上的XLR(外部线路返回)连接。
提供了所有必要的安装硬件,包括垫片、螺钉和连接器。在添加音频板之前,PCB垫片应拧在Raspberry Pi上,仅用手指紧。然后,剩余的螺钉应从上面拧入垫片。
硬件版本
有多个版本的音频卡。您的特定版本决定了配置所需的操作。较旧的IQaudIO品牌板有黑色PCB。较新的Raspberry Pi品牌板有绿色PCB。这些板在电路上是等效的,但具有不同的EEPROM内容。
连接HAT并通电后,检查声卡上的电源LED是否亮着(如果有的话)。例如,Codec Zero有一个标有 PWR
的LED。
建立卡有电后,使用以下ok检查您的板的版本:
$ grep -a . /proc/device-tree/hat/*
如果供应商字符串显示“Raspberry Pi Ltd.”,则不需要进一步的操作(但请参阅下面的额外Codec Zero配置)。如果它显示“IQaudIO Limitedwww.iqaudio.com”,那么您将需要下面概述的额外config. txt设置。如果它说“否此类文件或目录”,则未检测到HAT,但这些config.txt设置仍可能使其正常工作。
# Some magic to prevent the normal HAT overlay from being loaded
dtoverlay=
# And then choose one of the following, according to the model:
dtoverlay=rpi-codeczero
dtoverlay=rpi-dacplus
dtoverlay=rpi-dacpro
dtoverlay=rpi-digiampplus
额外编解码器零配置
树莓派Codec Zero板使用Dialog半导体DA7212编解码器。这允许 从内置MEMS麦克风、立体声唱机插座(AUX IN)或两个单声道外置驻极体麦克风。通过立体声唱机插座(AUX OUT)播放 或单声道扬声器连接器。
每个输入和输出设备都有自己的混音器,允许调整音频电平和音量 独立的。在编解码器本身,存在其他混频器和开关,以允许输出混合到单个单声道,以实现单个扬声器输出。信号也可以反转;有一个五波段均衡器来调整某些频段。这些设置可以使用AlsaMixer进行交互控制,也可以通过编程进行控制。
AUX IN和AUX OUT均为1V RMS。可能需要调整 AUX IN的混频器确保输入信号不会使ADC饱和。同样,可以调整输出混频器以获得最佳输出。
预配置脚本(可加载ALSA设置)https://github.com/raspberrypi/Pi-Codec[可在 GitHub 上获取],提供:
-
单声道 MEMS 麦克风录音,单声道扬声器回放
-
单声道 MEMS 麦克风录音,单声道 AUX 输出回放
-
立体声 AUX IN 录音,立体声 AUX OUT 播放
-
立体声 MIC1/MIC2 录音,立体声 AUX 输出回放
每次Raspberry Pi开机时,Codec Zero需要知道正在使用这些输入和输出设置中的哪些。在Raspberry Pi上使用终端会话,运行以下命令下载脚本:
$ git clone https://github.com/raspberrypi/Pi-Codec.git
如果没有安装git,运行以下命令安装它:
$ sudo apt install git
以下命令将设置您的设备使用板载MEMS麦克风和扬声器播放输出:
$ sudo alsactl restore -f /home/<username>/Pi-Codec/Codec_Zero_OnboardMIC_record_and_SPK_playback.state
此命令可能会导致错误消息,包括:
-
"failed to import hw"
-
"No state is present for card"
在大多数情况下,这些警告是无害的;您可以放心地忽略它们。
但是,以下警告可能表示硬件故障:
-
"Remote I/O error"
在Linux中,以下警告表明内核无法与I2C设备通信:
-
"Remote I/O error" (
REMOTEIO
)
为了让您的项目在开机时使用所需的设置运行,请编辑 /etc/rc.local
文件。此文件的内容在每次启动过程结束时运行,因此非常适合此目的。编辑文件:
$ sudo nano /etc/rc.local
在退出0行上方添加选定的脚本命令,然后 Ctrl X、Y 和 Enter 保存。根据您选择的设置,该文件现在应该类似于此:
#!/bin/sh
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
sudo alsactl restore -f /home/<username>/Pi-Codec/Codec_Zero_OnboardMIC_record_and_SPK_playback.state
exit 0
按 Ctrl+X
,然后按 Y
键,然后 Enter 保存。重新启动设置以生效:
$ sudo reboot
如果您在无显示器环境中使用Raspberry Pi和Codec Zero,则需要最后一步才能使Codec Zero成为默认音频设备,而无需访问桌面上的GUI音频设置。我们需要在您的主文件夹中创建一个小文件:
$ sudo nano .asoundrc
将以下内容添加到文件中:
pcm.!default { type hw card Zero }
按 Ctrl+X
,然后按 Y
键,然后 Enter 保存。再次重启完成配置:
Raspberry Pi OS等现代Linux发行版通常使用PulseAudio或PipeWire进行音频控制。这些框架能够混合和切换来自多个来源的音频。它们提供了一个高级API供音频应用程序使用。许多音频应用程序默认使用这些框架。
仅当音频应用程序需要时才创建 ~/.asoundrc
:
-
直接与 ALSA 通信
-
在没有 PulseAudio 或 PipeWire 的环境中运行
此文件可能会干扰UI对底层音频资源的查看。因此,我们不建议在运行Raspberry Pi OS桌面时创建 ~/.asoundrc
。
如果此文件存在,UI可能会自动清理和删除它。
$ sudo reboot
Mute and unmute the DigiAMP+
DigiAMP+ 静音状态由Raspberry Pi上的GPIO22切换。最新的音频设备树 通过附加参数支持 DigiAMP+ 的取消静音。
首先,内核模块加载时“一次性”取消静音。
对于树莓派板:
dtoverlay=rpi-digiampplus,unmute_amp
对于IQaudIO板:
dtoverlay=iqaudio-digiampplus,unmute_amp
当客户端打开ALSA设备时取消放大器静音。静音,延迟五秒 当ALSA设备关闭时。(在关闭五秒内重新打开设备 窗口将取消静音。)
对于树莓派板:
dtoverlay=rpi-digiampplus,auto_mute_amp
对于IQaudIO板:
dtoverlay=iqaudio-digiampplus,auto_mute_amp
如果您不想通过设备树控制静音状态,您也可以编写自己的脚本 来控制。
放大器将启动静音。取消放大器静音:
$ sudo sh -c "echo 22 > /sys/class/gpio/export"
$ sudo sh -c "echo out >/sys/class/gpio/gpio22/direction"
$ sudo sh -c "echo 1 >/sys/class/gpio/gpio22/value"
要再次静音放大器:
$ sudo sh -c "echo 0 >/sys/class/gpio/gpio22/value"
入门
在 GitHub 上修改
创建一个玩具聊天箱
作为Raspberry Pi Audio Boards可以做什么的示例,让我们来看看玩具聊天盒的创建。它的板载麦克风、可编程按钮和扬声器驱动程序使Codec Zero成为此应用程序的理想选择。

按下按钮时会播放一段随机预先录制的五秒音频剪辑。按住十秒后,会发出通知性的打嗝声,之后会录制一段新的五秒剪辑。按住按钮超过20秒会播放第二次打嗝声,然后擦除所有以前的录音。
硬件及接线
对于这个项目,任何小型无源扬声器都应该足够了。我们正在使用一个可用的 扬声器, 它能在 4Ω 下处理 5W 功率。我们还使用了一个发光的瞬时按钮和一个激光切割盒来放置所有元件,但这两者都是完全可选的。本示例只需使用 Codec Zero 的板载按钮即可,该按钮已预先连接到 GPIO 27。(或者,您也可以使用任何瞬时按钮,如现有的 按钮。)

使用小平头螺丝刀将扬声器连接到螺丝端子。对于额外的按钮,请将按钮线直接焊接到Codec Zero焊盘,如有必要,使用GPIO引脚27和接地作为开关,+3.3V和接地作为LED。
设置Raspberry Pi
在此示例中,我们使用的是Raspberry Pi OS Lite。有关更多详细信息,请参阅我们关于 安装 Raspberry Pi 操作系统 的指南。
确保在继续之前更新操作系统,并按照Codec Zero配置提供的说明进行操作,包括启用板载麦克风和扬声器输出的命令。
在Raspberry Pi上编程
在Raspberry Pi上打开一个shell(例如通过SSH连接)并运行以下命令来创建我们的Python脚本:
$ sudo nano chatter_box.py
将以下内容添加到文件中,将 <username>
替换为您的用户名:
#!/usr/bin/env python3
from gpiozero import Button
from signal import pause
import time
import random
import os
from datetime import datetime
# Print current date
date = datetime.now().strftime("%d_%m_%Y-%H:%M:%S")
print(f"{date}")
# Make sure that the 'sounds' folder exists, and if it does not, create it
path = '/home/<username>/sounds'
isExist = os.path.exists(path)
if not isExist:
os.makedirs(path)
print("The new directory is created!")
os.system('chmod 777 -R /home/<username>/sounds')
# Download a 'burp' sound if it does not already exist
burp = '/home/<username>/burp.wav'
isExist = os.path.exists(burp)
if not isExist:
os.system('wget http://rpf.io/burp -O burp.wav')
print("Burp sound downloaded!")
# Setup button functions - Pin 27 = Button hold time 10 seconds.
button = Button(27, hold_time=10)
def pressed():
global press_time
press_time = time.time()
print("Pressed at %s" % (press_time));
def released():
release_time = time.time()
pressed_for = release_time - press_time
print("Released at %s after %.2f seconds" % (release_time, pressed_for))
if pressed_for < button.hold_time:
print("This is a short press")
randomfile = random.choice(os.listdir("/home/<username>/sounds/"))
file = '/home/<username>/sounds/' + randomfile
os.system('aplay ' + file)
elif pressed_for > 20:
os.system('aplay ' + burp)
print("Erasing all recorded sounds")
os.system('rm /home/<username>/sounds/*');
def held():
print("This is a long press")
os.system('aplay ' + burp)
os.system('arecord --format S16_LE --duration=5 --rate 48000 -c2 /home/<username>/sounds/$(date +"%d_%m_%Y-%H_%M_%S")_voice.m4a');
button.when_pressed = pressed
button.when_released = released
button.when_held = held
pause()
按 Ctrl+X
,然后按 Y
键,然后 Enter 保存。要使脚本可执行,请键入以下内容:
$ sudo chmod +x chatter_box.py
接下来,我们需要创建一个crontab守护进程,它将在每次设备通电时自动启动脚本。运行以下命令打开您的crontab进行编辑:
$ crontab -e
您将被要求选择一个编辑器;我们建议您使用 nano
。通过输入相应的数字来选择它,然后按Enter继续。应在文件底部添加以下行,将 <username>
替换为您的用户名:
@reboot python /home/<username>/chatter_box.py
按 Ctrl X,然后按 Y,然后按 Enter 保存,然后使用 sudo reboot
重新启动设备。
使用玩具聊天箱
最后一步是确保一切都按预期运行。按下按钮并在听到打嗝时释放它。录音现在将开始一段五秒钟的时间。一旦您释放了按钮,请再次短暂按下它以听到录音。根据需要重复此过程多次,您的声音将随机播放。您可以通过按住按钮删除所有录音,在第一次打嗝和录音过程中保持按下按钮,并在至少20秒后释放它,此时您将听到另一个打嗝声,确认录音已被删除。
下一步
升级!升级一个项目总是很有趣的,所以为什么不添加一些额外的功能,比如录音时会发光的发光二极管呢?这个项目拥有制作你自己的 Google intelligent speaker system 版本所需的所有部件,或者你可能想考虑构建第二个设备,用于创建一对对讲机,能够通过SSH通过网络传输音频文件。
硬件信息
在 GitHub 上修改
硬件信息:
-
PCB 螺钉均为 M2.5。
-
PCB 支座(用于外壳)为 5 毫米公头/母头。
-
PCB 支座(用于 Raspberry Pi 与音频板连接)为 9 毫米母头/母头。
-
PCB 支座(用于 XLR 至 DAC PRO)为 8 毫米母头/公头。
-
PCB 支座(用于 Raspberry Pi 官方 7 英寸显示屏)为 5 毫米公头/母头。
-
我们使用并测试的旋转编码器是 Alpha 三针旋转编码器 RE160F-40E3-20A-24P,阿尔卑斯山EC12E2430804(RS: 729-5848)和伯恩斯ECW0JB24-AC0006L(RS:263-2839)。
-
用于为 DigiAMP+ 供电的桶形连接器直径为 2.5mm,直径为 5.5mm,直径为 11mm。
-
DigiAMP+ 的设计工作电压为 12V 至 24V,3A,如 XPPower VEC65US19 或类似。 VEC65US19 或类似。
-
DigiAMP+ 使用 CamdenBoss 两部分连接器。安装在 PCB 上的连接器是 CTBP9350/2AO。
-
Codec Zero 上使用的扬声器端子可接受 14~26 AWG 的导线。 直径(最大为 1.6mm 的电线)。
GPIO 用法
Raspberry Pi音频板利用GPIO接头上的多个引脚 为了成功操作。其中一些引脚仅供电路板使用,并且 有些可以与其他外围设备、传感器等共享。
音频板将使用以下Raspberry Pi GPIO引脚:
-
所有电源引脚
-
所有接地引脚
-
GPIO 2/3(I2C)
-
GPIO 18/19/20/21(I2S)
如果合适,还可以使用以下内容:
-
GPIO 22(支持 DigiAMP+ 静音/静音)
-
GPIO 23/24,用于旋转编码器(物理音量控制)或状态 LED(Codec Zero)
-
用于红外传感器的 GPIO 25
-
GPIO 27,用于旋转编码器按钮开关/Codec Zero开关
DAC PRO, DAC+, DigiAMP+, Codec Zero

DAC PRO、DAC+ 和 DigiAMP+ 可重新显示 Raspberry Pi 信号,从而轻松添加其他传感器和外设。 轻松添加额外的传感器和外设。请注意,有些信号(I2S 和 EEPROM)是我们的某些电路板专用的,而其他信号(如 I2S 和 EEPROM)则是共用的。 和 EEPROM);其他信号(如 I2C)则可在多个电路板上共享。

更新固件
在 GitHub 上修改
Raspberry Pi Audio Boards使用EEPROM,其中包含主机Raspberry Pi设备在启动时用于选择适当驱动程序的信息。这些信息在制造过程中被编程到EEPROM中。在某些情况下,最终用户可能希望更新EEPROM内容:这可以从命令行完成。
Important
|
在继续之前,请将在Raspberry Pi上运行的Raspberry Pi OS版本更新到最新版本。 |
EEPROM 写保护功能
在编程过程中,您需要用电线连接红色框中显示的两个焊盘,以拉下EEPROM写保护功能。

Note
|
在某些情况下,两个焊盘可能已经安装了一个0Ω电阻器来桥接写保护链路,如上面的Codec Zero板图片所示。 |
烧录EEPROM
一旦写保护线被拉下,就可以对EEPROM进行编程。
您应该首先安装实用程序,然后运行程序员。打开终端窗口并键入以下内容:
$ sudo apt update
$ sudo apt install rpi-audio-utils
$ sudo rpi-audio-flash
启动后,您将看到一个警告屏幕。

选择“是”继续。您应该会看到一个菜单,您可以在其中选择您的硬件。

Note
|
如果不存在HAT,或者如果连接的HAT不是Raspberry Pi音频板,您将看到错误屏幕。如果板上的固件已经更新,将显示一条消息,通知您不必继续。 |
选择硬件后,将显示一个屏幕,同时新固件烧录到HAT。

之后将显示一个屏幕,告诉您新固件已安装。

Note
|
如果固件无法正确安装,您将看到错误屏幕。尝试移除并重新安装HAT,然后再次刷新固件。 |