swift - 插入/拔出耳机时 SKAudioNode() 崩溃

标签 swift sprite-kit swift2 avaudioengine skaudionode

我正在使用 SKAudioNode() 在我的游戏中播放背景音乐。我有一个播放/暂停功能,在我插入耳机之前一切正常。根本没有声音,当我调用暂停/播放功能时出现此错误

AVAudioPlayerNode.mm:333: Start: required condition is false: _engine->IsRunning() com.apple.coreaudio.avfaudio', reason: 'required condition is false: _engine->IsRunning()

有人知道这是什么意思吗?

代码:

import SpriteKit

class GameScene: SKScene {

let loop = SKAudioNode(fileNamed: "gameloop.mp3")
let play = SKAction.play()
let pause = SKAction.pause()
var isPlaying = Bool()

override func didMoveToView(view: SKView) {  
    loop.runAction(play)
    isPlaying = true
    self.addChild(loop)
}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    _ = touches.first as UITouch!

    for _ in touches {
        if isPlaying {
            loop.runAction(pause)
            isPlaying = false
        } else {
            loop.runAction(play)
            isPlaying = true
        } 
    }
}
}

最佳答案

我无法修复它,但通过使用 AVAudioPlayer() 我找到了一个很好的解决方法。谢谢大家对我的支持!

import SpriteKit
import AVFoundation

class GameScene: SKScene {    
    var audioPlayer = AVAudioPlayer()  

    override func didMoveToView(view: SKView) {        
        initAudioPlayer("gameloop.mp3")        
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {        
        _ = touches.first as UITouch!
        for _ in touches {
            toggleBackgroundMusic()            
        }        
    }

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

    func toggleBackgroundMusic() {        
        if audioPlayer.playing {
            audioPlayer.pause()
        } else {
            audioPlayer.play()
        }        
    }    
}

关于swift - 插入/拔出耳机时 SKAudioNode() 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35662139/

相关文章:

ios - 将 UITabbarController 放入 UINavigationController 中。可能会出现什么问题?

ios - swift 的 Foundation API 可用性问题

SpriteKit 的 Swift CollisionBitMask 值不起作用

swift - 可选地转换为 Type 是 Swift 中的类类型的变量

ios - 多维数组对成员的模糊引用

ios - 我无法在 swift 2.3 中播放保存在目录路径和 AVPlayer 中的视频

Swift Firestore 搜索用户

ios - 如何在 swift 3 中获取当前日期?

Xcode 9 在 Spritekit 的 SKScene 中设置纹理时崩溃

swift - 在分配变量之前使用 guard-let 修改可能为 nil 的表达式