无法播放 iOS 中的 amr 音频文件

Can not play amr audio file in iOS

尝试使用此代码播放 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 {