- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 iOS 中,可以通过设置 AVPlayer.rate
来改变播放速率。当AVPlayback rate设置为0.5时,播放变慢。
默认情况下,0.5 播放速率播放的音质很糟糕。要提高质量,您需要设置 AVPlayerItem.audioTimePitchAlgorithm
。
根据API文档,将AVPlayerItem.audioTimePitchAlgorithm
设置为AVAudioTimePitchAlgorithmSpectral
可使音质最高。
快速代码是:
AVPlayerItem.audioTimePitchAlgorithm = AVAudioTimePitchAlgorithm.spectral // AVAudioTimePitchAlgorithmSpectral
AVAudioTimePitchAlgorithmSpectral
比默认质量提高了质量。但是 AVAudioTimePitchAlgorithmSpectral
的音质不够好。声音还在回荡,听着有压力。
在Apple的Podcast App中,当我将播放速度设置为1/2时,播放变慢,音质非常高,完全没有回声。
我希望我的应用程序提供与 Apple 的 Podcast 应用程序相同的质量。
是否有比 AVAudioTimePitchAlgorithmSpectral
更高的 iOS API 来提高音质?
如果没有,为什么 Apple 不提供它,即使他们在自己的 Podcast 应用程序中使用它?
还是应该使用第三方库?是否有很多人用来改变播放速度的免费或低价的好库?
最佳答案
我一直在寻找和尝试学习 AudioKit 和 Audio Unit,甚至考虑购买第三方时间拉伸(stretch)音频处理库来解决过去 3 周播放缓慢的质量问题。
现在我终于找到了一个 super 简单的解决方案。
AVPlayer 可以通过设置 AVPlayerItem.audioTimePitchAlgorithm
来降低质量非常好的音频 到 AVAudioTimePitchAlgorithm.timeDomain
而不是 AVAudioTimePitchAlgorithm.spectral
。
文档说:
timeDomain
is a modest quality pitch algorithm that is less computationally intensive. Suitable for voice.
这意味着 spectral
适用于音乐。 timeDomain
适用于语音。
这就是我的应用程序使用的语音文件被回显的原因。
这就是为什么 Apple 的播客应用程序的慢速音频质量非常高。它也必须使用这种时域算法。
这就是为什么似乎是为音乐用途而开发的 AudioKit 播放质量很差的语音音频的原因。
关于ios - 即使使用AVAudioTimePitchAlgorithmSpectral,使用AVPlayer慢速播放的音质也不够好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52462881/
我是一名优秀的程序员,十分优秀!