# 音频功能 ***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.*** --- 本文档提供 Quectel Pi M2 开发板(RK3576 平台)**Linux** 音频系统操作的简明指南。系统采用 **ALSA + PipeWire(兼容 PulseAudio)** 的音频架构,从底层驱动到应用层提供完整的音频解决方案。 # 快速开始 Quectel Pi M2 开发板基于瑞芯微 RK3576 平台,音频 Codec 采用 Everest ES8389(I2S 接口,I2C 地址 0x10),音频硬件包含 4 类通道: | **通道类型** | **通道名称** | **硬件对应位置** | **说明** | | --- | --- | --- | --- | | 输入 | 板载 MIC | 板载 MEMS 麦克风 | 内置硅麦,默认录音输入源,无需外接 | | 输入 && 输出 | 耳机 | 3.5 mm 耳机座 | 支持国标/美标耳机,带耳机插入检测(ADC 检测);耳机插入后系统自动将播放通道切到耳机(同时关闭喇叭 PA),拔出后自动切回喇叭 | | 输出 | SPK (扬声器) | 扬声器接口 | 板载功放(PA),默认喇叭输出,DAC 默认 -6 dB;与耳机共用同一 DAC 音源(均接 HPOL/HPOR),仅通过 PA 使能(spk-con-gpio)控制输出 | | 输出 | HDMI 音频 | HDMI 接口 | 通过 HDMI 输出数字音频(声卡 rockchip-hdmi) | | 输出 | 蓝牙音频 | 蓝牙天线 | A2DP 蓝牙音箱/耳机播放,HFP 免提通话 | ```{image} images/image_Q8LzbGH7goTLjrxNp3Tcbsfqnfh.webp :width: 514px :height: 446px :align: center ``` ```{image} images/image_KoUjbw71eo2VuExEYsmczLU4nXo.webp :width: 942px :height: 593px :align: center ``` 系统提供一组标准音频配置与调试命令,用于完成设备检查、录音、播放和音量控制等常见操作。 > **音频架构说明**:M2 开发板 Debian 系统采用 **PipeWire + WirePlumber** 作为音频服务(替代传统 PulseAudio),并提供 `pactl`/`paplay` 等 PulseAudio 兼容命令行工具。底层仍由 ALSA 驱动声卡硬件。 ## 查看声卡信息 可通过以下命令检查系统声卡与 PCM 设备的加载情况: - 查看声卡列表: ```shell cat /proc/asound/cards ``` 预期输出(M2 开发板): ```plaintext 0 [rockchipes8389 ]: rockchip-es8389 - rockchip-es8389 rockchip-es8389 1 [rockchipbt ]: simple-card - rockchip,bt rockchip,bt 2 [rockchiphdmi ]: rockchip-hdmi - rockchip-hdmi rockchip-hdmi ``` - 查看已分配的 **pcm** 流列表: ```shell cat /proc/asound/pcm ``` - 查看当前默认音频设备: ```shell aplay -l arecord -l ``` > 说明:若系统未检测到声卡信息或 **PCM** 流,则 **ALSA** 与 **PipeWire** 均无法正常工作。 # ALSA 架构 ## ALSA 概述 ALSA 是 Linux 系统的底层音频架构与驱动核心,直接管理和控制音频硬件。M2 开发板的内核已内置 ES8389 Codec 驱动(`sound/soc/codecs/es8389.c`)及机器驱动(`sound/soc/rockchip/rockchip_multicodecs.c`),设备树中声卡定义于 `rk3576-quectel-pi-m2-audio.dtsi`: - **ES8389 Codec**:I2C 地址 0x10,MCLK 12.288 MHz,走 SAI1(I2S)接口 - **耳机检测**:`hp-det-gpio` + SARADC 检测,支持耳机插入/拔出自动切换 - **喇叭功放**:`spk-con-gpio`(speak_pa_en)控制 PA 使能 - **MIC 输入源切换**:`rockchip,mic-source-switch` 支持板载 MIC / 耳机 MIC 切换 - **HDMI 音频**:声卡 `rockchip-hdmi`,走 SAI6 接口 ### ES8389 主要 ALSA 控件 可通过 `amixer` 查看与设置 ES8389 的全部控制项: ```shell amixer -c 0 scontrols ``` 常用控件: | **控件名** | **说明** | **默认值** | | --- | --- | --- | | DACL Playback Volume | 左声道 DAC 音量(0~255,191=0dB,0.5dB/步) | 179(-6dB) | | DACR Playback Volume | 右声道 DAC 音量(0~255,191=0dB,0.5dB/步) | 179(-6dB) | | ADCL PGA Volume | 左声道麦克风 PGA 增益(0~14) | 8 | | ADCR PGA Volume | 右声道麦克风 PGA 增益(0~14) | 8 | | Speaker | 喇叭开关(DAPM 控件) | on | | Headphone | 耳机开关(DAPM 控件) | on | > **说明**:M2 开发板喇叭默认音量为 **-6 dB**(DAC = 179),已通过 ALSA 路径配置文件(`/usr/share/alsa-card-profile/mixer/paths/analog-output-es8389-m2.conf`)固定,避免喇叭声音过大。如需调整,修改该配置文件中 `volume = 179` 的值(如 -3dB 用 185,-9dB 用 173),或临时用 amixer 调整。 ## 音频录制 ### 板载麦克风录制 **默认录音输入源自动切换规则**:系统通过耳机插入检测(`hp-det-gpio` + SARADC)实时判断耳机插拔状态,并自动切换录音输入源: - **耳机插入时**:默认使用 **耳机麦克风** 录音,无需手动切换 - **耳机未插入时**:默认使用 **板载 MIC** 录音 耳机未插入时,M2 开发板默认录音输入源为板载 MIC。使用 `arecord` 录制: ```shell arecord -D hw:0,0 -f S16_LE -r 48000 -c 2 -d 5 /tmp/record_mic.wav ``` 参数说明: - `-D hw:0,0`:使用声卡 0(rockchip-es8389)PCM 设备 0 - `-f S16_LE`:16 位小端 PCM 格式 - `-r 48000`:采样率 48 kHz - `-c 2`:双声道 - `-d 5`:录制 5 秒 停止录制:录制时长到达 `-d` 指定秒数后自动停止;也可按 `Ctrl+C` 中断。 ### 耳机麦克风录制 **耳机插入后**,系统通过耳机检测自动将录音输入源切换为耳机麦克风(此时耳机 MIC 为默认录音输入源);耳机拔出后自动切回板载 MIC。也可手动指定: ```shell arecord -D hw:0,0 -f S16_LE -r 48000 -c 2 -d 5 /tmp/record_headset.wav ``` ## 音频播放 ### 喇叭播放 M2 开发板默认音频输出为板载喇叭(经 PA 功放)。使用 `aplay` 播放: **耳机/喇叭自动切换机制**:M2 开发板的喇叭(Speaker)与耳机(Headphone)**共用同一路 DAC 音源**(设备树 audio-routing 中两者均接 HPOL/HPOR),区别仅在于输出通路上的 PA 功放使能。系统通过 `hp-det-gpio` + SARADC 实时检测耳机插入状态: - **耳机插入**:检测到耳机后,系统自动将默认播放通道切换到耳机(Headphone 通路),同时关闭喇叭 PA(`spk-con-gpio` 拉低,Speaker DAPM 断电),声音只从耳机输出;录音输入同步切换到耳机麦克风。 - **耳机拔出**:检测到耳机拔出后,系统自动切回板载喇叭(Speaker 通路),重新使能 PA(`spk-con-gpio` 拉高),声音从喇叭输出;录音输入切回板载 MIC。 因此喇叭与耳机播放的是同一路音频数据,无需分别配置音源,仅硬件输出通路(PA 使能)不同。 ```shell aplay -D hw:0,0 /tmp/test.wav ``` ### 耳机播放 插入耳机后,系统自动将音频路由切换到耳机。也可手动指定播放设备: ```shell aplay -D hw:0,0 /tmp/test.wav ``` ### HDMI 音频播放 HDMI 音频走独立声卡(rockchip-hdmi),使用声卡 2: ```shell aplay -D hw:2,0 /tmp/test.wav ``` ## 音量控制 ### 查看当前音量 ```shell amixer -c 0 sget 'DACL' amixer -c 0 sget 'DACR' ``` ### 设置音量 ```shell # 设置左声道 DAC 音量为 -6dB(179) amixer -c 0 cset numid=51 179 # 设置右声道 DAC 音量为 -6dB(179) amixer -c 0 cset numid=52 179 # 或使用控件名设置(0dB = 191,-6dB = 179,每步 0.5dB) amixer -c 0 sset 'DACL' 179 amixer -c 0 sset 'DACR' 179 ``` 音量数值与 dB 对应关系:`dB = -95.5 + 0.5 × value`,即: - 191 → 0 dB - 179 → -6 dB - 167 → -12 dB - 143 → -24 dB ### 设置麦克风增益 ```shell # 设置左声道 MIC PGA 增益(0~14,每步 3dB) amixer -c 0 sset 'ADCL PGA' 8 # 设置右声道 MIC PGA 增益 amixer -c 0 sset 'ADCR PGA' 8 ``` ### 查看所有 ALSA 控件完整信息 ```shell amixer -c 0 contents ``` # PipeWire / PulseAudio 架构 ## 概述 M2 开发板 Debian 系统使用 **PipeWire + WirePlumber** 作为音频服务框架,并提供 PulseAudio 兼容层(pipewire-pulse),因此所有 `pactl`/`paplay`/`parec` 等 PulseAudio 命令均可直接使用。WirePlumber 负责音频设备与路由的自动管理。 ### 设备查看与管理 **1. 查看可用输出设备(Sinks)** ```shell pactl list short sinks ``` M2 开发板典型输出: ```plaintext 0 alsa_output.platform-es8389-sound.analog-stereo PipeWire s32le 2ch 48000Hz SUSPENDED 1 alsa_output.platform-hdmi-sound.hdmi-stereo PipeWire s32le 2ch 48000Hz SUSPENDED ``` - `alsa_output.platform-es8389-sound.analog-stereo`:板载音频(喇叭/耳机) - `alsa_output.platform-hdmi-sound.hdmi-stereo`:HDMI 音频 - 蓝牙音箱/耳机连接后会动态出现 `bluez_output.xxx` sink **注意:adb进入默认是root,需要进入普通用户**。如下: > ```plaintext > root@linaro-alip:/# pactl list short sinks > Connection failure: Connection refused > pa_context_connect() failed: Connection refused > root@linaro-alip:/# su w > w@linaro-alip:/$ pactl list short sinks > 56 alsa_output.platform-es8389-sound.analog-stereo PipeWire s32le 2ch 48000Hz SUSPENDED > ``` **2. 查看输入设备(Sources)** ```shell pactl list short sources ``` M2 开发板典型输入: ```plaintext 0 alsa_input.platform-es8389-sound.analog-stereo PipeWire s32le 2ch 48000Hz SUSPENDED ``` 蓝牙耳机(HFP)连接后会动态出现 `bluez_input.xxx` source。 **3. 查看详细设备信息** ```shell pactl list sinks pactl list sources ``` ### 设置默认输出/输入设备 ```shell # 设置默认输出为板载喇叭/耳机 pactl set-default-sink alsa_output.platform-es8389-sound.analog-stereo # 设置默认输出为 HDMI pactl set-default-sink alsa_output.platform-hdmi-sound.hdmi-stereo # 设置默认输入为板载 MIC pactl set-default-source alsa_input.platform-es8389-sound.analog-stereo ``` ## 录音 ### 板载 MIC 录音 ```shell pactl set-default-source alsa_input.platform-es8389-sound.analog-stereo parec --file-format=wav /tmp/output_mic.wav ``` 停止录音:按 `Ctrl+C`。 ### 耳机 MIC 录音 **耳机插入后**,WirePlumber 会自动将默认输入路由切换为耳机麦克风(此时耳机 MIC 为默认录音输入源);耳机拔出后自动切回板载 MIC。也可手动指定: ```shell parec --file-format=wav /tmp/output_headset.wav ``` ## 播放 ### 喇叭/耳机播放 ```shell paplay /tmp/test.wav ``` 默认输出到板载音频。喇叭与耳机共用同一 DAC 音源,系统通过耳机检测自动切换:插入耳机自动切到耳机(关闭喇叭 PA),拔出耳机自动切回喇叭(重新使能 PA),无需手动配置。 ### 指定 sink 播放 ```shell # 播放到板载喇叭/耳机 paplay --device=alsa_output.platform-es8389-sound.analog-stereo /tmp/test.wav # 播放到 HDMI paplay --device=alsa_output.platform-hdmi-sound.hdmi-stereo /tmp/test.wav ``` ## 音量控制 ### 查看/设置输出音量 ```shell # 查看所有 sink 音量 pactl list sinks | grep -E 'Sink|Volume|Mute' # 设置音量(百分比) pactl set-sink-volume @DEFAULT_SINK@ 80% # 静音/取消静音 pactl set-sink-mute @DEFAULT_SINK@ toggle ``` ### 查看/设置输入音量 ```shell # 设置麦克风音量 pactl set-source-volume @DEFAULT_SOURCE@ 80% # 静音麦克风 pactl set-source-mute @DEFAULT_SOURCE@ toggle ``` # GNOME 桌面使用指南 M2 开发板 Debian 系统默认搭载 GNOME 桌面(Wayland),音频设置集成在系统设置中。 ## 打开声音设置 点击右上角状态栏的音量图标 → 选择"声音设置";或打开"设置"应用 → 选择"声音"。