2014-10-10 113 views
1

我已经为了创建了下面的对象类AVAudioPlayer的发挥噪音:AVAudioPlayer目标声音不播放 - 斯威夫特

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

} 

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() 
     } 
    } 
} 

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

但是我没有收到任何音频播放,任何人都可以发现我的执行问题?

编辑: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() 
     } 
    } 
} 

回答

4

后,因为你的MusicAudio类被释放你没有得到任何声音。你需要使var,sound,属性,而不是局部变量。

class ViewController: UIViewController { 

    var sound = MusicAudio() 

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

} 
+0

这已经修复了这个问题,但是在我的头上修复(见编辑问题)似乎杂乱 - 有没有更合适的方法,我应该在斯威夫特做这个还是我多心吗? – Ryan 2014-10-10 17:31:58

+0

@Ryan,我没有看到任何与您最初发布内容不同的内容。更改需要在具有IBAction的视图控制器类中。 – rdelmar 2014-10-10 17:39:43

+0

哦,我明白了!在我的编辑中,我在顶部之外移动了“var bassAudio:AVAudioPlayer!= AVAudioPlayer()”类(它也解决了问题)。我已经实现了你的意思,它现在虽然工作:) – Ryan 2014-10-10 17:50:25