cocoa – 使用AudioUnit对数据包和帧大小使用什么值

我熟悉如何使用AudioUnit播放声音,并对数据包和帧的概念感到困惑.我想知道:

> AudioUnit上下文中数据包和帧的定义是什么
>每个数据包使用多个样本以及每帧多个数据包的交易是什么

我的理由是:在我到目前为止看到的所有代码示例中,数据包本质上是一个样本,对于16位立体声流,通常mBytesPerPacket = 4. mFramesPerPacket通常为1,制作一个帧,一个数据包和一个样本(都是立体声样本),相同的概念.

我期望数据包和/或帧是样本的缓冲区,即一组256或512个连续样本,驱动程序可以指向并线性读取.将帧/数据包大小减少到一个样本似乎会给负责播放数据的任何驱动程序带来不必要的压力.我错过了什么?

首先,一些定义:

>帧是音频数据的单个样本,表示在给定时间点单个通道的信号值.
>数据包是一组帧,通常意味着在给定时间点所有通道的帧集.
>缓冲区是一组交付用于处理的帧.

你不应该混淆数据包和帧,实际上mFramesPerPacket通常应该设置为1.这并不意味着你的AudioUnit的render方法每帧都会得到一个回调.如果要控制发生的频率,则需要将kAudioSessionProperty_PreferredHardwareIOBufferDuration属性设置为首选缓冲区大小.设置此属性并不能保证您要求的确切缓冲区大小,但系统会尝试为您提供接近此值的内容.

相关文章
相关标签/搜索