AudioToolbox AUAudioFilePlayer属性说明

时间:2014-10-01 07:13:35

标签: ios core-audio audiounit audiotoolbox

我对AUAudioFilePlayer的以下属性感到困惑。 Apple的文档充其量令人困惑:

  1. kAudioUnitProperty_ScheduleStartTimeStamp

  2. kAudioUnitProperty_ScheduledFilePrime

  3. kAudioUnitProperty_ScheduledFileRegion

  4. 有人可以就每种用法提供一些说明吗?看起来他们的用法重叠了?感谢。

1 个答案:

答案 0 :(得分:2)

是的,这令人困惑。

StartTime正是您的想法:它定义了您为该音频单元调度的所有切片/区域的播放时间轴的开始。

由于音频数据需要在播放之前被拉入RAM,然后启动"基本上告诉系统开始将音频文件(指定的帧数)读入内存。

您可以选择仅播放文件的一部分(在文件末尾开始一定数量的帧和/或结束一定数量的帧)。这些被称为"地区"如果您只想播放音频文件的一部分(或区域),这就是您使用的属性。

看一下AudioUnitProperties.h:

  

开始时间

     

音频单元在初始化或重置后不会播放任何片段,直到                   它的开始时间已经确定。开始时间确定了a的开始                   时间轴:计划中所有切片的时间戳都是相对于                   开始时间。

     

通过设置kAudioUnitProperty_ScheduleStartTimeStamp来设置开始时间                       具有AudioTimeStamp结构的属性。如果时间戳包含有效                       采样时间(timestamp.mFlags& kAudioTimeStampSampleTimeValid),然后回放                       传递给AudioUnitRender函数的时间戳到达时开始                       指定的采样时间。如果指定的采样时间为-1,则开始播放                       下一个渲染周期。

     

如果开始时间戳不包含有效的采样时间,但确实包含                       有效的主机时间(timestamp.mFlags& kAudioTimeStampHostTimeValid),然后是                       指定的主机时间转换为播放的样本时间                       开始。主机时间为0表示"从下一个渲染周期开始。"

     

可以查询kAudioUnitProperty_ScheduleStartTimeStamp属性以获取                       播放开始的时间。如果尚未达到开始时间,                       返回的时间戳将是主机应用程序最后设置的内容。

     

引发

     

您应该在安排后设置kAudioUnitProperty_ScheduledFilePrime   要播放的初始文件区域以及开始播放之前。此SetProperty调用将开始读取音频文件,并且在读取属性值指定的帧数之前不会返回。

     

调度区域

     

要安排播放音频文件的某个区域,请设置kAudioUnitProperty_ScheduledFileRegion属性。这是ScheduledAudioFileRegion结构。 mTimeStamp.mSampleTime必须是有效和相对于单元&#39被解释; S开始时间 - 开始时间语义(使用kAudioUnitProperty_ScheduleStartTimeStamp)的那些相同的AUScheduledSoundPlayer。与ScheduledAudioSlice结构不同,该单元制作ScheduledAudioFileRegions的副本,因此您可以在堆栈上创建它们,或者在计划它们之后立即重新使用/处理它们。