Pulseaudio 音频服务
2025-09-29
PulseAudio 是 Linux 环境下主流的音频服务系统,它介于应用程序和底层音频架构(TinyALSA)之间,负责管理音频流、混合多路音频以及路由到不同的输出设备.
PulseAudio 概述
PulseAudio 是一个跨平台的、可通过网络工作的声音服务,它从一个或多个音源(进程或输入设备)接受声音输入,然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。它与最底层的ALSA(Advanced Linux Sound Architechture)交互,并为应用程序提供统一的接口,从而实现多路音频混合、音频转发等高级功能。
查看声卡信息
- 在终端中输入下面命令,查看声卡的挂载情况:
root@qcm6490-idp:/opt# cat /proc/asound/cards
0 [qcm6490idpsndca]: qcm6490 - qcm6490-idp-snd-card
qcm6490-idp-snd-card
设备查看与管理
查看可用输出设备(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
Sink #0
State: SUSPENDED
Name: low-latency0
Description: pal sink to play via low-latency path
Driver: module-pal-card.c
Sample Specification: s16le 1ch 16000Hz
Channel Map: mono
Owner Module: 1
Mute: no
Volume: mono: 65536 / 100%
balance 0.00
Base Volume: 65536 / 100%
Monitor Source: low-latency0.monitor
Latency: 0 usec, configured 0 usec
Flags: HARDWARE HW_VOLUME_CTRL LATENCY
Properties:
device.string = "low_latency"
device.description = "pal sink to play via low-latency path"
device.icon_name = "audio-card"
Ports:
speaker: speaker (type: Unknown, priority: 200, available)
headset: headset (type: Unknown, priority: 100, available)
Active Port: speaker
Formats:
pcm
Sink #1
State: SUSPENDED
Name: deep-buffer0
Description: pal sink to play via deep buffer path
Driver: module-pal-card.c
Sample Specification: s16le 2ch 48000Hz
Channel Map: front-left,front-right
Owner Module: 1
Mute: no
Volume: front-left: 65536 / 100%, front-right: 65536 / 100%
balance 0.00
Base Volume: 65536 / 100%
Monitor Source: deep-buffer0.monitor
Latency: 0 usec, configured 0 usec
Flags: HARDWARE HW_VOLUME_CTRL LATENCY
Properties:
device.string = "deep_buffer"
device.description = "pal sink to play via deep buffer path"
device.icon_name = "audio-card"
Ports:
speaker: speaker (type: Unknown, priority: 200, available)
headset: headset (type: Unknown, priority: 100, available)
bta2dp-out: BT a2dp source port (type: Unknown, priority: 50, not available)
Active Port: speaker
Formats:
pcm
Sink #2
State: SUSPENDED
Name: offload0
Description: pal sink to play compressed via offload path
Driver: module-pal-card.c
Sample Specification: s16le 2ch 48000Hz
Channel Map: front-left,front-right
Owner Module: 1
Mute: no
Volume: front-left: 65536 / 100%, front-right: 65536 / 100%
balance 0.00
Base Volume: 65536 / 100%
Monitor Source: offload0.monitor
Latency: 0 usec, configured 0 usec
Flags: HARDWARE HW_VOLUME_CTRL LATENCY
Properties:
device.string = "offload"
device.description = "pal sink to play compressed via offload path"
device.icon_name = "audio-card"
Ports:
speaker: speaker (type: Unknown, priority: 200, available)
headset: headset (type: Unknown, priority: 100, available)
bta2dp-out: BT a2dp source port (type: Unknown, priority: 50, not available)
Active Port: speaker
Formats:
mpeg
aac
Sink #3
State: SUSPENDED
Name: voip-rx0
Description: pal sink to play via voip rx path
Driver: module-pal-card.c
Sample Specification: s16le 2ch 48000Hz
Channel Map: front-left,front-right
Owner Module: 1
Mute: no
Volume: front-left: 65536 / 100%, front-right: 65536 / 100%
balance 0.00
Base Volume: 65536 / 100%
Monitor Source: voip-rx0.monitor
Latency: 0 usec, configured 0 usec
Flags: HARDWARE HW_VOLUME_CTRL LATENCY
Properties:
device.string = "voip_rx"
device.description = "pal sink to play via voip rx path"
device.icon_name = "audio-card"
Ports:
speaker: speaker (type: Unknown, priority: 200, available)
headset: headset (type: Unknown, priority: 100, available)
btsco-out: BT SCO sink port (type: Unknown, priority: 50, not available)
Active Port: speaker
Formats:
pcm
查看输入设备(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
录音
板载DIMC录音
root@qcm6490-idp:~# pactl set-source-port 5 speaker-mic
root@qcm6490-idp:~# parec -d 5 --file-format=wav output.wav
3.5mm 耳机录音
使用 3.5mm 耳机录制前需将 gpio8 和 gpio68 电平置高。
root@qcm6490-idp:/opt# rgpiod &
root@qcm6490-idp:/opt# sleep 1
root@qcm6490-idp:/opt# rgs c 999 go 4
root@qcm6490-idp:/opt# rgs c 999 gso 0 8
root@qcm6490-idp:/opt# rgs c 999 gw 0 8 1
root@qcm6490-idp:/opt# rgs c 999 gso 0 68
root@qcm6490-idp:/opt# rgs c 999 gw 0 68 1
- gpio8------------耳机国标/美标切换控制开关,置0:欧标,置1:美标
- gpio68-----------耳机电源供电使能开关,置0:禁用,置1:使能
root@qcm6490-idp:~# pactl set-source-port 5 headset-mic
root@qcm6490-idp:~# parec -d 5 --file-format=wav output1.wav
播放
喇叭播放
// GPIO控制PA的使能开关
rgpiod &
sleep 1
rgs c 999 go 4
rgs c 999 gso 0 142
rgs c 999 gw 0 142 1
root@qcm6490-idp:~# pactl set-sink-port 0 speaker
root@qcm6490-idp:~# paplay output.wav
3.5mm耳机播放
root@qcm6490-idp:~# pactl set-sink-port 0 headset
root@qcm6490-idp:~# paplay output1.wav