Pulseaudio 音频服务

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