在应用中播放背景音乐?

我希望用户能够打开应用程序并开始播放音乐。 我希望用户能够在没有音乐停止的情况下转到任何视图控制器并返回到初始控制器。 我希望它无限循环。

我试图将初始视图控制器的viewDidLoad方法放入其中以开始播放。 发生的情况是,用户离开初始视图控制器,当他们回来时,音乐再次开始播放,与原始副本重叠。

为了解决这个问题,我在if语句中检查声音是否已经播放以不启动另一个副本,并且viewDidLoad方法完全忽略if语句并且无论如何都要再次播放它。 我也尝试过使用viewDid/WillAppear 。 我已经尝试将声音放在applicationDidLaunchWithOptions方法的app委托中,我完全沉默了。

使用单例也可以:

 import AVFoundation class MusicHelper { static let sharedHelper = MusicHelper() var audioPlayer: AVAudioPlayer? func playBackgroundMusic() { let aSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("coolsong", ofType: "mp3")!) do { audioPlayer = try AVAudioPlayer(contentsOfURL:aSound) audioPlayer!.numberOfLoops = -1 audioPlayer!.prepareToPlay() audioPlayer!.play() } catch { print("Cannot play the file") } } } 

然后你可以在任何类中使用它(根据Swift 2.1)

 MusicHelper.sharedHelper.playBackgroundMusic() 

这就是我的做法。 将此代码添加到您希望音乐开始播放的课程场所外的任何位置。 你甚至可以创建一个全新的Swift文件,只需在其中添加此代码(导入AVFoundation)

 var backgroundMusicPlayer: AVAudioPlayer! func playBackgroundMusic(filename: String) { //The location of the file and its type let url = NSBundle.mainBundle().URLForResource(filename, withExtension: "mp3") //Returns an error if it can't find the file name if (url == nil) { println("Could not find the file \(filename)") } var error: NSError? = nil //Assigns the actual music to the music player backgroundMusicPlayer = AVAudioPlayer(contentsOfURL: url, error: &error) //Error if it failed to create the music player if backgroundMusicPlayer == nil { println("Could not create audio player: \(error!)") return } //A negative means it loops forever backgroundMusicPlayer.numberOfLoops = -1 backgroundMusicPlayer.prepareToPlay() backgroundMusicPlayer.play() } 

完成后,转到didMoveToView函数并使用文件名调用该函数。

 playBackgroundMusic("IntroMusic") 

我只是测试了它,切换场景后效果很好。

只需添加“numberofLoops = -1”即可在后台无限播放。

示例(Swift):

 func playBackgroundMusic() { do { if let bundle = NSBundle.mainBundle().pathForResource("someMP3file", ofType: "mp3") { let alertSound = NSURL(fileURLWithPath: bundle) try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) try AVAudioSession.sharedInstance().setActive(true) try audioPlayer = AVAudioPlayer(contentsOfURL: alertSound) audioPlayer.numberOfLoops = -1 audioPlayer.prepareToPlay() audioPlayer.play() } } catch { print(error) } } 

玩的开心。

找到了解决方案。 我声明了一个名为signal的视图控制器属性。 我说信号:布尔? – 然后在viewDidLoad中,如果signal == nil,我将if语句只播放背景歌曲。 然后,在我的其他视图控制器中,我将其设置为当它们转回主视图控制器时,信号属性= false。 然后,这首歌将无法播放,一切正常。

对于swift 4:

 func playBackgroundMusic() { let aSound = NSURL(fileURLWithPath: Bundle.main.path(forResource: "music", ofType: "mp3")!) do { audioPlayer = try AVAudioPlayer(contentsOf:aSound as URL) audioPlayer!.numberOfLoops = -1 audioPlayer!.prepareToPlay() audioPlayer!.play() } catch { print("Cannot play the file") } } 

我想你应该尝试AppDelegate.swift文件。 在方法应用程序(….. didFinishLaunchingWithOptions …..){}中定义你的AVAudioPlayer()和.play()