异步同时播放多个 AVAudioPlayer?
play multiple AVAudioPlayer at the same time asynchronously?
我有一个后台 AVAudioPlayer,它通常工作得很好。现在我有一些事件会延迟触发异步操作,在这里我想播放另一个声音,而另一个应该继续播放。所以我做了一个新的:
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
guard let urlStr = Bundle.main.path(forResource: "File1", ofType: ".mp3") else { fatalError() }
self.player = try? AVAudioPlayer(contentsOf: URL(fileURLWithPath: urlStr), fileTypeHint: "mp3")
self.player?.play()
}
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
guard let urlStr = Bundle.main.path(forResource: "File2", ofType: ".mp3") else { fatalError() }
let p = try? AVAudioPlayer(contentsOf: URL(fileURLWithPath: urlStr), fileTypeHint: "mp3")
p?.play()
}
所以第一个正常运行(调度只是为了表明它也在异步工作)。第二个也运行,这意味着没有错误。然而,我只听到第一个...
为什么要在异步调用中创建一个新播放器?我有类似的问题,如果你在你的直接异步范围之外声明一个新的 var,它应该可以工作。
我有一个后台 AVAudioPlayer,它通常工作得很好。现在我有一些事件会延迟触发异步操作,在这里我想播放另一个声音,而另一个应该继续播放。所以我做了一个新的:
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
guard let urlStr = Bundle.main.path(forResource: "File1", ofType: ".mp3") else { fatalError() }
self.player = try? AVAudioPlayer(contentsOf: URL(fileURLWithPath: urlStr), fileTypeHint: "mp3")
self.player?.play()
}
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
guard let urlStr = Bundle.main.path(forResource: "File2", ofType: ".mp3") else { fatalError() }
let p = try? AVAudioPlayer(contentsOf: URL(fileURLWithPath: urlStr), fileTypeHint: "mp3")
p?.play()
}
所以第一个正常运行(调度只是为了表明它也在异步工作)。第二个也运行,这意味着没有错误。然而,我只听到第一个...
为什么要在异步调用中创建一个新播放器?我有类似的问题,如果你在你的直接异步范围之外声明一个新的 var,它应该可以工作。