Skip to main content
TinyALSA 是一个将 ALSA 内核接口封装为客户端可调用 API 的库。它还提供插件接口来模拟 ALSA API。 TinyALSA 源代码位于: build-qcom-wayland/workspace/sources/tinyalsa build-qcom-wayland/workspace/sources/tinycompress 下图展示了 TinyALSA 插件架构。
TinyALSA 插件架构

TinyALSA 插件架构

TinyALSATiny compressClientALSA/ASoC kernel frameworkCompress pluginPCM pluginMixer pluginPCMLibaudiorouteMixerCompressASoC driversOpen source/FrameworkLegend TinyALSA 插件架构 内核中的 ALSA 框架为 PCM、compress 和混音器公开声卡和设备节点。 PCM、混音器和 compress 插件均为 TinyALSA 插件。它们将应用程序的所有 PCM、混音器和 compress 调用路由到插件特定的实现。 这些插件会创建一个带有 PCM、compress 和混音器节点的虚拟声卡。虚拟节点映射到设备上的 .so 文件(可动态加载的共享对象)。 虚拟声卡配置位于 card-defs.xml 文件中。该文件位于设备的 /etc/ 文件夹中。

TinyALSA API

以下是常用的 TinyALSA API。有关所有 API 的完整说明,请参阅开源 TinyALSA 文档

pcm_open

打开 PCM 音频设备,用于输入和输出操作。初始化 PCM 设备以进行通信,允许对音频数据进行读/写操作。
参数 返回值 pcm* handle

pcm_is_ready

检查 PCM 设备是否已准备好进行输入和输出操作。
参数 返回值
  • PCM 设备就绪时返回非零值
  • PCM 设备未就绪时返回 0

pcm_prepare

准备音频设备的输入和输出操作。
参数 返回值
  • 成功时返回 0
  • 失败时返回错误代码

pcm_start

启动 PCM 音频设备,以进行输入和输出操作。
参数 返回值
  • 成功时返回 0
  • 失败时返回错误代码

pcm_write

将音频数据写入 PCM 音频设备。以音频数据作为输入,并将其发送到 PCM 设备进行播放或处理。
参数 返回值
  • 成功时返回 0
  • 失败时返回错误代码

pcm_read

从 PCM 设备获取音频数据,允许应用程序从麦克风捕获音频数据。
参数 返回值
  • 成功时返回 0
  • 失败时返回错误代码

pcm_stop

停止 PCM 音频设备的进一步输入和输出操作。
参数 返回值
  • 成功时返回 0
  • 失败时返回错误代码

pcm_close

关闭 PCM 音频设备。这会释放与 PCM 设备关联的资源并释放内存。
参数 返回值
  • 成功时返回 0
  • 失败时返回错误代码

配置 TinyALSA

对于来自 TinyALSA 的音频用例,请配置虚拟混音器控制。 这些由混音器插件创建的控制用于设置音频用例图和模块。大多数控制基于字节数组,并使用 mixer_ctl_set_array API 进行配置。元数据(称为 ‘PCM100 metadata’)通过键值(KV)对设置。有关实现详情,请参阅 build-qcom-wayland/workspace/sources/qcom-agm/opensource/agm/plugins/tinyalsa/test/agmmixer.c 中的 set_agm_audio_intf_metadata API。
基于 TinyALSA 的 agmplay 和 agmcap 实用工具的示例代码位于: build-qcom-wayland/workspace/sources/qcom-agm/opensource/agm/plugins/tinyalsa/test 要启用并执行来自 TinyALSA 的音频用例:
  1. 设置音频接口(后端)设备配置,包括采样率、声道、格式和数据格式。
  2. 设置元数据,包括图键、设备的校准键和 DevicePP。
  3. 设置控制,以指示后续的混音器配置将为 stream 和 StreamPP 子图设置元数据。零表示后续命令针对 stream。
  4. 设置控制,以指示后续的混音器配置将为 DevicePP 和 stream-device 子图设置元数据。CODEC_DMA-LPAIF_WSA-RX-0 表示后续命令针对 stream-device。CODEC_DMA-LPAIF_WSA-RX-0 是在 ALSA ASOC 框架中注册的音频接口之一。所有音频接口的列表可在 /proc/asound/pcm 中找到。
  5. 检索与 stream 和音频接口之间给定会话关联的所有标签、模块 ID 和实例 ID。
  6. 设置控制,以指示后续的混音器配置将为 stream 子图上的模块设置参数。
  7. 设置控制,以指示后续的混音器配置将为 StreamDevice 和 DevicePP 子图上的模块设置参数。
  8. 将前端(stream)与后端(编解码器/音频接口)连接。
  9. 打开 PCM 设备。
  10. 准备音频设备的输入和输出操作。
  11. 启动 PCM 音频设备,以进行输入和输出操作。
  12. 向 PCM 音频设备写入和读取音频数据。
  13. 停止 PCM 设备。
  14. 关闭 PCM 音频设备。
可使用以下命令获取虚拟设备的所有混音器控制:

后续步骤