跳到主要内容

音频输出 (audiosink)

音频输出抽象,支持多种输出目的。

结构体

struct audio_sink_t {
struct audio_filter_t * filter;
void (*write)(struct audio_sink_t * s, struct audio_frame_t * af);
int (*ioctl)(struct audio_sink_t * s, const char * cmd, void * arg);
void (*destroy)(struct audio_sink_t * s);
void * priv;
};

创建函数

函数说明
audio_sink_alloc()分配空 Sink
audio_sink_alloc_from_playback(name, rate, channel)硬件播放输出
audio_sink_alloc_amplitude(period)幅度包络提取
audio_sink_alloc_spectrum(period)FFT 频谱分析
audio_sink_alloc_vad(start, end)语音活动检测
audio_sink_alloc_afsk(mark, space, rate, bit)AFSK 调制输出

控制函数

函数说明
audio_sink_write(s, af)写入音频帧
audio_sink_ioctl(s, cmd, arg)设备控制
audio_sink_get/set_volume(s, vol)获取/设置音量
audio_sink_free(s)释放 Sink

ioctl 命令

通用 ioctl 命令(所有 sink 都应支持):

命令字符串shasharg 类型说明
"audio-sink-get-volume"0xe04cfa2bint *获取音量 [0, 1000]
"audio-sink-set-volume"0x10cbc7b7int *设置音量 [0, 1000]

audio_sink_get_volume() / audio_sink_set_volume() 即是上述 ioctl 的便捷封装。

特定 sink 的扩展命令示例:

sink 类型命令字符串说明
spectrum"spectrum-get-bins"获取最近一次 FFT 频谱数组
amplitude"amplitude-get-value"获取当前振幅包络值
vad"vad-get-state"获取语音活动检测状态

具体参数与返回值参见各 sink 的源码实现。

数据流约定

调用 audio_sink_write(s, af) 时框架内部会自动执行:

s->write(s, audio_filter_process(s->filter, af));

即写入的帧会先经过 sink 自带的 filter 后处理。例如 sink-playback 内置 resample+reshape filter 实现自动格式适配。详见 音频效果典型使用示例