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