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