2017-07-03 6 views
0

J'ai un AVAudioPlayerNode (playerNode) et deux AVAudioPCMBuffer (buffer1, buffer2) configuration. J'ai aussi une configuration AVAudioTime (futureTime) pendant 10 secondes.AVAudioPlayerNode scheduleBuffer interruptsAtLoop est interrompu immédiatement

var options: AVAudioPlayerNodeBufferOptions = [] 
options.insert(.interruptsAtLoop) 
options.insert(.loops) 

playerNode.scheduleBuffer(buffer1!, 
    at: futureTime, 
    options: options, 
    completionHandler:nil) 

Ce qui précède lit le tampon 1 après avoir attendu 10 secondes et continue de le lire en boucle.

Appeler le code suivant:

playerNode.scheduleBuffer(buffer2!, 
    at: futureTime, 
    options: options, 
    completionHandler:nil) 

est à l'origine buffer1 pour arrêter la lecture et buffer2 pour commencer immédiatement au lieu d'attendre au moins 10 secondes, puis interrompre à la prochaine boucle de buffer1.

Les idées que je fais mal qui causent cette interruption immédiate au lieu d'interrompre à la boucle comme indiqué?

Répondre

0

Je n'ai pas utilisé la classe AVAudioTime directement, mais en regardant l'API, il semble représenter un moment précis dans le temps, pas un relatif. Si c'est vrai, alors en utilisant deux fois le même "futureTime", vous planifiez buffer2 de démarrer en même temps que le tampon 1. Peut-être que vous pouvez calculer un futureTime2 10 secondes après le premier.