我正在尝试使用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
,但没有播放音频。为了播放音频,我可以缺少哪些代码?
答案 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
。