【问题标题】:Is AVAudioPlayerNode isPlaying flag set as soon as scheduleBuffer is called?调用 scheduleBuffer 后是否立即设置 AVAudioPlayerNode isPlaying 标志?
【发布时间】:2017-06-27 21:05:38
【问题描述】:

我有两个 AVAudioPlayerNodes。

我使用 scheduleBuffer 安排一个。

我想在它开始之前取消它,但如果它已经开始了就不要。

我怎么知道它是否真的开始了?

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

【问题讨论】:

  • 你是在节点上调用 play() 还是 play(at:) ?
  • 我在节点上调用 play()。
  • 你搞清楚了吗?
  • 我现在需要它!收到了吗?

标签: ios avaudioengine


【解决方案1】:

AVAudioPlayerNode 在调用play() 之后会在实际音频开始播放之前进行渲染周期。如果您试图确定play() 和正在播放的音频之间的时间,您可以获取 playerNode 的 playerTime 并查找负的(或小于 play(at:) 指定的)sampleTime 值。但由于您与正在安排的音频处于不同的线程上,因此在您停止播放器之前,仍有可能会挤出一个渲染周期的音频。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多