高通Linux 音频指南(四)

软件

本节提供有关音频软件组件的详细信息。

PulseAudio 概述

PulseAudio 管理所有音频应用程序、本地和网络流、设备、过滤器以及音频输入输出。
在这里插入图片描述

PulseAudio PAL 插件

PulseAudio PAL 插件负责加载 PAL。它允许客户端配置音频设备并调用各种音频用例。

以下是 PulseAudio PAL 插件的组件:

  1. 卡(Card)
    表示一个声卡,它是支持的配置文件、端口、接收器和源的集合。
    卡模块的功能包括:
    a. 加载/卸载 PAL
    b. 创建/释放由 PAL 支持的端口
    c. 创建/释放 PAL 卡
    d. 创建/释放接收器或源。接收器对应于播放路径,源对应于捕获路径。

  2. 接收器(Sink)
    负责配置音频播放路径。
    接收器模块的功能包括:
    a. 根据由 module-pal-card 提供的配置打开/关闭播放会话
    b. 为 PAL 播放会话创建/释放接收器线程以写入数据
    c. 设置音量支持
    d. 获取延迟支持
    e. 路由支持

  3. 源(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/ 文件夹中。

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值