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:~# 
  • 以上步骤配置正确即可解决喇叭无法播放的问题。

资源与支持

PulseAudio详细介绍
linux-PulseAudio
Pulseaudio详解