Swift 3:在AVAudioPlayerNode上快速播放声音

Swift 3: Quickly playing sounds on AVAudioPlayerNode

我正在制作一款基本游戏,并且正在尝试为其制作热门音效。在 Rhythmic Fistman 的帮助下,我已经让它们在不同的音高上演奏,但现在我遇到了一个新问题 - 如果我尝试非常快地演奏它们,它就会滞后。这似乎不是什么大问题,但在我正在开发的游戏中,每当你移动手指时,它都有可能发出击中的声音,所以它很快就会变得迟钝,尤其是在多点触控的情况下。

目前,我在 AVAudioEngine 中有两个节点用于两个通道,因此我可以同时播放两个打击音效,我正在使用它来停止这些节点之一,以便它可以播放新的声音:

if playerNode.isPlaying {
    playerNode.stop()
    playerNode.play()
}
playerNode.scheduleFile(file, at: nil, completionHandler: nil)

问题是 isPlaying 总是 return 是真的,不管声音是否真的在播放,因为如果你这样做 playerNode.stop( ),并且由于某种原因它非常滞后,事实上,一个接一个地播放大量热门音效并不那么滞后。

我认为一个简单的解决方案不是重置节点,而是不播放点击音效,但由于 isPlaying 始终 returns true 我不能这样做。有没有更快的方法让音频节点播放声音?

看来 scheduleBuffer 正是我所需要的