简体   繁体   English

AVAudioPlayer对象声音未播放-迅捷

[英]AVAudioPlayer Object Sound Not Playing - Swift

I have created an object class of AVAudioPlayer below in order to play a noise: 我在下面创建了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()
        }
    }
}

To play the noise, I call the class via: 要播放声音,我通过以下方式致电全班:

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

}

However I am not getting any audio played back, can anyone spot a problem with my implementation? 但是我没有播放任何音频,有人可以发现我的实现有问题吗?

Edit: After rdelmar answer 编辑: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()
        }
    }
}

You don't get any sound because your MusicAudio class is being deallocated. 您没有听到任何声音,因为MusicAudio类正在被释放。 You need to make the var, sound, a property, not a local variable. 您需要创建var,sound,属性,而不是局部变量。

class ViewController: UIViewController {

    var sound = MusicAudio()

    @IBAction func testSound() {
        self.sound.adjustAudioLayerState(true, layer: AudioLayerState.Bass)
    }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM