无法使用 AVAudioPlayer 播放音频

Unable to Play Audio Using AVAudioPlayer

我正在尝试使用 AVAudioPlayer 播放音频文件。以前,我能够使用代码成功播放音频:

// Play the audio file
var soundID: SystemSoundID = 0
let mainBundle: CFBundleRef = CFBundleGetMainBundle()
// Get the audio reference
if let ref: CFURLRef = CFBundleCopyResourceURL(mainBundle, filename, Globals.SOUND_TYPE, nil) {
    // Reference found, play audio
    AudioServicesCreateSystemSoundID(ref, &soundID)
    AudioServicesPlaySystemSound(soundID)
}

但是应用程序中的一个新要求是我需要能够以一定的音量播放音频。 AudioServicesPlaySystemSound 无法提供该功能。所以现在我有以下代码:

do {
    let audioPlayer =  try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(filename, ofType: Globals.SOUND_TYPE)!))

    audioPlayer.volume = volume
    audioPlayer.play()
    print("play audio")

} catch {
    print("Error")
}

我正在播放音频 print 语句,但没有播放音频。我什至硬编码 audioPlayer.volume = 1.0,但没有播放音频。为了播放音频,我可能缺少什么代码?

您的本地 audioPlayer 变量在播放声音之前被释放。

如果您为播放器添加 属性(实例变量)并使用它,播放器将有机会在被释放之前播放声音。

在你的 class 中,创建一个 属性 赞

var audioPlayer: AVAudioPlayer?

然后,而不是

let audioPlayer =  try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(filename, ofType: Globals.SOUND_TYPE)!))

使用对 属性

的引用
self.audioPlayer =  try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(filename, ofType: Globals.SOUND_TYPE)!))

其中 Swift 中不需要 self