我创建了 songQueue 并向其中添加了一组歌曲。我创建的队列中的每首歌曲都一个接一个地播放,但我想在每首歌曲之间添加一定的间隙(myModel.delay)。
我使用下面的代码创建歌曲队列并使用此功能播放它
func play(){
songQueue = {
let sound1 = Bundle.main.url(forResource: self.myModel.song[0].sURL, withExtension:nil)!
let sound2 = Bundle.main.url(forResource: self.myModel.song[1].sURL, withExtension:nil)!
let sound3 = Bundle.main.url(forResource: self.myModel.song[2].sURL, withExtension:nil)!
let s1 = AVPlayerItem(url: sound1)
let s2 = AVPlayerItem(url: sound2)
let s3 = AVPlayerItem(url: sound3)
let queue = AVQueuePlayer(items: [s1, s2, s3])
return queue
}()
self.songQueue.play()
}
这是我用来播放歌曲的按钮
Button(action: myModel.play
){
Image(systemName: "pause.fill")
.resizable()
.padding(.all, 30)
.clipShape(Circle())
}.onAppear(perform: {
myModel.play()
})
请帮我解决这个问题
非常古老的技术,但在 Objective-C 中很有效。
为
observer
添加一个EndPlay notification
。然后在收到通知时暂停播放几秒钟(延迟),然后使用 GCD 调度延迟播放播放器。
观察者:
NotificationCenter.default.addObserver(self, selector: #selector(playerEndedPlaying), name: Notification.Name("AVPlayerItemDidPlayToEndTimeNotification"), object: nil)
通知回拨
@objc func playerEndedPlaying(_ notification: Notification) {
self.songQueue?.pause()
DispatchQueue.main.asyncAfter(deadline: .now() + DELAY_IN_SECONDS) {[weak self] in
self?.songQueue?.play()
}
}
实现它的一种非常简单的方法是使用您在歌曲之间播放的“暂停”歌曲。只需录制带有静音微音的声音片段和您想要的暂停持续时间。
像这样插入表格:
let pause = AVPlayerItem(url: pause)
let s1 = AVPlayerItem(url: sound1)
let s2 = AVPlayerItem(url: sound2)
let s3 = AVPlayerItem(url: sound3)
let queue = AVQueuePlayer(items: [s1, pause, s2, pause, s3])
return queue
不是最优雅的方式..但应该工作