【问题标题】:Can't play file from documents in AVAudioPlayer无法从 AVAudioPlayer 中的文档播放文件
【发布时间】:2016-11-04 06:33:29
【问题描述】:

我在应用程序的文档文件夹中有一个文件,我想播放它。

if NSFileManager.defaultManager().fileExistsAtPath(pathString) {
    let url = NSURL(fileURLWithPath:pathString, isDirectory: false)
    do {
        let player = try AVAudioPlayer(contentsOfURL:url)
        player.prepareToPlay()
        player.play()
    }
    catch let error as NSException {
        print(error)
    }
    catch {}
}

文件系统上有一个文件,我检查了它的存在。 do 块中的所有行都被执行。没有异常也没有错误,仍然没有播放声音。有哪些可能的问题,我该如何解决?

【问题讨论】:

  • 代码的唯一问题是应该全局设置的audioPlayer!!!

标签: ios swift2 avaudioplayer nsfilemanager


【解决方案1】:

您应该将 audioPlayer 设为全局实例变量。此代码将在调用 .play() 后立即释放它

class ViewController: UIViewController {

    var audioPlayer = AVAudioPlayer()

    override func viewDidLoad() {
        super.viewDidLoad()

        if NSFileManager.defaultManager().fileExistsAtPath(pathString){
        let url = NSURL(fileURLWithPath:pathString, isDirectory: false)
        AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
        AVAudioSession.sharedInstance().setActive(true, error: nil)

        var error:NSError?
        audioPlayer = AVAudioPlayer(contentsOfURL: url, error: &error)
        audioPlayer.prepareToPlay()
        audioPlayer.play()
    }
}
}

【讨论】:

  • 还不行!你知道如何理解问题是什么吗?或者如何调试?
  • 您确定将audioPlayer 更改为全局吗?它应该像这样工作......
  • 顺便说一句,你必须学习和理解局部和全局变量,以及 Swift 中的内存管理......祝你好运!
  • 在这个sn-p中,你不是创建了两次音频播放器吗?一次是在视图实例化时,第二次是在视图调用 viewDidLoad 时。如果是这样,你将如何做到这一点,以便它只被实例化一次?
  • @AlvinfromDiaspar 尝试写 var audioPlayer : AVAudioPlayer! 而不是 'var audioPlayer = AVAudioPlayer()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多