# Audio功能 ***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.*** --- 本文档旨在提供Linux音频系统操作的简明指南。系统采用ALSA(Advanced Linux Sound Architecture)与PulseAudio双架构后端,提供从底层到应用层的完整音频解决方案。在硬件方面,全面支持外置麦克风输入和外置扬声器放大输出,并集成标准3.5 mm音频接口,支持耳机播放与麦克风输入的全双工通信。在软件方面,本文提供了关键音频配置命令以确保音频完美输出。通过本文档,您将掌握如何使用基础命令行工具快速完成设备检查、录音播放及音量控制等日常操作,无需深入复杂配置即可解决大多数音频相关问题。 # 快速开始 - 本节将介绍如何连接外部喇叭和耳机,并通过命令检查系统配置,以确保软硬件协同工作正常。 ## 喇叭和耳机硬件接口 ```{image} images/image_BORCbl5UQokZDHxlyVAcJbJon0b.webp :width: 500px :height: 372px ``` ```{image} images/image_VjjxbD1SloYqtux07kkcOYginPe.webp :width: 350px :height: 350px ``` ```{image} images/image_MUWYbOc8Cop6fdxhu1ucJhNJnSh.webp :width: 350px :height: 350px ``` ## 查看声卡信息 - 在终端中输入下面命令,查看声卡的挂载情况: ```shell root@qcm6490-idp:/opt# cat /proc/asound/cards0 [qcm6490idpsndca]: qcm6490 - qcm6490-idp-snd-card qcm6490-idp-snd-card ``` - 在终端中输入下面命令,查看已分配的PCM流列表: ```shell 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功能都将无法使用。 ## ALSA架构 ### ALSA概述 ALSA是Linux系统的底层音频架构与驱动核心,它直接管理和控制计算机的音频硬件。它一方面为声卡提供原生驱动,实现对物理音频通道(如外置麦克风、耳机、扬声器)的直接读写;另一方面为应用程序提供标准化的API接口,完成最基础的音频采集与播放。ALSA是构建一切高级音频服务(如PulseAudio)的基石。 ### 音频录制 **1.外置麦克风音频录制** ```shell 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将生成于当前目录下。 ```shell root@qcm6490-idp:/opt# ls cni containerd test1.wav ``` **2.耳机录制** - 使用3.5 mm耳机录制,请输入以下命令: ```shell 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将生成于当前目录下。 ```shell root@qcm6490-idp:/opt# ls cni containerd test2.wav ``` ### 音频播放 **1.耳机播放** - 使用3.5 mm耳机播放,请输入以下命令: ```shell 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.喇叭播放** - 输入以下命令播放音频: ```shell 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# agmplay test_loop.wav -D 100 -d 100 -i "CODEC_DMA-LPAIF_RXTX-RX-0" ``` ## PulseAudio架构 ### PulseAudio概述 PulseAudio是一款跨平台的、支持网络功能的音频服务,它从一个或多个音源源(进程或输入设备)接收声音输入,然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。它与最底层的ALSA交互,并为应用程序提供统一的接口,从而实现多路音频混合、音频转发等高级功能。 ### 设备查看与管理 **1.查看可用输出设备(Sinks)** - 要查看系统当前可用的音频输出设备及其详细信息,可以使用以下命令。 - 此命令会列出所有可用的sink(输出设备)的索引(index)和名称(name)。输出示例: ```bash root@qcm6490-idp:/# pactl list short sinks0 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 ``` - 若要获取更详细的设备信息,请使用: ```bash root@qcm6490-idp:/# pactl list sinks ``` **2.查看输入设备(Sources)** - 类似地,你可以用以下命令查看音频输入设备(如麦克风): ```bash root@qcm6490-idp:/# pactl list short sources0 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 ``` - 若要获取更详细的设备信息,请使用: ```bash root@qcm6490-idp:/# pactl list sources ``` ### 录音 **1.板载DIMC录音** ```bash root@qcm6490-idp:~# pactl set-source-port 5 speaker-mic root@qcm6490-idp:~# parec -d 5 --file-format=wav output.wav ``` **2.耳机录音** ```bash root@qcm6490-idp:~# pactl set-source-port 5 headset-mic root@qcm6490-idp:~# parec -d 5 --file-format=wav output1.wav ``` ### 播放 **1.喇叭播放** ```bash root@qcm6490-idp:~# pactl set-sink-port 0 speaker root@qcm6490-idp:~# paplay output.wav ``` **2.耳机播放** ```bash root@qcm6490-idp:~# pactl set-sink-port 0 headset root@qcm6490-idp:~# paplay output1.wav ``` # 进阶功能 ## Sink讲解 ```bash root@qcm6490-idp:~# pactl list sinks short0 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讲解 ```bash root@qcm6490-idp:~# pactl list sources short0 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)** ```bash root@qcm6490-idp:~# pactl get-default-sink low-latency0 root@qcm6490-idp:~# ``` - 如果不是low-latency0或者deep-buffer0,请按照以下步骤设置默认sink。 ```bash 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: ```bash root@qcm6490-idp:~# pactl set-sink-port 0 speaker root@qcm6490-idp:~# ``` - 以上步骤配置正确即可解决喇叭无法播放的问题。 # 资源与支持 [PulseAudio详细介绍]() [linux-PulseAudio]() [Pulseaudio详解]()