2017-06-27 2 views
0

Ich habe zwei AVAudioPlayerNodes.Wird das isApplaying-Flag AVAudioPlayerNode gesetzt, sobald der Befehl scheduleBuffer aufgerufen wird?

Ich plane eine mit ScheduleBuffer.

Ich möchte es vor dem Start abbrechen, aber nicht, wenn es bereits begonnen hat.

Woher weiß ich, ob es tatsächlich begonnen hat?

Das isPlaying-Flag wird so festgelegt, sobald es geplant ist und nicht, wenn es zum geplanten Zeitpunkt tatsächlich gestartet wird.

+0

Rufen Sie play() oder spielen (at :) auf den Knoten? – dave234

+0

Ich rufe play() auf den Knoten. –

+0

Didi du hast es herausgefunden? – dave234

Antwort

0

AVAudioPlayerNode nimmt nach dem Aufruf von play() einen Renderzyklus vor, bevor der eigentliche Ton abgespielt wird. Wenn Sie versuchen, die Zeit zwischen play() und dem abgespielten Audiomaterial zu ermitteln, können Sie die playerTime des playerNodes abrufen und nach negativen (oder unter play(at:)) sampleTime-Werten suchen. Da Sie jedoch andere Threads als das geplante Audiomaterial verwenden, besteht immer noch die Möglichkeit, dass die Audiodaten eines Renderzyklus herausgedrückt werden können, bevor Sie den Player stoppen.

let playerTime = playerNode.playerTime(forNodeTime: AVAudioTime.init(hostTime: mach_absolute_time())) 
print("sample time \(playerTime.sampleTime)") 
Verwandte Themen