2017-06-27 40 views
0

私は2つのAVAudioPlayerNodesを持っています。AVAudioPlayerNode isPlayingフラグは、scheduleBufferが呼び出されるとすぐに設定されますか?

scheduleBufferを使用して1つをスケジュールします。

開始前にキャンセルしたいが、既に開始している場合はキャンセルしたい。

実際に開始されたかどうかはどのようにわかりますか?

isPlayingフラグは、実際にスケジュールされた時刻に開始されるのではなく、スケジュールされるとすぐに設定されているように見えます。

+0

ノードでplay()またはplay(at :)を呼び出していませんか? – dave234

+0

私はノードでplay()を呼び出しています。 –

+0

あなたはそれを分かったのですか? – dave234

答えて

0

AVAudioPlayerNodeは、実際のオーディオが再生される前にplay()を呼び出した後、レンダリングサイクルを実行します。 play()からオーディオ再生までの時間を特定する場合は、playerNodeのplayerTimeを取得して、負(またはplay(at:)より小さい)のsampleTime値を探します。しかし、予定されているオーディオとは異なるスレッドを使用しているため、プレイヤーを停止する前にレンダリングサイクルの価値のあるオーディオを絞り込むことができます。

let playerTime = playerNode.playerTime(forNodeTime: AVAudioTime.init(hostTime: mach_absolute_time())) 
print("sample time \(playerTime.sampleTime)") 
関連する問題