一旦调用scheduleBuffer,是否设置了AVAudioPlayerNode isPlaying标志?

时间:2017-06-27 21:05:39

标签: ios avaudioengine

我有两个AVAudioPlayerNodes。

我使用scheduleBuffer安排一个。

我想在它开始之前取消它,但如果它已经开始则取消它。

我如何知道它是否真的开始了?

isPlaying标志似乎在安排时立即设置,而不是在预定时间实际开始时设置。

1 个答案:

答案 0 :(得分: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)")