音频功能¶
Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.
本文档提供Quectel Pi M1/L1开发板 Linux 音频系统操作的简明指南。系统采用 ALSA + PulseAudio 的双层音频架构,从底层驱动到应用层提供完整的音频解决方案。
快速开始¶
Quectel Pi M1/L1开发板的音频硬件包含 2 路输入 和 2 路输出,通过板载的 SH1.0-4P 连接器及板载 MEMS 器件以及板上预留测试点实现。请在操作前确认硬件连接正确。
通道类型 |
通道名称 |
硬件对应位置 |
说明 |
|---|---|---|---|
输入 |
板载 MIC |
主板上的 MEMS 麦克风 |
内置硅麦,默认录音输入源,无需外接。 |
输入 && 输出 |
耳机 |
SH1.0-4P |
外接带麦耳机。 |
输出 |
SPK (扬声器) |
预留测试点 |
驱动大功率外放扬声器(需外接功放,直接接喇叭声音较小)。 |
输出 |
EAR (听筒) |
预留测试点 |
驱动小功率听筒/耳机。 |
系统提供一组标准音频配置与调试命令,用于完成设备检查、录音、播放和音量控制等常见操作。
通过本文档,您无需深入复杂配置,即可快速定位并解决大多数音频相关问题。
喇叭和耳机硬件接口¶
查看声卡信息¶
可通过以下命令检查系统声卡与 PCM 设备的加载情况:
查看声卡列表:
cat /proc/asound/cards
查看已分配的 pcm 流列表:
cat /proc/asound/pcm
说明:若系统未检测到声卡信息或 PCM 流,则 ALSA 与 PulseAudio 均无法正常工作。
ALSA架构¶
ALSA概述¶
ALSA是Linux系统的底层音频架构与驱动核心,它直接管理和控制计算机的音频硬件。它一方面为声卡提供原生驱动,实现对物理音频通道(如外置麦克风、耳机、扬声器)的直接读写;另一方面为应用程序提供标准化的API接口,完成最基础的音频采集与播放。ALSA是构建一切高级音频服务(如PulseAudio)的基石。
音频录制¶
在 Linux系统 下,需确认智能主控板音频配置文件 /etc/backend_conf.xml 已正确配置(系统默认已完成配置):
<device name="CODEC_DMA-LPAIF_RXTX-TX-3" rate="48000" ch="2" bits="16" />
在 Android系统 中,上述音频配置已默认生效,无需额外修改。
板载麦克风录制¶
Linux系统下录制¶
进行录制前,需要先停止 PulseAudio 服务:
systemctl stop pulseaudio
tinymix "TX DEC0 MUX" "SWR_MIC"
tinymix "ADC2 ChMap" "SWRM_TX2_CH1"
tinymix "TX SMIC MUX0" "SWR_MIC4"
tinymix "TX_AIF1_CAP Mixer DEC0" "1"
tinymix "ADC2_MIXER Switch" "1"
tinymix "ADC2 MUX" "INP3"
tinymix 'TX_AIF1_CAP Mixer DEC2' '1'
agmcap /data/testMic3.wav -D 100 -d 101 -c 1 -r 48000 -i "CODEC_DMA-LPAIF_RXTX-TX-3"
Android系统下录制¶
tinymix "TX DEC0 MUX" "SWR_MIC"
tinymix "ADC2 ChMap" "SWRM_TX2_CH1"
tinymix "TX SMIC MUX0" "SWR_MIC4"
tinymix "TX_AIF1_CAP Mixer DEC0" "1"
tinymix "ADC2_MIXER Switch" "1"
tinymix "ADC2 MUX" "INP3"
tinymix 'TX_AIF1_CAP Mixer DEC2' '1'
agmcap ./testMic3.wav -D 100 -d 101 -c 1 -r 48000 -i "CODEC_DMA-LPAIF_RXTX-TX-3"
结束录制¶
按下“Ctrl” + “Z”结束录音:
耳机麦克风录制¶
Linux系统下录制¶
systemctl stop pulseaudio
tinymix "TX DEC0 MUX" "SWR_MIC"
tinymix "TX SMIC MUX0" "SWR_MIC5"
tinymix "DEC0_BCS Switch" "1"
tinymix "TX_AIF1_CAP Mixer DEC0" "1"
tinymix "ADC2 ChMap" "SWRM_TX2_CH2"
tinymix "MBHC ChMap" "SWRM_TX3_CH3"
tinymix "ADC2_MIXER Switch" "1"
tinymix "ADC2 MUX" "INP2"
tinymix "BCS Channel" "CH10"
agmcap /data/rec2.wav -D 100 -d 101 -c 1 -r 48000 -i "CODEC_DMA-LPAIF_RXTX-TX-3"
Android系统下录制¶
tinymix "TX DEC0 MUX" "SWR_MIC"
tinymix "TX SMIC MUX0" "SWR_MIC5"
tinymix "DEC0_BCS Switch" "1"
tinymix "TX_AIF1_CAP Mixer DEC0" "1"
tinymix "ADC2 ChMap" "SWRM_TX2_CH2"
tinymix "MBHC ChMap" "SWRM_TX3_CH3"
tinymix "ADC2_MIXER Switch" "1"
tinymix "ADC2 MUX" "INP2"
tinymix "BCS Channel" "CH10"
agmcap ./rec2.wav -D 100 -d 101 –c 1 -r 48000 -i "CODEC_DMA-LPAIF_RXTX-TX-3"
注意:操作时需要确保当前目录有写入权限。
音频播放¶
板载扬声器未焊接,请使用外接耳机通道播放。
耳机播放¶
Linux系统下播放(3.5 mm耳机)¶
systemctl stop pulseaudio
tinymix "RX_MACRO RX0 MUX" "AIF1_PB"
tinymix "RX_MACRO RX1 MUX" "AIF1_PB"
tinymix "RX INT0_1 MIX1 INP0" "RX0"
tinymix "RX INT1_1 MIX1 INP0" "RX1"
tinymix "RX INT0 DEM MUX" "CLSH_DSM_OUT"
tinymix "RX INT1 DEM MUX" "CLSH_DSM_OUT"
tinymix "RX_COMP1 Switch" "1"
tinymix "RX_COMP2 Switch" "1"
tinymix "HPHL Switch" "1"
tinymix "HPHR Switch" "1"
tinymix "HPHL_RDAC Switch" "1"
tinymix "HPHR_RDAC Switch" "1"
agmplay /data/vvdn_ring.wav -D 100 -d 100 -i CODEC_DMA-LPAIF_RXTX-RX-0 -dkv 0xA2000002
Android系统下播放(3.5 mm耳机)¶
adb root
adb shell
cd /data/local/tmp
tinymix "RX_MACRO RX0 MUX" "AIF1_PB"
tinymix "RX_MACRO RX1 MUX" "AIF1_PB"
tinymix "RX INT0_1 MIX1 INP0" "RX0"
tinymix "RX INT1_1 MIX1 INP0" "RX1"
tinymix "RX INT0 DEM MUX" "CLSH_DSM_OUT"
tinymix "RX INT1 DEM MUX" "CLSH_DSM_OUT"
tinymix "RX_COMP1 Switch" "1"
tinymix "RX_COMP2 Switch" "1"
tinymix "HPHL_RDAC Switch" "1"
tinymix "HPHR_RDAC Switch" "1"
agmplay ./vvdn_ring.wav -D 100 -d 100 -i CODEC_DMA-LPAIF_RXTX-RX-0 -dkv 0xA2000002
PulseAudio架构¶
PulseAudio概述¶
PulseAudio是一款跨平台的、支持网络功能的音频服务,它从一个或多个音源源(进程或输入设备)接收声音输入,然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。它与最底层的ALSA交互,并为应用程序提供统一的接口,从而实现多路音频混合、音频转发等高级功能。
设备查看与管理¶
1.查看可用输出设备(Sinks)
要查看系统当前可用的音频输出设备及其详细信息,可以使用以下命令。
此命令会列出所有可用的sink(输出设备)的索引(index)和名称(name)。输出示例:
sh-5.2# pactl list short sinks
若要获取更详细的设备信息,请使用:
sh-5.2# pactl list sinks
2.查看输入设备(Sources)
类似地,你可以用以下命令查看音频输入设备(如麦克风):
sh-5.2# pactl list short sources
若要获取更详细的设备信息,请使用:
sh-5.2# pactl list sources
录音¶
1.板载MIC录音
pactl set-source-port 4 speaker-mic
pactl -d 4 --file-format=wav output.wav
2.耳机录音
pactl set-source-port 4 headset-mic
parec -d 4 --file-format=wav output1.wav
播放¶
1.喇叭播放
pactl set-sink-port 1 speaker
paplay output.wav
2.耳机播放
pactl set-sink-port 1 headset
paplay output1.wav
进阶功能¶
Sink讲解¶
root@qcm6490-idp:~# pactl list sinks short
0 low-latency0 module-pal-card.c s16le 2ch 48000Hz SUSPENDED
1 deep-buffer0 module-pal-card.c s16le 2ch 32000Hz SUSPENDED
2 offload0 module-pal-card.c s16le 2ch 48000Hz SUSPENDED
3 voip-rx0 module-pal-card.c s16le 2ch 48000Hz SUSPENDED
root@qcm6490-idp:~#
1.low-latency0
low-latency0用于实时音频播放,如音乐、游戏、通知等,要求超低延迟。
特点:
延迟极低,适合对实时性要求高的应用;
支持PCM格式(未压缩音频);
支持speaker(扬声器),也支持headset(耳机)。
2.deep-buffer0
deep-buffer0用于需要大缓冲的音频播放,如流媒体、网络电台等,允许更大的音频缓冲,减少卡顿。
特点:
延迟较高,但音频更稳定,适合网络不稳定的环境;
支持speaker(扬声器),也支持headset(耳机)。
3.offload0
offload0用于硬件卸载压缩音频(如MP3、AAC),由硬件直接解码播放,节省CPU资源。
特点:
仅支持压缩格式(如 MPEG、AAC),不支持PCM;
适用于长时间播放压缩音频(如音乐播放器)。
4.voip-rx0
voip-rx0专门用于VoIP通话的音频接收(如网络电话、视频会议)。
特点:
优化了语音通话的延迟和回声抑制;
仅在VoIP应用(如Skype、Zoom)中自动激活,普通音频播放不会使用。
Source讲解¶
sh-5.2# pactl list sources short
1 low-latency0.monitor module-qal-card.c s16le 2ch 48000Hz SUSPENDED
2 deep-buffer0.monitor module-qal-card.c s16le 2ch 48000Hz SUSPENDED
3 offload0.monitor module-qal-card.c s16le 2ch 48000Hz SUSPENDED
4 regular0 module-qal-card.c s16le 1ch 48000Hz SUSPENDED
1.low-latency0.monitor
low-latency0.monitor适用于实时录音,如录制游戏音效、音乐播放器输出等。
特点:
延迟极低,适合实时监控音频输出。
2.deep-buffer0.monitor
deep-buffer0.monitor适用于长时间录音,如流媒体、网络电台。
特点:
延迟较高,但音频稳定,适合网络不稳定的环境。
3.offload0.monitor
offload0.monitor用于录制offload0 Sink的音频输出,即录制硬件卸载的压缩音频(如 MP3、AAC)。
特点:
仅在播放压缩音频时激活;
适合长时间录制压缩音频。
4.voip-rx0.monitor
voip-rx0.monitor适用于录制网络电话或视频会议的对方声音。
特点:
适用于录制网络电话或视频会议的对方声音。
5.regular0
regular0用于直接录制麦克风或线路输入的音频。
特点:
通用音频输入源,适用于大多数录音场景。
6.voip-tx0
voip-tx0用于VoIP通话的音频发送,即录制你的麦克风输入,用于网络电话。
特点:
优化了语音通话的音质和延迟。
测试蜂窝语音通话¶
Weston 环境下无图形化拨号界面,通话控制通过 qlril-api-test 命令行工具完成。该工具可注册事件监听、拨号、接听及挂断电话。通话过程中的音频路由切换仍需通过 PulseAudio 命令(pactl)进行。
测试准备与初始化¶
确保 SIM 卡已正确插入,且模组已注册网络。
发送 AT$QCSIMAPP=? 检查网络连接状态
AT\(QCSIMAPP=? \)QCSIMAPP: 0,“SUB1”,“L” # 网络已连接 $QCSIMAPP: 1,“SUB2”,“No Service”
在拨号或接听前,使用 pactl 将音频通道切换到期望的设备。示例:
# 查看当前音频设备
pactl list short sinks
pactl list short sources
# 设置为耳机通道
pactl set-source-port 4 headset-mic
pactl set-sink-port 1 headset
# 设置为板载mic录音,耳机播音
pactl set-source-port 4 speaker-mic
pactl set-sink-port 1 headset
打开终端,执行以下命令启动 qlril-api-test 程序:
qlril-api-test
配置事件监听¶
为了能够接收来电、通话状态等事件,需要进行以下设置(以下编号对应程序内的命令索引):
# 输入 10,开启事件监听器
> 10
# 输入 12,然后输入起始值 1000,再输入终止值 1070,开启注册事件监听功能
# (终止值可根据实际返回的最大值调整,SW可能增加新事件)
> 12
> 1000
> 1070
# 输入 13,屏蔽编号在 1009~1009 范围内的消息事件(可根据需要调整)
> 13
> 1009
> 1009
接听来电(被叫测试)¶
当辅助机拨打测试机电话时,qlril-api-test 窗口会上报来电事件,类似:
此时执行以下操作接听:
# 输入 44,接听来电
> 44
接听后,通话应建立。如果出现“通话无声”,请检查音频路由是否正确。
挂断电话¶
通话结束后,执行:
# 输入 43,然后选择 1(挂断当前通话)
> 43
> 1
此时通话被挂断,界面应提示挂断成功。
主动拨号(主叫测试)¶
若需主动拨号,可使用以下命令(假设号码为 10086):
# 输入 43,然后输入电话号码
> 43
> 10086
拨号后,系统会发起呼叫,对方接听后即可通话。
疑难解答¶
问题 |
可能原因 |
|---|---|
录音文件未生成 |
|
音频播放失败 |
|
语音通话无声 |
1.检查硬件连接完好。 |