ios - 无法在 iOS 中播放 amr 音频文件

标签 ios swift avaudioplayer amr

尝试使用此代码播放 AMR 音频文件:

    var player: AVAudioPlayer? = nil
    WebService.shared.download(self.dataSource.object(at: indexPath)) { data in
        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            try AVAudioSession.sharedInstance().setActive(true)

            player = try AVAudioPlayer(data: data, fileTypeHint: AVFileType.amr.rawValue)
            guard let player = player else { return }

            print("Going to play: \(player.duration) seconds...")
            player.volume = 1.0
            player.prepareToPlay()
            player.play()
        } catch {
            print(error.localizedDescription)
        }
    }

我绝对确定:

  1. 收到的数据不为零
  2. 我可以看到 amr 文件的正确持续时间
  3. amr 文件包含一些声音
  4. 我没有收到任何错误
  5. 我什么都没听到

发生了什么事,如何解决?

最佳答案

问题在于

guard let player = player else { return }

您正在用非可选的本地副本替换外部可选的 AVAudioPlayer。您在本地副本上调用 play(),然后当闭包完成时,它超出范围并被删除。

试试这个。

    player = try AVAudioPlayer(data: data, fileTypeHint: AVFileType.amr.rawValue)
    player?.volume = 1.0
    player?.prepareToPlay()
    player?.play()
} catch {

关于ios - 无法在 iOS 中播放 amr 音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46568690/

相关文章:

ios - json数据到文档目录中的plist文件,swift 2.0

ios - 触摸 subview 时如何将其置于最前面?

ios - 如何获取选定的 collectionviewcell 的名称?

ios - 快速播放和停止音乐

ios - 在 iOS 上循环播放一段时间的音频

ios - iOS应用程序如何设置包月?

ios - 如何使 uicollectionview 不使单元格出队?

ios - TraitCollectionDidChange 奇怪的行为

ios - 货币 Swift 的文本字段

iphone - 根据 iPhone/xcode 上按下的按钮播放声音