2017-02-07 13 views

答えて

0

私が考えることができる唯一の方法は、同じバッファを再スケジューリングし、毎回完了ハンドラを提供することです。

私はこれのために行くだろう:

func scheduleNext() { 
    self.audioPlayerNode.scheduleBuffer(buffer, at: nil, completionHandler: completionHandler) 
} 

func completionHandler() { 
    // code here 

    scheduleNext() 
} 

// ... 
scheduleNext() 
0

ここでは私のためにどのような仕事

// audioFile here is our original audio 

audioPlayerNode.scheduleFile(audioFile, at: nil, completionHandler: { 
     print("scheduleFile Complete") 

    var delayInSeconds: Double = 0 

    if let lastRenderTime = self.audioPlayerNode.lastRenderTime, let playerTime = self.audioPlayerNode.playerTime(forNodeTime: lastRenderTime) { 

     if let rate = rate { 
      delayInSeconds = Double(audioFile.length - playerTime.sampleTime)/Double(audioFile.processingFormat.sampleRate)/Double(rate!) 
     } else { 
      delayInSeconds = Double(audioFile.length - playerTime.sampleTime)/Double(audioFile.processingFormat.sampleRate) 
     } 
    } 

    // schedule a stop timer for when audio finishes playing 
    DispatchTime.executeAfter(seconds: delayInSeconds) { 
     audioEngine.mainMixerNode.removeTap(onBus: 0) 
     // Playback has completed 
    } 

}) 
です
関連する問題