Swift 3: AVAudioPlayer 不播放声音

Swift 3: AVAudioPlayer not playing sound

我有一个结构,里面有我的音频播放器:

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 卡和设备上都失败了。任何帮助,将不胜感激。

看起来你的 audioPlayer 只存储在你的 playAudio 函数中。

尝试将 audioPlayer 作为变量保存在 class 中,如下所示:

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