2

是否有可能确定是否AVAudioEngine完成了播放的声音?过去我使用了AVAudioPlayer's 功能:

func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {
    // Code after finished the played sound
}

现在我需要一些效果,但是没有AVAudioEnginge提供标识播放声音结束的函数。

我搜索了很多,但不幸的是我在文档中只找到了这个函数AVAudioEngine

var running: Bool { get }

我目前的解决方案是检查“正在运行”的布尔值,如果它是假的,那么玩家就不再玩了。有人知道更好的解决方案AVAudioEngine吗?非常感谢你!

4

2 回答 2

2

我还使用了 NSTimer,因为我没有找到任何其他解决方案/代表。但它只触发一次并在音频文件结束后立即启动(这意味着,第一个参数“秒”具有音频文件的持续时间的值)。选择器是我的“自定义委托”功能。

于 2015-12-24T14:14:20.297 回答
2

我将 AVAudioPlayerNode 附加到我的引擎

player = AVAudioPlayerNode()

    let file = try! AVAudioFile(forReading: url)
    let buffer = AVAudioPCMBuffer(PCMFormat: file.processingFormat, frameCapacity: AVAudioFrameCount(file.length))

    do {
        print("read")
        try file.readIntoBuffer(buffer)
    } catch _ {
    }

engine.attachNode(player)
engine.connect(player, to: engine.mainMixerNode, format: nil)

self.player.scheduleBuffer(buffer, completionHandler: {
    print("Complete")
})

        engine.prepare()
    do {
        try engine.start()
    } catch _ {
        print("Play session Error")
    }

    player.play()

我希望这会有所帮助!

于 2015-12-29T21:18:08.510 回答