无法播放 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)
}
}
我绝对确定:
- 收到的数据不为零
- 我可以看到 amr 文件的正确持续时间
- amr 文件包含一些声音
- 我没有收到任何错误
- 我什么都没听到
发生了什么事,如何解决?
问题在于
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 {
尝试使用此代码播放 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)
}
}
我绝对确定:
- 收到的数据不为零
- 我可以看到 amr 文件的正确持续时间
- amr 文件包含一些声音
- 我没有收到任何错误
- 我什么都没听到
发生了什么事,如何解决?
问题在于
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 {