首页 文章

AVAudioPlayer 对象声音没有播放 - Swift

提问于
浏览
1

我在下面创建了一个 AVAudioPlayer 的对象类来播放噪音:

class MusicAudio: NSObject, AVAudioPlayerDelegate {

    var bassAudio   : AVAudioPlayer! = AVAudioPlayer()

    override init() {
        super.init()
        let bassAudioPath       = NSBundle.mainBundle().pathForResource("Raw", ofType:"mp3")

        let fileURL = NSURL(fileURLWithPath: bassAudioPath!)
        bassAudio = AVAudioPlayer(contentsOfURL: fileURL, error: nil)
        bassAudio.currentTime = 0
        bassAudio.volume = 1.0
        bassAudio.delegate = self
    }

    func adjustAudioLayerState(volumeOn:Bool, layer:AudioLayerState) {

        if layer == AudioLayerState.Bass {
            self.bassAudio.prepareToPlay()
            self.bassAudio.play()
        }
    }
}

为了播放噪音,我通过以下方式致电课程:

@IBAction func testSound() {
    var sound:MusicAudio = MusicAudio()
    sound.adjustAudioLayerState(true, layer: AudioLayerState.Bass)

}

但是我没有播放任何音频,有人发现我的实现有问题吗?

编辑:rdelmar 回答后

var bassAudio   : AVAudioPlayer! = AVAudioPlayer()

class MusicAudio: NSObject, AVAudioPlayerDelegate {

    override init() {
        super.init()
        let bassAudioPath       = NSBundle.mainBundle().pathForResource("Raw", ofType:"mp3")

        let fileURL = NSURL(fileURLWithPath: bassAudioPath!)
        bassAudio = AVAudioPlayer(contentsOfURL: fileURL, error: nil)
        bassAudio.currentTime = 0
        bassAudio.volume = 1.0
        bassAudio.delegate = self
    }

    func adjustAudioLayerState(volumeOn:Bool, layer:AudioLayerState) {

        if layer == AudioLayerState.Bass {
            self.bassAudio.prepareToPlay()
            self.bassAudio.play()
        }
    }
}

1 回答

  • 4

    您没有收到任何声音,因为您的 MusicAudio 类正在被释放。你需要制作 var,sound,属性,而不是局部变量。

    class ViewController: UIViewController {
    
        var sound = MusicAudio()
    
        @IBAction func testSound() {
            self.sound.adjustAudioLayerState(true, layer: AudioLayerState.Bass)
        }
    
    }
    

相关问题