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

TinyALSA 插件架构

TinyALSATiny compressClientALSA/ASoC kernel frameworkCompress pluginPCM pluginMixer pluginPCMLibaudiorouteMixerCompressASoC driversOpen source/FrameworkLegend TinyALSA 插件架构 内核中的 ALSA 框架为 PCM、compress 和 mixer 暴露卡和设备节点。 PCM、mixer 和 compress 插件是 TinyALSA 插件。它们将来自应用的所有 PCM、mixer 和 compress 调用路由到插件特定的实现。 插件创建带有 PCM、compress 和 mixer 节点的虚拟声卡。虚拟节点映射到设备上的 .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. 设置元数据,包括图键、设备的 cal 键和 DevicePP。
  3. 设置控件以指示后续混音器配置将为流和 StreamPP 子图设置元数据。零表示后续命令用于流。
  4. 设置控件以指示后续混音器配置将为 DevicePP 和流-设备子图设置元数据。CODEC_DMA-LPAIF_WSA-RX-0 表示后续命令用于流-设备。CODEC_DMA-LPAIF_WSA-RX-0 是在 ALSA ASOC 框架中注册的音频接口之一。可以在 /proc/asound/pcm 中找到所有音频接口的列表。
  5. 检索与流和音频接口之间给定会话相关联的所有标签、模块 ID 和实例 ID。
  6. 设置控件以指示后续混音器配置将为流子图上的模块设置参数。
  7. 设置控件以指示后续混音器配置将为 StreamDevice 和 DevicePP 子图上的模块设置参数。
  8. 将前端(流)与后端(编解码器/音频接口)连接。
  9. 打开 PCM 设备。
  10. 为音频设备的输入和输出操作做准备。
  11. 启动 PCM 音频设备以进行输入和输出操作。
  12. 从音频 PCM 设备写入和读取音频数据。
  13. 停止 PCM 设备。
  14. 关闭 PCM 音频设备。
可以使用以下命令获取虚拟设备的所有混音器控件:

后续步骤