Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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
Ios8 AVAudioEngine对AVAudioPlayerNode的时间管理和回调不正确_Ios8_Avaudioplayer_Avaudioengine_Avaudioplayernode_Avaudiofile - Fatal编程技术网

Ios8 AVAudioEngine对AVAudioPlayerNode的时间管理和回调不正确

Ios8 AVAudioEngine对AVAudioPlayerNode的时间管理和回调不正确,ios8,avaudioplayer,avaudioengine,avaudioplayernode,avaudiofile,Ios8,Avaudioplayer,Avaudioengine,Avaudioplayernode,Avaudiofile,我对iOS8中的新音频引擎有一个严重的问题。我有一个应用程序,它是用AVAudioPlayer构建的,我正试图找到一种迁移到新体系结构的方法,但是我遇到了以下问题(我相信你会同意,这是一个严重的基本障碍): 我的头文件: AVAudioEngine *engine; AVAudioMixerNode *mainMixer; AVAudioPlayerNode *player; 我的m文件(在viewDidLoad中): 上面的代码初始化引擎和节点,然后开始回放我正在使用的任何文件。它首先打印出

我对iOS8中的新音频引擎有一个严重的问题。我有一个应用程序,它是用AVAudioPlayer构建的,我正试图找到一种迁移到新体系结构的方法,但是我遇到了以下问题(我相信你会同意,这是一个严重的基本障碍):

我的头文件:

AVAudioEngine *engine;
AVAudioMixerNode *mainMixer;
AVAudioPlayerNode *player;
我的m文件(在viewDidLoad中):

上面的代码初始化引擎和节点,然后开始回放我正在使用的任何文件。它首先打印出音乐文件的持续时间,然后在完成播放后,在回调函数中打印播放器的当前时间。这两个值应该相同,或者在最坏的情况下,彼此非常非常接近,但事实并非如此,这两个值之间的差异非常大,例如

duration: 148.51
finished at: 147.61

我做错什么了吗?这应该很简单,我尝试过不同的文件格式、文件长度和数十个音乐文件,但差异总是在1秒左右。

更新:

从iOS 11开始,您可以指定
completionCallbackType:AVAudioPlayerNodeCompletionCallbackType

消耗的数据:
一种完成处理程序,指示播放器已使用缓冲区或文件数据

数据呈现:
播放器已呈现的缓冲区或文件数据

数据回放:
指示缓冲区或文件已完成播放的完成处理程序

更多信息:

原件:

根据苹果的
scheduleFile:atTime:completionHandler
文档:

可以在呈现之前调用completionHandler 开始或在文件完全播放之前

duration: 148.51
finished at: 147.61