首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AudioToolbox AUAudioFilePlayer属性描述

AudioToolbox AUAudioFilePlayer属性描述
EN

Stack Overflow用户
提问于 2014-10-01 07:13:34
回答 1查看 526关注 0票数 2

我对AUAudioFilePlayer的以下属性感到困惑。苹果公司的文档充其量只能令人困惑:

  1. kAudioUnitProperty_ScheduleStartTimeStamp
  2. kAudioUnitProperty_ScheduledFilePrime
  3. kAudioUnitProperty_ScheduledFileRegion

有人能对每一种用法提供一些澄清吗?好像他们的用法重叠了?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-03 02:54:52

是啊,真让人费解。

StartTime正是您所认为的那样:它为您为该音频单元计划的所有片/区域定义了播放时间线的开始。

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

您可以选择只播放文件的一部分(将一定数量的帧放入文件中并/或在文件结束之前结束某些帧)。这些被称为“区域”,如果您只想播放音频文件的一部分(或区域),则使用这个属性。

请看AudioUnitPropertis.h:

启动时间 音频单元在初始化或重置之后不会播放任何片段,直到其启动时间被设置为止。开始时间确定时间线的开始:计划中所有片的时间戳都是相对于开始时间的。 通过设置具有kAudioUnitProperty_ScheduleStartTimeStamp结构的AudioTimeStamp属性来设置开始时间。如果时间戳包含有效的样本时间(timestamp.mFlags & kAudioTimeStampSampleTimeValid),则当传递给AudioUnitRender函数的时间戳到达指定的示例时间时开始回放。如果指定的示例时间为-1,则在下一个呈现周期开始播放。 如果开始时间戳不包含有效的样本时间,而是包含有效的主机时间(timestamp.mFlags & kAudioTimeStampHostTimeValid),则指定的主机时间被转换为开始播放的示例时间。主机时间为0表示“开始下一个呈现周期”。 可以查询kAudioUnitProperty_ScheduleStartTimeStamp属性以获得开始播放的时间。如果尚未到达启动时间,则返回的时间戳将是主机应用程序上一次设置的时间戳。 起爆 您应该在调度要播放的初始文件区域之后和开始播放之前设置kAudioUnitProperty_ScheduledFilePrime。此SetProperty调用将开始读取音频文件,直到读取了属性值指定的帧数后才返回。 调度区域 若要安排音频文件区域的回放,请设置kAudioUnitProperty_ScheduledFileRegion属性。这是一个ScheduledAudioFileRegion结构。mTimeStamp.mSampleTime必须是有效的,并且是相对于单元的开始时间来解释的--启动时间语义(使用kAudioUnitProperty_ScheduleStartTimeStamp)与AUScheduledSoundPlayer的语义相同。与ScheduledAudioSlice结构不同,单元生成ScheduledAudioFileRegions的副本,因此您可以在堆栈上创建它们,或者在调度它们之后立即重用/处理它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26135973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档