# 启用基于 TinyALSA 的应用程序

TinyALSA 是一个将 ALSA 内核接口包装到客户端可以调用的 API 中的库。它还提供了一个插件接口来模拟 ALSA API。

TinyALSA 源代码位于：

`build-qcom-wayland/workspace/sources/tinyalsa` 和

`build-qcom-wayland/workspace/sources/tinycompress`.

下图显示了 TinyALSA 插件架构。

![../../../../_images/tinyalsa_plugin_architecture.png](data:image/png;base64,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)

TinyALSA 插件架构

内核中的 ALSA 框架公开了用于 PCM、Compress 和混音器的卡和设备节点。

PCM、混音器和 Compress 插件属于 TinyALSA 插件，它们是将所有 PCM、混音器和 Compress 调用从应用程序路由到特定插件的实现。

这些插件创建具有 PCM、Compress 和混音器节点的虚拟声卡。虚拟节点映射到设备上的 `.so` 文件（可动态加载的共享对象）。

虚拟声卡配置位于 `card-defs.xml` 文件中。此文件位于设备上的 `/etc/` 文件夹中。

## TinyALSA API

以下是常见的 TinyALSA API。关于所有 API 的完整描述，可参见[开源 TinyALSA 文档](https://github.com/tinyalsa/tinyalsa/blob/master/include/tinyalsa/pcm.h)。

### pcm\_open

用于打开 PCM 音频设备进行输入和输出操作。初始化 PCM 设备以进行通信，允许对音频数据进行读/写操作。

struct pcm *pcm_open(
         unsigned int card,
         unsigned int device,
         unsigned int flags,
         struct pcm_config *config)
    Copy to clipboard

**参数**

| card | 卡号。 |
| --- | --- |
| device | 所选卡中的设备号。 |
| flags | 用于配置 PCM 设备的标志。 |
| config | 指定音频流参数的结构变量。 |

**返回值**

`pcm* handle`

### pcm\_is\_ready

检查 PCM 设备是否已准备好进行输入和输出操作。

int pcm_is_ready(struct pcm *pcm)
    Copy to clipboard

**参数**

| pcm | 指向打开的 PCM 设备的指针。 |
| --- | --- |

**返回值**

- 成功时为 0
- 失败时为错误代码

### pcm\_prepare

准备音频设备输入和输出操作。

int pcm_prepare(
         struct pcm *pcm)
    Copy to clipboard

**参数**

| pcm | 指向打开的 PCM 设备的指针。 |
| --- | --- |

**返回值**

- 成功时为 0
- 失败时为错误代码

### pcm\_start

用于启动 PCM 音频设备进行输入和输出操作。

int pcm_start(
         struct pcm *pcm)
    Copy to clipboard

**参数**

| pcm | 指向打开的 PCM 设备的指针。 |
| --- | --- |

**返回值**

- 成功时为 0
- 失败时为错误代码

### pcm\_write

将音频数据写入音频 PCM 设备。将音频数据作为输入，并将其发送到 PCM 设备进行播放或处理。

int pcm_write(
         struct pcm *pcm,
         const void *data,
         unsigned int count)
    Copy to clipboard

**参数**

| pcm | 指向打开的 PCM 设备的指针。 |
| --- | --- |
| data | 要写入的音频数据。 |
| count | 要写入的音频帧数。 |

**返回值**

- 成功时为 0
- 失败时为错误代码

### pcm\_read

从 PCM 设备接收音频数据，允许应用程序从麦克风采集音频数据。

int pcm_read(
         struct pcm *pcm,
         void *data,
         unsigned int count)
    Copy to clipboard

**参数**

| pcm | 指向打开的 PCM 设备的指针。 |
| --- | --- |
| data | 要读取的音频数据。 |
| count | 要读取的音频帧数。 |

**返回值**

- 成功时为 0
- 失败时为错误代码

### pcm\_stop

用于停止 PCM 音频设备进行进一步的输入和输出操作。

int pcm_stop(
         struct pcm *pcm)
    Copy to clipboard

**参数**

| pcm | 指向打开的 PCM 设备的指针。 |
| --- | --- |

**返回值**

- 成功时为 0
- 失败时为错误代码

### pcm\_close

关闭 PCM 音频设备。这将释放与 PCM 设备相关的资源并释放内存。

int pcm_close(
         struct pcm *pcm)
    Copy to clipboard

**参数**

| 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。

/**
                * Key Vector pair
                */
                struct agm_key_value {
                uint32_t key; /**< key */
                uint32_t value; /**< value */
                };
                /*Sample allocation for the key value pair*/
                gkv = calloc(num_gkv, sizeof(struct agm_key_value));
                ckv = calloc(num_ckv, sizeof(struct agm_key_value));
    Copy to clipboard

基于 TinyALSA 的 agmplay 和 agmcap 工具的示例代码可以在以下位置找到：

`build-qcom-wayland/workspace/sources/qcom-agm/opensource/agm/plugins/tinyalsa/test`.

要从 TinyALSA 启用和执行音频用例：

1. 设置音频接口（后端）设备配置，包括采样率、通道、格式和数据格式。

'CODEC_DMA-LPAIF_WSA-RX-0 rate ch fmt' 48000 2 2(PCM_16)
        Copy to clipboard
2. 设置元数据，包括图键、设备的 cal 键和 DevicePP。

'CODEC_DMA-LPAIF_WSA-RX-0 metadata' bytes
        Copy to clipboard
3. 设置控件，以表明后续混音器配置将设置 Stream 和 StreamPP 子图的元数据。零表示后续命令用于流。

'PCM100 control' Zero
                            'PCM100 metadata' bytes
        Copy to clipboard
4. 设置控件以指示后续混频器配置将设置 DevicePP 和流设备子图的元数据。`Codec_DMC-LPAIF_WSA-RX-0` 表示后续命令用于流设备。`CODEC_DMA-LPAIF_WSA-RX-0` 是使用 ALSA ASOC 框架注册的音频接口之一。所有音频接口的列表可以在 /proc/asound/pcm 中找到。`/proc/asound/pcm`

'PCM100 control' CODEC_DMA-LPAIF_WSA-RX-0
                            'PCM100 metadata' bytes
        Copy to clipboard
5. 获取与流和音频接口之间的给定会话关联的所有标签、模块 ID 和实例 ID。

'PCM100 getTaggedInfo' bytes
        Copy to clipboard
6. 设置控件，以表明后续混音器配置将设置Stream 子图上模块的参数。

'PCM100 control' Zero
                            'PCM100 setParam' bytes
        Copy to clipboard
7. 设置控件，以表明后续混音器配置将设置 StreamDevice 和 DevicePP 子图上模块的参数。

'PCM100 control' CODEC_DMA-LPAIF_WSA-RX-0
                            'PCM100 setParam' bytes
        Copy to clipboard
8. 将前端（流）与后端（codec/音频接口）连接起来。

'PCM100 connect'CODEC_DMA-LPAIF_WSA-RX-0
        Copy to clipboard
9. 打开 PCM 设备。

pcm_open
        Copy to clipboard
10. 准备用于输入和输出操作的音频设备。

pcm_prepare
        Copy to clipboard
11. 用于启动 PCM 音频设备进行输入和输出操作。

pcm_start
        Copy to clipboard
12. 从音频 PCM 设备写入和读取音频数据。

pcm_write/pcm_read
        Copy to clipboard
13. 停止 PCM 设备。

pcm_stop
        Copy to clipboard
14. 关闭 PCM 音频设备。

pcm_close
        Copy to clipboard

可以使用以下方法获取虚拟设备的所有混频器控件：

ssh root@ip-addr
    systemctl stop pulseaudio
    tinymix set -D 100
    Copy to clipboard

Last Published: Apr 29, 2025