2014-10-01 82 views
1

我很困惑AUAudioFilePlayer的以下属性。从苹果公司的文件是混淆充其量:AudioToolbox AUAudioFilePlayer属性说明

  1. kAudioUnitProperty_ScheduleStartTimeStamp

  2. kAudioUnitProperty_ScheduledFilePrime

  3. kAudioUnitProperty_ScheduledFileRegion

可有人请提供关于每个使用一些澄清?这似乎是他们的用法重叠?谢谢。

回答

2

是的,它很混乱。

StartTime正是您想象的那样:它为您为该音频单元安排的所有片/区定义了播放时间线的开始。由于在播放之前需要将音频数据拉入RAM,因此“启动”基本上告诉系统开始将音频文件(指定数量的帧)读入存储器。

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

看一看AudioUnitProperties.h:

开始时间

音频单元将不播放任何片下面的初始化或重置,直到 其开始时间还没有确定。开始时间确定时间轴 的开始:时间表中所有切片的时间戳相对于 开始时间。

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

如果开始时间戳不包含有效样品的时间,但确实含有一个 有效主机时间(timestamp.mFlags & kAudioTimeStampHostTimeValid),则 指定的主机时间被转换为采样时间处播放将 开始。主机时间为0表示“在下一个渲染周期开始”。

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

底漆

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

调度地区

要安排音频文件的区域的重放,设置kAudioUnitProperty_ScheduledFileRegion属性。这是一个ScheduledAudioFileRegion结构。 mTimeStamp.mSampleTime必须是有效的,并且相对于设备的开始时间进行解释 - 开始时间语义(使用kAudioUnitProperty_ScheduleStartTimeStamp)与AUScheduledSoundPlayer的相同。与ScheduledAudioSlice结构不同,该单元制作了ScheduledAudioFileRegions的副本,因此您可以在堆栈上创建它们,或者在调度它们之后立即重新使用/处理它们。

+0

感谢,它仍然没有解释这一切,但它是很好的方便的信息,所以我格式化了一下 – believesInSanta 2014-10-03 10:49:00

+0

哪些部分不清楚? – Nick 2014-10-03 13:05:48

+0

我还有点不清楚Priming是做什么的,以及开始时间和调度区域的'AudioTimeStamp'之间的区别...... – believesInSanta 2014-10-03 19:32:10