iOS+Swift:为啥音乐不能在 iPad 上播放?

Posted

技术标签:

【中文标题】iOS+Swift:为啥音乐不能在 iPad 上播放?【英文标题】: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)。感谢您的帮助! 很高兴你找到它! 我也是 ;-) - 谢谢。 【参考方案1】:

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

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

希望这对某人有所帮助。

【讨论】:

以上是关于iOS+Swift:为啥音乐不能在 iPad 上播放?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 card.io 不能在 iPad Air 上运行?

为啥 iPad 不能渲染“离线”情节而 iPhone 可以?

Swift:为啥我的 iOS 不能扫描其他蓝牙设备

为啥我不能在我的 Swift iOS 应用程序中使用 CIFilter 将我的图像反转回原始图像

为啥音量不跟随我的 iOS 应用程序中的硬件控制?

当我在 Swift 中从音乐库中选择歌曲时,为啥我的应用程序会崩溃?