Audio 功能
本文档提供Linux音频系统操作的简明指南,我们采用ALSA与PulseAudio双架构音频后端,提供从底层到应用层的完整音频解决方案。硬件上,全面支持外置麦克风输入、外置扬声器放大输出,并集成标准3.5mm音频接口,可实现耳机播放与麦克风输入的全双工通信,软件上提供以下音频配置命令,保证音频的完美初输出。通过本文档,您将学习如何使用基础命令行工具快速完成音频设备检查、录音播放、音量控制等日常操作,无需深入复杂配置即可解决大多数音频相关问题。
快速开始
- 本段将介绍如何连接外部喇叭和耳机,然后通过命令检查系统配置,保证软硬件层正常协作。
喇叭和耳机硬件接口


查看声卡信息
- 在终端中输入下面命令,查看声卡的挂载情况:
root@qcm6490-idp:/opt# cat /proc/asound/cards
0 [qcm6490idpsndca]: qcm6490 - qcm6490-idp-snd-card
qcm6490-idp-snd-card
- 在终端中输入下面命令,查看已分配的 pcm 流列表:
root@qcm6490-idp:/opt# cat /proc/asound/pcm
00-00: CODEC_DMA-LPAIF_RXTX-RX-0 multicodec-0 : : playback 1
00-01: CODEC_DMA-LPAIF_RXTX-TX-3 multicodec-1 : : capture 1
00-02: CODEC_DMA-LPAIF_VA-TX-0 va_macro_tx1-2 : : capture 1
- 如果没有声卡信息和pcm流列表,则ALSA与PulseAudio功能都将会无法使用。
功能使用
VLC 应用
播放
- 在应用界面找到VLC media player应用,双击打开该应用

- 然后点击media选项,选择里面的Open File选项,在打开的文件夹中双击你要播放的音频文件即可完成音频的播放。

命令形式播放
root@qcm6490-idp:/opt# cvlc /path/to/your/audio.mp3
- 替换/path/to/your/audio.mp3为你的音频文件路径。
ALSA 架构
ALSA概述
ALSA是Linux系统的底层音频架构与驱动核心,它直接管理和控制计算机的音频硬件。它一方面为声卡提供原生驱动,实现对物理音频通道(如外置MIC、耳机、扬声器)的直接读写;另一方面为应用程序提供标准化的API接口,完成最基础的音频采集与播放。ALSA是构建一切高级音频服务(如PulseAudio)的基石。
音频录制
1.外置mic音频录制
root@qcm6490-idp:/opt# systemctl stop pulseaudio
root@qcm6490-idp:/opt# tinymix set "VA DMIC MUX0" "DMIC0"
root@qcm6490-idp:/opt# tinymix set "VA_AIF1_CAP Mixer DEC0" "1"
root@qcm6490-idp:/opt# tinymix set "VA_DEC0 Volume" "100"
root@qcm6490-idp:/opt# agmcap test1.wav -D 100 -d 101 -c 1 -r 48000 -b 16 -i "CODEC_DMA-LPAIF_VA-TX-0"
pcm_plug_open: dlopen successful for libagm_pcm_plugin.so
Capturing sample: 1 ch, 48000 hz, 16 bit
diag: Diag_LSM_Init: invoked for pid: 1599 with init_count: 0
diag:successfully connected to socket 17
diag: Diag_LSM_Init: done for pid: 1599 with init_count: 1
diag: Successfully registered commands with the driver
PulseAudio 可能会占用音频设备,导致直接硬件访问(如 agmcap)失败。停止后可确保独占访问。
-c 1 单声道录音
-r 48000 采样率 48 kHz
-b 16 采样位深 16-bit
-i "CODEC_DMA-LPAIF_VA-TX-0" 指定输入设备接口为发送(录音)通道 0
若想停止录制,请按下 ctrl+c 键,将在当前目录下生成名为 test1.wav 的音频文件
root@qcm6490-idp:/opt# ls
cni containerd test1.wav
2.耳机录制
- 使用 3.5mm 耳机录制请输入以下命令
root@qcm6490-idp:/opt# systemctl stop pulseaudio
root@qcm6490-idp:/opt# tinymix set "TX DEC0 MUX" "SWR_MIC"
root@qcm6490-idp:/opt# tinymix set "TX SMIC MUX0" "ADC1"
root@qcm6490-idp:/opt# tinymix set "TX_AIF1_CAP Mixer DEC0" "1"
root@qcm6490-idp:/opt# tinymix set "ADC2 MUX" "INP2"
root@qcm6490-idp:/opt# tinymix set "ADC2 Switch" "1"
root@qcm6490-idp:/opt# tinymix set "ADC2_MIXER Switch" "1"
root@qcm6490-idp:/opt# tinymix set "TX_DEC0 Volume" "80"
root@qcm6490-idp:/opt# tinymix set "ADC2 Volume" "20"
root@qcm6490-idp:/opt# agmcap test2.wav -D 100 -d 101 -c 1 -r 48000 -b 16 -i "CODEC_DMA-LPAIF_RXTX-TX-3"
pcm_plug_open: dlopen successful for libagm_pcm_plugin.so
Capturing sample: 1 ch, 48000 hz, 16 bit
diag: Diag_LSM_Init: invoked for pid: 1384 with init_count: 0
diag:successfully connected to socket 17
diag: Diag_LSM_Init: done for pid: 1384 with init_count: 1
diag: Successfully registered commands with the driver
- 若想停止录制,请按下 ctrl+c 键,将在当前目录下生成名为 test2.wav 的音频文件
root@qcm6490-idp:/opt# ls
cni containerd test2.wav
音频播放
1.耳机播放
- 使用 3.5mm 耳机播放请输入以下命令
root@qcm6490-idp:/opt# systemctl stop pulseaudio
root@qcm6490-idp:/opt# tinymix set "RX_MACRO RX0 MUX" "AIF1_PB"
root@qcm6490-idp:/opt# tinymix set "RX_MACRO RX1 MUX" "AIF1_PB"
root@qcm6490-idp:/opt# tinymix set "RX INT0_1 MIX1 INP0" "RX0"
root@qcm6490-idp:/opt# tinymix set "RX INT1_1 MIX1 INP0" "RX1"
root@qcm6490-idp:/opt# tinymix set "RX INT0 DEM MUX" "CLSH_DSM_OUT"
root@qcm6490-idp:/opt# tinymix set "RX INT1 DEM MUX" "CLSH_DSM_OUT"
root@qcm6490-idp:/opt# tinymix set "RX_COMP1 Switch" "1"
root@qcm6490-idp:/opt# tinymix set "RX_COMP2 Switch" "1"
root@qcm6490-idp:/opt# tinymix set "HPHL Switch" "1"
root@qcm6490-idp:/opt# tinymix set "HPHR Switch" "1"
root@qcm6490-idp:/opt# tinymix set "HPHL_RDAC Switch" "1"
root@qcm6490-idp:/opt# tinymix set "HPHR_RDAC Switch" "1"
root@qcm6490-idp:/opt# agmplay test.wav -D 100 -d 100 -i "CODEC_DMA-LPAIF_RXTX-RX-0"
- 音频播放完会自动停止,若想提前停止,可按下 ctrl+c 键
2.喇叭播放
- 输入以下命令完成音频播放
root@qcm6490-idp:/opt# systemctl stop pulseaudio
root@qcm6490-idp:/opt# tinymix set "AUX_RDAC Switch" "1"
root@qcm6490-idp:/opt# tinymix set "RX_MACRO RX0 MUX" "AIF1_PB"
root@qcm6490-idp:/opt# tinymix set "RX INT2_1 MIX1 INP0" "RX0"
root@qcm6490-idp:/opt# tinymix set "LO Switch" "1"
root@qcm6490-idp:/opt# gmplay test_loop.wav -D 100 -d 100 -i "CODEC_DMA-LPAIF_RXTX-RX-0"
PulseAudio 架构
PulseAudio 概述
PulseAudio 是一个跨平台的、可通过网络工作的声音服务,它从一个或多个音源(进程或输入设备)接受声音输入,然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。它与最底层的ALSA(Advanced Linux Sound Architechture)交互,并为应用程序提供统一的接口,从而实现多路音频混合、音频转发等高级功能。
设备查看与管理
1.查看可用输出设备(Sinks)
- 要查看系统当前可用的音频输出设备及其详细信息,可以使用以下命令,
- 此命令会列出所有可用的sink(输出设备)的索引(index)和名称(name)。输出示例:
root@qcm6490-idp:/# pactl list short sinks
0 low-latency0 module-pal-card.c s16le 1ch 16000Hz SUSPENDED
1 deep-buffer0 module-pal-card.c s16le 2ch 48000Hz 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:/# pactl list sinks
2.查看输入设备(Sources)
类似地,可以查看音频输入设备(如麦克风):
root@qcm6490-idp:/# pactl list short sources
0 low-latency0.monitor module-pal-card.c s16le 1ch 16000Hz SUSPENDED
1 deep-buffer0.monitor module-pal-card.c s16le 2ch 48000Hz SUSPENDED
2 offload0.monitor module-pal-card.c s16le 2ch 48000Hz SUSPENDED
3 voip-rx0.monitor module-pal-card.c s16le 2ch 48000Hz SUSPENDED
4 regular0 module-pal-card.c s16le 2ch 48000Hz SUSPENDED
5 regular2 module-pal-card.c s16le 2ch 48000Hz SUSPENDED
6 voip-tx0 module-pal-card.c s16le 1ch 48000Hz SUSPENDED
- 若要获取更详细的设备信息,请使用:
root@qcm6490-idp:/# pactl list sources
录音
1.板载DIMC录音
root@qcm6490-idp:~# pactl set-source-port 5 speaker-mic
root@qcm6490-idp:~# parec -d 5 --file-format=wav output.wav
2.耳机录音
root@qcm6490-idp:~# pactl set-source-port 5 headset-mic
root@qcm6490-idp:~# parec -d 5 --file-format=wav output1.wav
播放
1.喇叭播放
root@qcm6490-idp:~# pactl set-sink-port 0 speaker
root@qcm6490-idp:~# paplay output.wav
2.耳机播放
root@qcm6490-idp:~# pactl set-sink-port 0 headset
root@qcm6490-idp:~# 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讲解
root@qcm6490-idp:~# pactl list sources short
0 low-latency0.monitor module-pal-card.c s16le 2ch 48000Hz SUSPENDED
1 deep-buffer0.monitor module-pal-card.c s16le 2ch 32000Hz SUSPENDED
2 offload0.monitor module-pal-card.c s16le 2ch 48000Hz SUSPENDED
3 voip-rx0.monitor module-pal-card.c s16le 2ch 48000Hz SUSPENDED
4 regular0 module-pal-card.c s16le 2ch 48000Hz SUSPENDED
5 regular2 module-pal-card.c s16le 2ch 48000Hz SUSPENDED
6 voip-tx0 module-pal-card.c s16le 1ch 48000Hz SUSPENDED
root@qcm6490-idp:~#
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和regular2
- regular0和regular2用于直接录制麦克风或线路输入的音频
- 特点:
- 通用音频输入源,适用于大多数录音场景。
6.voip-tx0
- voip-tx0用于VoIP通话的音频发送,即录制你的麦克风输入,用于网络电话。
- 特点:
- 优化了语音通话的音质和延迟。
疑难解答
喇叭无法正常播放
1.查看默认音频播放sink
root@qcm6490-idp:~# pactl get-default-sink
low-latency0
root@qcm6490-idp:~#
- 如果不是low-latency0或者deep-buffer0,请按照以下步骤设置默认sink
root@qcm6490-idp:~# pactl set-default-sink low-latency0
root@qcm6490-idp:~# pactl get-default-sink
low-latency0
root@qcm6490-idp:~#
2.检查sink的默认输出端口
- 使用pactl list sinks查看默认输出sink的Active Port值是否是speaker,如果不是请设置为speaker:
root@qcm6490-idp:~# pactl set-sink-port 0 speaker
root@qcm6490-idp:~#
- 以上步骤配置正确即可解决喇叭无法播放的问题。