无法使用AVAudioPlayer播放音频

时间:2015-10-09 17:24:39

标签: ios swift 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,但没有播放音频。为了播放音频,我可以缺少哪些代码?

1 个答案:

答案 0 :(得分:1)

在发出声音之前,您的本地audioPlayer变量正在发布。

如果您为播放器添加属性(实例变量)并使用该属性,播放器将有机会在取消分配之前播放声音。

在课堂上,创建一个像

这样的属性
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