【发布时间】:2012-06-30 21:10:27
【问题描述】:
我已经设法在我的 android 项目中使用 ffmpeg 和 AudioTrack 类播放音频文件。我可以使用 AudioTrack 类的 setRate 方法更改音频的速度。但它也会改变音频的音高,我只想改变音频的速度,但我在网上找不到解决方案。
任何人都可以帮助我,因为没有对此的支持。
【问题讨论】:
标签: android audio android-ndk ffmpeg audiotrack
我已经设法在我的 android 项目中使用 ffmpeg 和 AudioTrack 类播放音频文件。我可以使用 AudioTrack 类的 setRate 方法更改音频的速度。但它也会改变音频的音高,我只想改变音频的速度,但我在网上找不到解决方案。
任何人都可以帮助我,因为没有对此的支持。
【问题讨论】:
标签: android audio android-ndk ffmpeg audiotrack
音高和节奏密切相关。您正在尝试做的事情称为“时间拉伸”,并且是一种有点复杂的算法。您可以在网上找到有关它的信息,可以在 here 找到它的 java 库,以及描述该过程的论文。
【讨论】:
解决方案: 我试过 SoundTouch 库。我为 android 编译成功,但后来我没有使用它的功能,因为我不知道如何使用这个库来加载音频。
但在那之后我尝试了名为 Sonic 的库。它基本上用于语音,因为它使用 PSOLA 算法来改变音高和速度。不过没关系。
【讨论】:
您可以在 ffmpeg 1.0 及更高版本中使用atempo filter:
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
【讨论】:
ffmpeg -i input.wav -filter:a atempo=1.25 output.wav 中那样拼出单词过滤器
ffmpeg -i input.wav -af atempo=1.25 output.wav