Swift 函数 playAtTime() 不添加延迟

Swift function playAtTime() Does Not Add Delay

我正在尝试播放两个音频播放器,一个接一个播放完。我正在使用 Swift 函数 playAtTime() 创建第二个延迟,如下所示:

var audioPlayer1 = AVAudioPlayer()
var audioPlayer2 = AVAudioPlayer()

let soundPathA = NSBundle.mainBundle().pathForResource("A", ofType: "m4a")
let soundURLA = NSURL.fileURLWithPath(soundPathA!)

let soundPathB = NSBundle.mainBundle().pathForResource("B", ofType: "m4a")
let soundURLB = NSURL.fileURLWithPath(soundPathB!)

var noteA = Sound()
noteA.URL = soundURLA

var noteB = Sound()
noteB.URL = soundURLB

self.audioPlayer1 = try!AVAudioPlayer(contentsOfURL: soundURLA)
self.audioPlayer2 = try!AVAudioPlayer(contentsOfURL: soundURLB)

let duration : NSTimeInterval = audioPlayer1.duration
self.audioPlayer1.play()
self.audioPlayer2.playAtTime(duration)

但是,没有发生延迟。我的问题是什么?

playAtTime 函数不会在指定时间开始播放。相反,它会立即播放,从要播放的声音中的给定时间开始。所以如果你给它 0.6,它会立即开始播放,但声音将从 0.6 秒开始。请参阅文档 here

如果你想在播放前等待,你可以使用dispatch_after:

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.6 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue()) {
    self.audioPlayer2.play()
}

我还没有试过 Michael 的回答,但对于那些想知道如何使用 playAtTime 的人,请查看:http://sandmemory.blogspot.com/2014/12/how-would-you-add-reverbecho-to-audio.html 并查看 playEcho 函数。

代码对我来说是这样的:

var playTime1 : NSTimeInterval = audioPlayer2.deviceCurrentTime + (duration1*Double(value))
self.audioPlayer1.stop()
self.audioPlayer1.currentTime = 0
self.audioPlayer1.play()