Swift 3:AVAudioPlayer没有播放声音

时间:2017-10-09 11:16:19

标签: swift avplayer

我的音频播放器中有一个结构:

struct MT_Audio {

    func playAudio(_ fileName:String, _ fileExtension:String,  _ atVolume:Float) {
        var audioPlayer = AVAudioPlayer()
        if let  audioPath = Bundle.main.path(forResource: fileName, ofType: fileExtension) {
            let audioURL = URL(string:audioPath)
            do {
                audioPlayer = try AVAudioPlayer(contentsOf: audioURL!)
                audioPlayer.volume = atVolume
                audioPlayer.prepareToPlay()
                audioPlayer.play()
            } catch {
                print(error)
            }
        }
    }
}

//I'm calling it in viewDidLoad like this: 

    guard let fileURL = Bundle.main.url(forResource:"heartbeat-01a", withExtension: "mp3") 
         else {
                print("can't find file")
                return
            }

       let myAudioPlayer = MT_Audio() //<--RESOLVED THE ISSUE BY MAKING THIS A PROPERTY OF THE VIEWCONTROLLER
       myAudioPlayer.playAudio("heartbeat-01a", "mp3", 1.0)

因为它没有在防护装置上崩溃和燃烧,所以我知道文件存在。我在尝试之后也提出了一个断点,我正在接触音频播放器。当我转到实际文件并在Xcode中单击它时,它会播放。这在sim和设备上都失败了。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:2)

您的audioPlayer似乎只存储在playAudio功能中。

尝试将audioPlayer作为变量保留在您的类中,如下所示:

struct MT_Audio {

    var audioPlayer: AVAudioPlayer?

    mutating func playAudio(_ fileName:String, _ fileExtension:String,  _ atVolume:Float) {

        // is now member of your struct -> var audioPlayer = AVAudioPlayer()
        if let  audioPath = Bundle.main.path(forResource: fileName, ofType: fileExtension) {
            let audioURL = URL(string:audioPath)
            do {
                let audioPlayer = try AVAudioPlayer(contentsOf: audioURL!)
                audioPlayer.volume = atVolume
                audioPlayer.prepareToPlay()
                audioPlayer.play()
            } catch {
                print(error)
            }
        }
    }
}