软件
本节提供有关音频软件组件的详细信息。
PulseAudio 概述
PulseAudio 管理所有音频应用程序、本地和网络流、设备、过滤器以及音频输入输出。
PulseAudio PAL 插件
PulseAudio PAL 插件负责加载 PAL。它允许客户端配置音频设备并调用各种音频用例。
以下是 PulseAudio PAL 插件的组件:
-
卡(Card)
表示一个声卡,它是支持的配置文件、端口、接收器和源的集合。
卡模块的功能包括:
a. 加载/卸载 PAL
b. 创建/释放由 PAL 支持的端口
c. 创建/释放 PAL 卡
d. 创建/释放接收器或源。接收器对应于播放路径,源对应于捕获路径。 -
接收器(Sink)
负责配置音频播放路径。
接收器模块的功能包括:
a. 根据由 module-pal-card 提供的配置打开/关闭播放会话
b. 为 PAL 播放会话创建/释放接收器线程以写入数据
c. 设置音量支持
d. 获取延迟支持
e. 路由支持 -
源(Source)
负责配置音频捕获路径。
源模块的功能包括:
a. 根据由 module-pal-card 提供的配置打开/关闭 PAL 录音会话
b. 创建/释放 PA 源
c. 为从 PAL 录音会话读取数据创建源线程
d. 路由支持
PAL 配置文件
PAL 卡模块配置(端口、配置文件、接收器、源、效果或任何全局配置)存储在特定于目标的配置文件中。
配置文件由 pal-config-parser.c 解析。根据声卡名称选择适当的配置文件。如果特定声卡的配置文件不存在,则选择 default.conf。以下是配置文件路径:
- 源代码:
build-qcom-wayland/workspace/sources/pulseaudio/opensource/pulseaudio/src/modules/pal/module-pal-card/configs - 设备路径: /usr/share/pulseaudio/pal/configs/
以下是支持的配置文件:
- default.conf
- qcm6490-rb3-snd-card.conf
- qcm6490-rb3-vision-snd-card.conf
- qcm6490-rb3-vc-snd-card.conf
扬声器属性
[Port speaker]
description = speaker
default-channel-map = front-left,front-right
default-sample-rate = 48000
direction = out
priority = 200
presence = always
device = PAL_DEVICE_OUT_SPEAKER
encodings = pcm
sample-formats = s16le
sample-rates = 48000
channel-maps = front-left,front-right
属性描述
description:PAL设备的描述。例如:Speaker
default-channel-map:PAL设备的默认通道映射。例如:front-left, front-right
default-sample-rate:PAL设备的默认采样率。例如:48000
direction:音频数据的方向。例如:Out
priority:端口的优先级。例如:200
presence:
#static:指示端口始终可用,但设备连接未知
#dynamic:指示端口存在动态检测
#always:指示端口和设备始终存在
device:PAL设备名称。例如:PAL_DEVICE_OUT_SPEAKER
encodings:支持的编码格式列表。第一个编码被视为PCM。例如:pcm
sample-formats:支持的采样格式列表。第一个条目被视为默认。例如:s16le
sample-rates:支持的采样率列表。第一个条目被视为默认。例如:48000
channel-maps:支持的通道映射列表。例如:front-left, front-right
默认 PAL 配置文件属性
[Profile default]
description = Default pal profile
priority = 500
max-sink-channels = 2
max-source-channels = 2
port-names = speaker handset-mic speaker-mic bta2dp-out btsco-in btsco-out
属性描述
description:PAL配置文件的描述。例如:Default pal profile
priority:配置文件的优先级。例如:500
max-sink-channels:该配置文件支持的最大接收器通道数。例如:2
max-source-channels:该配置文件支持的最大源通道数。例如:2
port-names:支持的端口名称列表。例如:
speaker handset-mic
speaker-mic bta2dp-out btsco-in
btsco-out
接收器属性
[Sink low-latency0]
description = pal sink to play via low-latency path
type = PAL_STREAM_LOW_LATENCY
default-encoding = pcm
default-sample-rate = 48000
default-sample-format = s16le
default-channel-map = front-left,front-right
default-buffer-size = 1024
default-buffer-count = 4
port-names = speaker
presence = always
use-hw-volume = true
属性描述
description:接收器的描述。例如:pal sink to play via low-latency path
type:PAL流类型。例如:PAL_STREAM_LOW_LATENCY
default-encoding:默认编码。例如:pcm
default-sample-rate:默认采样率。例如:48000
default-channel-map:默认通道映射。例如:front-left, front-right
default-buffer-size:默认缓冲区大小。例如:1024
default-buffer-count:默认缓冲区计数。例如:4
port-names:该接收器的支持端口列表。例如:speaker
presence:
#static:指示接收器始终可用,但设备连接未知
#dynamic:指示接收器存在动态检测
#always:指示接收器和设备始终存在
use-hw-volume:#true 如果需要应用DSP音量。例如:true
源属性
[Source regular2]
description = pal source to capture pcm via RAW record path
type = PAL_STREAM_RAW
default-encoding = pcm
default-sample-rate = 48000
default-sample-format = s16le
default-channel-map = front-left,front-right
default-buffer-size = 1920
default-buffer-count = 2
port-names = handset-mic speaker-mic
presence = always
属性描述
description:源的描述。例如:pal source to capture pcm via RAW record path
type:PAL流类型。例如:PAL_STREAM_RAW
default-encoding:默认编码。例如:pcm
default-sample-rate:默认采样率。例如:48000
default-sample-format:默认采样格式。例如:s16le
default-channel-map:默认通道映射。例如:front-left, front-right
default-buffer-size:默认缓冲区大小。例如:1920
default-buffer-count:默认缓冲区计数。例如:2
port-names:该源的支持端口列表。例如:handset-mic speaker-mic
presence:
#static:指示源始终可用,但设备连接未知
#dynamic:指示源存在动态检测
#always:指示源和设备始终存在
PAL 概述
PAL 提供高层次的音频特定 API,以访问底层音频硬件和驱动程序,从而启用丰富的音频用例,包括:
- 在 PCM 和压缩格式下进行音频播放和录音,支持各种前处理和后处理模块,包括延迟和功耗敏感的用例
- 硬件加速音频格式的编码/解码
客户端可以通过各种 API 与 PAL 接口,以控制和配置会话和设备。PAL 执行以下操作:
- 配置混音器控制,以设置硬件编解码器设备和流配置
- 调用 TinyALSA API 以打开/启动音频会话
PAL 的资源管理器跟踪所有活动会话和设备,以实现并发性。它解析和加载以下与平台相关的 XML 文件的配置:
- Resource_manager.xml – 设备到后端的映射和政策制定属性
- Card-defs.xml – 虚拟 PCM 和压缩节点及其能力
PAL 的负载构建器负责构建用于用例图的元数据负载。有关图的更多信息,请参见音频用例的实现。
TinyALSA 概述
TinyALSA 是一个库,将 ALSA 内核接口封装为客户端可以调用的 API,并提供一个插件接口来模拟 ALSA API。
TinyALSA 插件的源代码可以在以下路径找到:
build-qcom-wayland/workspace/sources/tinyalsa/opensource/tinyalsa
以下图示展示了 TinyALSA 插件架构。
ALSA 框架在内核中暴露了用于 PCM、压缩和混音的卡和设备节点。
PCM、混音器和压缩插件是 TinyALSA 插件,它们将所有来自应用程序的 PCM、混音器和压缩调用路由到特定的插件实现。
这些插件创建了一个虚拟声卡,包含 PCM、压缩和混音节点。虚拟节点映射到设备上的 .so 文件(动态可加载共享对象)。
虚拟声卡的配置保存在 card-defs.xml 文件中,该文件可以在以下路径找到:
build-qcom-wayland/workspace/sources/agm/opensource/agm/snd_parser/configs//
设备上的文件位于 /etc/ 文件夹中。