AVAudioPlayer对象声音不玩 - 斯威夫特 [英] AVAudioPlayer Object Sound Not Playing - Swift

查看:233
本文介绍了AVAudioPlayer对象声音不玩 - 斯威夫特的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经为了起到隔音创建的对象类AVAudioPlayer的如下:

 类MusicAudio:NSObject的,AVAudioPlayerDelegate {    VAR bassAudio:AVAudioPlayer! = AVAudioPlayer()    重载的init(){
        super.init()
        让bassAudioPath = NSBundle.mainBundle()pathForResource(原始,ofType:MP3)。        让fileURL = NSURL(fileURLWithPath:bassAudioPath)
        bassAudio = AVAudioPlayer(contentsOfURL:fileURL,错误:无)
        bassAudio.currentTime = 0
        bassAudio.volume = 1.0
        bassAudio.delegate =自
    }    FUNC adjustAudioLayerState(volumeOn:BOOL,层:AudioLayerState){        如果层== {AudioLayerState.Bass
            self.bassAudio。prepareToPlay()
            self.bassAudio.play()
        }
    }
}

要播放的声音,我通过调用类的:

  @IBAction FUNC testSound(){
    VAR的声音:MusicAudio = MusicAudio()
    sound.adjustAudioLayerState(真,层:AudioLayerState.Bass)}

不过我没有得到任何音频播放,任何人都可以当场与我的执行有问题?

编辑:rdelmar答案后

  VAR bassAudio:AVAudioPlayer! = AVAudioPlayer()类MusicAudio:NSObject的,AVAudioPlayerDelegate {    重载的init(){
        super.init()
        让bassAudioPath = NSBundle.mainBundle()pathForResource(原始,ofType:MP3)。        让fileURL = NSURL(fileURLWithPath:bassAudioPath)
        bassAudio = AVAudioPlayer(contentsOfURL:fileURL,错误:无)
        bassAudio.currentTime = 0
        bassAudio.volume = 1.0
        bassAudio.delegate =自
    }    FUNC adjustAudioLayerState(volumeOn:BOOL,层:AudioLayerState){        如果层== {AudioLayerState.Bass
            self.bassAudio。prepareToPlay()
            self.bassAudio.play()
        }
    }
}


解决方案

由于您的MusicAudio类被释放你没有得到任何声音。你需要做的VAR,声音,一个属性,而不是一个局部变量。

 类的ViewController:UIViewController的{    VAR声音= MusicAudio()    @IBAction FUNC testSound(){
        self.sound.adjustAudioLayerState(真,层:AudioLayerState.Bass)
    }}

I have created an object class of AVAudioPlayer below in order to play a noise:

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

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. You need to make the var, sound, a property, not a local variable.

class ViewController: UIViewController {

    var sound = MusicAudio()

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

}

这篇关于AVAudioPlayer对象声音不玩 - 斯威夫特的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆