gpt4 book ai didi

ios - 在 Swift 中按顺序播放音频文件,其中第二个声音重复播放

转载 作者:行者123 更新时间:2023-11-30 10:55:48 26 4
gpt4 key购买 nike

对于我的游戏中的背景音乐,我想播放两种声音。第一个声音在开始时仅播放一次(4 小节前奏)。接下来,第二个声音(主音乐)无限循环播放。不幸的是,下面的代码同时播放声音,而不是按顺序播放(当我查看 AVQueuePlayer 时,我无法弄清楚如何仅循环两个声音中的第二个):

var backgroundMusicPlayer: AVAudioPlayer!
var backgroundMusicPlayerIntro: AVAudioPlayer!

func playBackgroundMusic(filename: String, withIntro intro: String) {
let resourceUrl = Bundle.main.url(forResource: filename, withExtension: nil)
let resourceUrlIntro = Bundle.main.url(forResource: intro, withExtension: nil)

guard let url = resourceUrl, let urlIntro = resourceUrlIntro else {
print("Could not find files: \(intro) and/or \(filename)")
return
}

//play the intro first before playing the main loop
do {
try backgroundMusicPlayerIntro = AVAudioPlayer(contentsOf: urlIntro)
backgroundMusicPlayerIntro.numberOfLoops = 1
backgroundMusicPlayerIntro.prepareToPlay()
backgroundMusicPlayerIntro.play()
} catch {
print("Could not create audio player!")
return
}

//main music that gets played on repeat
do {
try backgroundMusicPlayer = AVAudioPlayer(contentsOf: url)
backgroundMusicPlayer.numberOfLoops = -1
backgroundMusicPlayer.prepareToPlay()
backgroundMusicPlayer.play()
} catch {
print("Could not create audio player!")
return
}
}

最佳答案

您将同时启动 2 名玩家。您可以使用一个播放器属性,当在第一个声音结束时调用 audioPlayerDidFinishPlaying 方法时,它的 AVAudioPlayerDelegate 可以播放第二个声音。基本上是这样的:

class Player: AVAudioPlayerDelegate {

var audioPlayer: AVAudioPlayer?

func startPlayingFirstSong() {
// your 1st do/catch code...
try audioPlayer = AVAudioPlayer(contentsOf: urlIntro)
audioPlayer?.delegate = self
}

// AVAudioPlayer will call this func when the first song ends:
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
// your 2nd do/catch code...
try audioPlayer = AVAudioPlayer(contentsOf: url)
audioPlayer?.delegate = self
}

}

let player = Player()
player.startPlayingFirstSong()

关于ios - 在 Swift 中按顺序播放音频文件,其中第二个声音重复播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53963219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com