Ios 如何确定ScheduledAudioFileRegion何时完成播放?
在iOS上,我有一个类型为Ios 如何确定ScheduledAudioFileRegion何时完成播放?,ios,core-audio,Ios,Core Audio,在iOS上,我有一个类型为kAudioUnitSubType\u AudioFilePlayer的音频单元,由一个AUNode封装,并连接到音频图形中的多通道混音器和远程IO(输出) 在播放图形时,我希望循环文件,并能够确定AudioFilePlayer何时到达文件末尾,以便在开始下一次循环之前执行操作 在查看AudioUnitProperties.h时,虽然存在一个完成回调-mCompletionProc,但它仅在磁盘读取文件并计划播放时调用,而不是在磁盘实际完成播放音频时调用 然后我考虑将音
kAudioUnitSubType\u AudioFilePlayer
的音频单元,由一个AUNode封装,并连接到音频图形中的多通道混音器和远程IO(输出)
在播放图形时,我希望循环文件,并能够确定AudioFilePlayer何时到达文件末尾,以便在开始下一次循环之前执行操作
在查看AudioUnitProperties.h时,虽然存在一个完成回调-mCompletionProc
,但它仅在磁盘读取文件并计划播放时调用,而不是在磁盘实际完成播放音频时调用
然后我考虑将音频的长度(包/帧)存储为一个属性,并在附加到混音器另一个输入的输入回调中,检查我们是否在文件的末尾。但是回调并不是每帧都被调用,所以我可能会错过文件的实际结尾
如何处理此问题?请设置ScheduledAudioFileRegion.mcCompletionProc //
如果您想知道曲目何时到达终点,可以使用
RenderNotify
(在要求音频单元渲染时调用的通知回调)。在渲染回调中,您可以获得当前处理的帧数,并可以将其添加到frame属性中。只需简单检查此属性是否高于曲目完成时所能知道的帧数。我遇到过这个问题,但也没有找到答案
ScheduledAudioFileRegion playRegion;
playRegion.mTimeStamp.mFlags = kAudioTimeStampSampleTimeValid;
playRegion.mTimeStamp.mSampleTime = 0;
playRegion.mCompletionProc = XXXXXXXXXXXXXXXX(you proc);
playRegion.mCompletionProcUserData = NULL;
playRegion.mAudioFile = mAudioFile;
playRegion.mLoopCount = 0;
playRegion.mStartFrame = mStartSampleFrame;
playRegion.mFramesToPlay = UInt32(-1);
err = AudioUnitSetProperty(mFilePlayerAU, kAudioUnitProperty_ScheduledFileRegion,
kAudioUnitScope_Global, 0, &playRegion, sizeof(playRegion));