我已经设法在我的 android 项目中使用 ffmpeg 和 AudioTrack 类播放音频文件。我可以使用 AudioTrack 类的 setRate 方法更改音频的速度。但它也会改变音频的音高,我只想改变音频的速度,但我在网上找不到解决方案。
任何人都可以请帮助我,因为没有对此的支持。
我已经设法在我的 android 项目中使用 ffmpeg 和 AudioTrack 类播放音频文件。我可以使用 AudioTrack 类的 setRate 方法更改音频的速度。但它也会改变音频的音高,我只想改变音频的速度,但我在网上找不到解决方案。
任何人都可以请帮助我,因为没有对此的支持。
您可以在 ffmpeg 1.0 及更高版本中使用atempo 过滤器:
ffmpeg -i input.wav -f:a atempo=1.25 output.wav
atempo
仅接受 0.5 和 2.0 之间的值,但您可以通过链接多个过滤器来绕过限制:
ffmpeg -i input.wav -f:a atempo=2,atempo=1.5 output.wav
解决方案: 我尝试了 SoundTouch 库。我为 android 成功编译了它,但后来我没有使用它的功能,因为我不知道如何使用这个库来加载音频。
但在那之后,我尝试了名为Sonic的库。它基本上用于语音,因为它使用 PSOLA 算法来改变音高和速度。但没关系。
音高和节奏有着非常紧密的联系。您正在尝试做的事情称为“时间拉伸”,并且是一种有点复杂的算法。您可以在网上找到有关它的信息,并且可以在此处找到它的 java 库,以及描述该过程的论文。