一、TinyALSA 的背景与设计目标
1. 诞生背景
- Android 音频需求的演变:早期 Android 系统使用标准 ALSA(Advanced Linux Sound Architecture)的用户空间库
alsa-lib,但因其复杂性(代码庞大、依赖较多)和资源占用问题,无法满足嵌入式设备的轻量化需求。 - 嵌入式场景的痛点:移动设备、IoT 终端等对内存占用、启动速度和功耗高度敏感,需要一个更精简的音频库。
2. 设计目标
- 轻量化:核心代码仅约 3000 行(相比
alsa-lib的数十万行),适合资源受限的设备。 - 低依赖:避免动态库依赖,可直接静态编译到应用中。
- 简化接口:仅支持基础音频播放/录制和混音控制,不提供高级插件(如重采样、格式转换)。
- 内核兼容性:直接与 Linux 内核的 ALSA 驱动交互,无需中间抽象层。
二、TinyALSA 核心组件
1. PCM(Pulse Code Modulation)接口
- 功能:管理音频流传输(播放和录制)。
- 关键数据结构:
// PCM 设备句柄 struct pcm { int fd; // 设备文件描述符(如 /dev/snd/pcmC0D0p) struct pcm_config config; // 音频参数配置 unsigned flags; // 模式标志(如 PCM_OUT/PCM_IN、非阻塞模式) // ... 其他内部状态 }; // PCM 配置参数 struct pcm_config { unsigned channels; // 声道数(1 或 2) unsigned rate; // 采样率(如 44100 Hz) unsigned period_size; // 每个传输块大小(帧数,通常为 256/1024) unsigned period_count; // 缓冲区包含的周期数(通常为 4-8) enum pcm_format format; // 数据格式(如 PCM_FORMAT_S16_LE) }; - 核心操作:
pcm_open():打开 PCM 设备(如hw:0,0)。pcm_write()/pcm_read():写入/读取音频数据。pcm_close():关闭设备。
2. Mixer(混音控制)接口
- 功能:调节音量、开关通道、选择输入源等硬件控制。
- 关键数据结构:

4831

被折叠的 条评论
为什么被折叠?



