Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.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 使用AVAudioPlayerNode播放片段时,我是否可以注册两个不同的回调,即计划完成和播放完成?_Ios_Swift_Avaudioplayernode - Fatal编程技术网

Ios 使用AVAudioPlayerNode播放片段时,我是否可以注册两个不同的回调,即计划完成和播放完成?

Ios 使用AVAudioPlayerNode播放片段时,我是否可以注册两个不同的回调,即计划完成和播放完成?,ios,swift,avaudioplayernode,Ios,Swift,Avaudioplayernode,我正在使用AVAudioPlayerNode在Swift中构建一个多声道音频播放器。当计划播放音频片段时,我希望在计划完成时以及文件播放完成时/如果文件播放完成时收到通知。Swift API的编写方式似乎表明,您只能注册其中一个API。如果调用short函数: func scheduleSegment(_ file: AVAudioFile, startingFrame startFrame: AVAudioFramePosition, frameCount

我正在使用AVAudioPlayerNode在Swift中构建一个多声道音频播放器。当计划播放音频片段时,我希望在计划完成时以及文件播放完成时/如果文件播放完成时收到通知。Swift API的编写方式似乎表明,您只能注册其中一个API。如果调用short函数:

func scheduleSegment(_ file: AVAudioFile, 
       startingFrame startFrame: AVAudioFramePosition, 
          frameCount numberFrames: AVAudioFrameCount, 
                  at when: AVAudioTime?, 
   completionHandler: AVAudioNodeCompletionHandler? = nil)
一旦文件被调度(不是播放,只是被调度为播放),回调就会被调用,并且您不能传递任何特殊参数,只能传递一个基本闭包

调用fancier函数时,您可以指定您想要的回调类型,但必须选择一种且仅选择一种:

func scheduleSegment(_ file: AVAudioFile, 
       startingFrame startFrame: AVAudioFramePosition, 
          frameCount numberFrames: AVAudioFrameCount, 
                  at when: AVAudioTime?, 
completionCallbackType callbackType: AVAudioPlayerNodeCompletionCallbackType, 
   completionHandler: AVAudioPlayerNodeCompletionHandler? = nil)
enum AVAudioPlayerNodeCompletionCallbackType可以是以下类型之一: 数据消耗、数据呈现或数据回放

不幸的是,我必须选一个,但实际上我需要两个。我需要在计划完成和数据回放时得到通知

有办法做到这一点吗