我有两个AVAudioPlayerNodes。
我使用scheduleBuffer安排一个。
我想在它开始之前取消它,但如果它已经开始则取消它。
我如何知道它是否真的开始了?
isPlaying标志似乎在安排时立即设置,而不是在预定时间实际开始时设置。
答案 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)")