Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何确定ScheduledAudioFileRegion何时完成播放?_Ios_Core Audio - Fatal编程技术网

Ios 如何确定ScheduledAudioFileRegion何时完成播放?

Ios 如何确定ScheduledAudioFileRegion何时完成播放?,ios,core-audio,Ios,Core Audio,在iOS上,我有一个类型为kAudioUnitSubType\u AudioFilePlayer的音频单元,由一个AUNode封装,并连接到音频图形中的多通道混音器和远程IO(输出) 在播放图形时,我希望循环文件,并能够确定AudioFilePlayer何时到达文件末尾,以便在开始下一次循环之前执行操作 在查看AudioUnitProperties.h时,虽然存在一个完成回调-mCompletionProc,但它仅在磁盘读取文件并计划播放时调用,而不是在磁盘实际完成播放音频时调用 然后我考虑将音

在iOS上,我有一个类型为
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));