音频功能

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 (听筒)

预留测试点

驱动小功率听筒/耳机。

系统提供一组标准音频配置与调试命令,用于完成设备检查、录音、播放和音量控制等常见操作。

通过本文档,您无需深入复杂配置,即可快速定位并解决大多数音频相关问题。

喇叭和耳机硬件接口

../../_images/image_V4U5bL7mLoajBnxRYE1cVZP0njU.webp ../../_images/image_KQwJbtSA8o8o8kxpFvhc3vnenie.webp ../../_images/image_Tps7bdLUforZhzxNHIncQGfLnod.webp

查看声卡信息

可通过以下命令检查系统声卡与 PCM 设备的加载情况:

  • 查看声卡列表:

cat /proc/asound/cards
../../_images/image_E4HBb9QKKootWfxn4XacJ0ownih.webp
  • 查看已分配的 pcm 流列表:

cat /proc/asound/pcm
../../_images/image_OQ3dbUi8Wo0rJCx9EILcgIkrndd.webp

说明:若系统未检测到声卡信息或 PCM 流,则 ALSAPulseAudio 均无法正常工作。

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”结束录音:

../../_images/image_RbTvblZEooeYP2xBSvdccwllnvb.webp

耳机麦克风录制

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"

注意:操作时需要确保当前目录有写入权限。

../../_images/image_X6rwbCLBHoVfdtxpPA3c6w0Yngd.webp

音频播放

板载扬声器未焊接,请使用外接耳机通道播放。

耳机播放

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
../../_images/image_ZVTVbvfQzoJhqkxMA6bcHf3Zn3d.webp

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. 检查设置指令是否正确。
  2. 操作目录是否有可读写权限。

音频播放失败

  1. 检查播放文件是否存在。
  2. 检查播放指令是否正确,对于"-"需要注意中英文符号。

语音通话无声

1.检查硬件连接完好。
2.检查音频路由设置(是否正确选择了耳机和 MIC 源)

资源与支持