ios - 即使使用 AVAudioTimePitchAlgorithmSpectral,使用 AVPlayer 慢放的音质也不够好
问题描述
在 iOS 中,可以通过设置来更改播放速率AVPlayer.rate
。当 AVPlayback 速率设置为 0.5 时,播放变慢。
默认情况下,以 0.5 的播放速率播放的音质很糟糕。要提高质量,您需要设置AVPlayerItem.audioTimePitchAlgorithm
.
根据 API 文档,设置AVPlayerItem.audioTimePitchAlgorithm
为AVAudioTimePitchAlgorithmSpectral
使质量最高。
快速代码是:
AVPlayerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithm.spectral // AVAudioTimePitchAlgorithmSpectral
AVAudioTimePitchAlgorithmSpectral
比默认质量提高质量。但是音质AVAudioTimePitchAlgorithmSpectral
不够好。声音还在回荡,听着很紧张。
在Apple的Podcast App中,当我将播放速度设置为1/2时,播放变慢,音质非常高,完全没有回声。
我希望我的应用程序提供与 Apple 的 Podcast 应用程序相同的质量。
是否有 iOS API 可以提高音质远高于AVAudioTimePitchAlgorithmSpectral
?
如果没有,为什么 Apple 不提供它,即使他们在自己的 Podcast 应用程序中使用它?
还是我应该使用第三方库?是否有免费或低价以及许多人用来改变播放速度的好图书馆?
解决方案
我一直在寻找并尝试学习 AudioKit 和 Audio Unit,甚至考虑购买第三方时间拉伸音频处理库来解决过去 3 周播放缓慢的质量问题。
现在终于找到了一个超级简单的解决方案。
AVPlayer 可以通过设置AVPlayerItem.audioTimePitchAlgorithm
为AVAudioTimePitchAlgorithm.timeDomain
而不是AVAudioTimePitchAlgorithm.spectral
.
文档说:
timeDomain
是一种中等质量的音高算法,计算量较小。适合语音。
这种方式spectral
适用于音乐。timeDomain
适合语音。
这就是我的应用程序使用的语音文件被回显的原因。
这就是为什么苹果的 Podcasts App 的减速音频质量非常高的原因。它还必须使用这种时域算法。
这就是为什么似乎为音乐使用而开发的 AudioKit 播放质量差的语音音频的原因。
推荐阅读
- git - Git merge is successful but one file is not being merged
- c# - C# - Deserialize Json object having Multiple Objects
- ruby-on-rails - 如何使用 blazer ruby gem 连接到启用 ssl 的云 sql 实例
- java - Cucumber 6.8.1 使用 IntelliJ 的未定义场景
- asp.net-mvc - 用户可以从另一个站点登录到 mediawiki
- go - 如何将函数附加到结构
- c# - Xamarin.Forms - Xamarin.Essentials 命名空间缺少 MediaPicker 或 FilePicker 类
- streamlit - 当我折叠/展开标题时,如何防止 Streamlit 小部件被重置
- laravel - 雄辩的关系:从根模型访问所有孙子资源
- python - ValueError:层序 16 的输入 0 与层不兼容:输入形状的预期轴 -1 具有值 24 但