ios - 无法使用 AVAudioPlayer 播放音频

标签 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,但没有播放音频。为了播放音频,我可能缺少什么代码?

最佳答案

您的本地 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)!))

self 在 Swift 中不是必需的。

关于ios - 无法使用 AVAudioPlayer 播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33043973/

相关文章:

iphone - 在音频应用程序中使用诺卡因

c++ - iOS 应用程序在同一内存地址获取 EXC_BAD_ACCESS 但原因不同

ios - 使用 SQLITE 的 Swift 应用程序在更新数据库后崩溃。 SQLITE 文件未复制到文件/包

arrays - 如何使用另一个类的变量打印一个类的元素?

ios - 在起点画一个矩形,然后按照我的 Action 在 Swift 中结束手势

ios - 使用 NSObject 类中的 AVAudioPlayer 播放音频

iphone - iOS4进入后台播放音频

javascript - React Native - 如何更改 onPress View 的样式和图像

iphone - 如何将初始 View 添加到 Storyboard 文件?

objective-c - UIPickerView 自定义 View 不可视化