Swift - AVAudioPlayer 不播放声音

Posted

技术标签:

【中文标题】Swift - AVAudioPlayer 不播放声音【英文标题】:Swift - AVAudioPlayer not playing sound 【发布时间】:2016-03-31 09:32:42 【问题描述】:

我有一个名为speeding.mp3 的声音,我正在尝试通过在类的根目录中使用它来创建一个 AVAudioPayer 实例:

let speedingAudioPlayer = try! AVAudioPlayer(contentsOfURL: NSBundle.mainBundle().URLForResource("speeding", withExtension: "mp3")!)

然后,当我运行应用程序时,它会引发错误,但我不知道为什么会这样。 speeding.mp3 文件位于 Build Phases 的 Bundle Resources 下拉列表中,因此它应该可以找到它。如果我尝试在模拟器中打印出 URL 并将其粘贴到 Safari 中,它会像往常一样加载和播放文件。我正在将 AVFoundation 导入到类中,并将框架导入到项目中。

【问题讨论】:

【参考方案1】:

使用这段代码 sn-p 来调试你的错误,

if let URL = NSBundle.mainBundle().URLForResource("speeding", withExtension: "mp3") 
    do 
        let speedingAudioPlayer = try AVAudioPlayer(contentsOfURL: URL)
     catch  let error as NSError 
        print(error.localizedDescription)
    
 else 
    print("No such file exist")

【讨论】:

它只是停在第三行并出现错误说Thread 1: breakpoint 1.2 您能否列出例外情况,具体说明了什么? 它什么也没说,只在运行时发生。 好的,放异常断点并使用调试器看看那里实际发生了什么 好吧,现在除了查看您的代码之外别无他法。您能以某种方式将其放在 Dropbox 或 github 中,以便我可以查看它。【参考方案2】:

我发现另一个问题是将 var 放在类之外,否则它会被电话释放。

AVAudioPlayer Object Sound Not Playing - Swift

【讨论】:

【参考方案3】:
import UIKit
import AVFoundation

class CustomAudioPlayer 
  var audioPlayer : AVAudioPlayer!

  override func viewDidLoad() 
    super.viewDidLoad()
    playSound("sound_file_name")
  

  func playSound(soundName: String)
  
    let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(soundName, ofType: "mp3")!)
    do
        audioPlayer = try AVAudioPlayer(contentsOfURL:alertSound)
        audioPlayer.prepareToPlay()
        audioPlayer.play()
    catch 
        print("Error getting the audio file")
    
  

试试这个代码来播放声音。

【讨论】:

以上是关于Swift - AVAudioPlayer 不播放声音的主要内容,如果未能解决你的问题,请参考以下文章

Swift - AVAudioPlayer 不播放声音

Swift AVAudioPlayer 不播放声音

AVAudioPlayer Swift 3不播放声音[重复]

Swift5 播放 aac 文件 AvAudioPlayer

Swift 3 多个 AVAudioPlayer

如何持续检查 AVAudioplayer 是不是已在 Swift 中播放完毕?