【问题标题】:How to play background music with swift 2.0?swift 2.0如何播放背景音乐?
【发布时间】:2015-10-01 08:21:29
【问题描述】:

您好,我是 swift 和 ios 开发的新手。我的代码一直在工作,直到我更新到 Swift 2.0,我使用了 swift 迁移工具,但我仍然不知道如何排序和修复我的代码。请帮忙!

import AVFoundation

var backgroundMusicP: AVAudioPlayer!

func playBackgroundMusic(filename: String) {
    let url = NSBundle.mainBundle().URLForResource(
        filename, withExtension: nil)
    if (url == nil) {
        print("Could not find file: \(filename)")
        return
    }

    var error: NSError?

    do {

        backgroundMusicP = try AVAudioPlayer(contentsOfURL: url!)
    } catch {

        backgroundMusicP == nil
    }
    if backgroundMusicP == nil {
        print("Could not create audio player: \(error)")
        return
    }

    backgroundMusicP.numberOfLoops = -1
    backgroundMusicP.prepareToPlay()
    backgroundMusicP.play()
}

【问题讨论】:

  • 你说的错误是什么?
  • Swift 2.0 引入了新的错误处理系统。下面的 Dharmesh Kheni 回答是正确的。
  • 在升级主要版本和翻译 Swift 代码时阅读 Xcode 发行说明通常是个好主意。 developer.apple.com/library/prerelease/tvos/releasenotes/…
  • 好吧,显然上面的代码确实已经使用了新的错误处理模型和do-try-catch,并且它确实可以用Swift 2编译。但是存在逻辑错误,例如backgroundMusicP == nil
  • 感谢您的回复,我将在今天晚些时候尝试以下代码。

标签: ios xcode swift swift2


【解决方案1】:

swift 2.0 的更新功能:

import AVFoundation

var backgroundMusicPlayer = AVAudioPlayer()

func playBackgroundMusic(filename: String) {
    let url = NSBundle.mainBundle().URLForResource(filename, withExtension: nil)
    guard let newURL = url else {
        print("Could not find file: \(filename)")
        return
    }
    do {
        backgroundMusicPlayer = try AVAudioPlayer(contentsOfURL: newURL)
        backgroundMusicPlayer.numberOfLoops = -1
        backgroundMusicPlayer.prepareToPlay()
        backgroundMusicPlayer.play()
    } catch let error as NSError {
        print(error.description)
    }
}

这样使用:

playBackgroundMusic("yourFileName.mp3")

【讨论】:

  • 上面写着(文件名,带扩展名:nil),我应该改变它吗?此外,在它说 playBackgroundMusic 的地方,我添加了我的文件名,但现在 Xcode 想要一个逗号。然后它说它应该被删除。它不断循环给我这些错误。
  • @spadaroapps,您不应更改上述任何代码;只需使用上述功能。
【解决方案2】:

您也可以启用会话以实现后台播放功能。

func enableBackgroundPlaying(_ enable: Bool) throws {
    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        do {
            try AVAudioSession.sharedInstance().setActive(enable)
        } catch {
            throw error
        }
    } catch {
        throw error
    }
}

【讨论】:

    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    相关资源
    最近更新 更多