我正在创建一个Android应用程序,需要实时更改播放速度/速度.我在互联网上搜索并看到了很多解决方案,包括
Tutorials for OpenSL ES for Android
How to change audio tempo and pitch individuality using ffmpeg?
因为我相对较新的开发和android其中一些只是我的leauge.
其中许多例子都讨论Soundpool,但这个api不能用于大文件.
通过API和类查找后,我发现方法setPlaybackRate(int sampleRateInHz)
在AudioTrack类下.
http://developer.android.com/reference/android/media/AudioTrack.html#setPlaybackRate(int)
然而,在所有这些例子中,他们都没有提到这一点.我错过了什么,可以用吗?
任何帮助深表感谢
解决方法:
确实可以使用setPlaybackRate(),但它可能不是你想要的.
假设您有一个44100的音频流.您可以使用此功能将播放设置为22050 Hz,这意味着样本将以一半的速率馈送到音频输出,这确实会减慢音乐速度.缺点是音频的频率也会下降到一半,因为样本以一半的速率馈送.
目前还没有直接的Android API来进行时间延长.这些算法在数学上是非常繁重的,即使你可以用Java编写它们,性能也会很糟糕.
最好的方法是使用JNI在C中查找实现,这可能包括像ffmpeg这样的库.