【问题标题】:iOS+Swift: Why is music not played on iPad?iOS+Swift:为什么音乐不能在 iPad 上播放?
【发布时间】:2016-08-16 10:37:06
【问题描述】:

我正在开发 SpriteKit 游戏并尝试播放循环音乐文件。这是我的代码:

var musicPlayer = AVAudioPlayer()

override func didMoveToView(view: SKView) {
    self.playBackgroundMusic("gravity")
}

private func playBackgroundMusic(filename: String) {
    do {
        let url = NSBundle.mainBundle().URLForResource(filename, withExtension: "m4a")
        print(url)
        self.musicPlayer = try AVAudioPlayer(contentsOfURL: url!)
        self.musicPlayer.numberOfLoops = -1
        self.musicPlayer.prepareToPlay()
        self.musicPlayer.play()
    } catch let error as NSError {
        print("ERROR: \(error.description)")
    }
}

这在我的 iPhone 4S 上测试时有效,但在 iPad Air 上无效(只是没有音乐播放,但适用于 Youtube 等应用程序)。奇怪的是,当我将我的蓝牙耳机连接到 iPad 时,它在用耳机收听时工作。

我的 iOS 版本都是 9.3.4,适用于 iPad Air 和 iPhone 4S。

有什么想法吗?这是苹果方面的错误吗?

【问题讨论】:

  • 我会检查播放器上的channelAssignments 以确定正在用于输出的通道。
  • 好的,musicPlayer.channelAssignments 返回 nil,但 musicPlayer.numberOfChannels 返回 1(在 iPhone 4S 和 iPad Air 上)。还有什么想法吗?
  • 我找到了解决方案(cp. answer)。感谢您的帮助!
  • 很高兴你找到它!
  • 我也是 ;-) - 谢谢。

标签: ios swift sprite-kit swift2 avaudioplayer


【解决方案1】:

好的,我找到了解决办法。在使用 AVAudioPlayer 播放任何音频之前尝试调用以下代码:

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker)
} catch let error as NSError {
    print("ERROR: \(error.description)")
}

希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    相关资源
    最近更新 更多