我的背景音乐播放了两次(同时)

Posted

技术标签:

【中文标题】我的背景音乐播放了两次(同时)【英文标题】:My background music gets played twice (at the same time) 【发布时间】:2016-04-05 22:16:43 【问题描述】:

当我启动我的应用程序时,背景音乐开始播放。但是当我按下开始并玩游戏(在另一个视图控制器中)然后返回菜单(第一个视图控制器)时,歌曲再次开始,但同一首歌曲仍在播放(结果 = 同时听到两次)。很烦人。这是我的 viewDidLoad 函数(可能是我的问题所在)。有人可以帮助我(通过解释或提供代码)仅在第一次加载视图时播放音乐吗?

 override func viewDidLoad() 
    super.viewDidLoad()

    // get path of audio file
    let myFilePathString = NSBundle.mainBundle().pathForResource("Background Music Loop (Free to Use)", ofType: "mp3")
    if let myFilePathString = myFilePathString 

        let myFilePathURL = NSURL(fileURLWithPath: myFilePathString)
        do  try myAudioPlayer = AVAudioPlayer(contentsOfURL: myFilePathURL)
            myAudioPlayer.play()
            myAudioPlayer.numberOfLoops = -1
        catch
            print("error")
        
  

【问题讨论】:

当您说“返回菜单”时,您实际上是返回到原始菜单还是创建一个新菜单并转到那个菜单? 我要回到原始菜单(加载时启动音乐的视图控制器) 【参考方案1】:

myAudioPlayer.play 将被简单地再次调用,因为 VC 再次运行 viewDidLoad() 方法。

我的想法:

声明一个变量

var x = false

下一步 - 为您的音频播放器设置播放条件。

if x == false  // your code here 

当从其他 VC 触发 Segue 时,尝试使用 prepareForSegue 方法。

第二个 ViewController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)

    if segue.identifier == "yourIdentifier" 
        let destinationController = segue.destinationViewController as! // Controller Name here
        destinationController.x = true
    

这会将 x 设置为 true,并且音乐不会再次播放。

【讨论】:

谢谢!!但只是一个小问题,因为我仍然是菜鸟(刚开始编程)你的最后一条评论是 // 控制器名称。第一个或第二个控制器的名称?对于 segue 标识符,我有可能必须给它一个名字,或者应该已经有一个名字 哦,它成功了,非常感谢!你也会回答我未来的问题吗? 很高兴听到 :) 如果您仍然需要有关视图控制器名称的帮助:您正在从第二个到第一个进行转换。所以目的地是第一个VC。通过单击 main.Storyboard 中的 segue,您可以在右栏中编辑 segue 标识符。在那里添加它的名称并将相同的名称放入“yourIdentifier”中。希望有帮助!【参考方案2】:

这一切都取决于您想要的功能。

如果您只想在菜单视图控制器在屏幕上播放背景音乐,您可以在视图控制器上设置文件名和播放器变量属性,然后在 viewWillAppear 中执行

Player.play

然后当用户离开页面时,在 viewDidDissappear 函数中停止播放。

如果您希望音乐始终在后台播放,那么可能值得为它创建自己的类并在应用委托上提供 sharedInstance,以便您可以在整个应用程序中管理播放器的单个实例。

【讨论】:

以上是关于我的背景音乐播放了两次(同时)的主要内容,如果未能解决你的问题,请参考以下文章

同时播放背景音乐和音效

如何同时播放音乐和使用语音命令?

FMOD - 同时播放多个声音?

应用播放背景音频不起作用

使用 OpenSL ES Android 同时播放多个音效

在附近的 iOS 设备上同步播放音乐时,音乐没有同时播放(多点连接)