2017-02-07 8 views

Antwort

0

Der einzige Weg I ist Umplanung des gleichen Puffers denken kann, eine Fertigstellungs handler jedes Mal bereitgestellt wird.

Ich würde gehen:

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

func completionHandler() { 
    // code here 

    scheduleNext() 
} 

// ... 
scheduleNext() 
0

Hier ist, was Arbeit für mich

// 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 
    } 

})