Android Tempo /播放速度变化

时间:2014-03-05 23:10:39

标签: android playback audiotrack

我正在制作一款需要实时更改播放速度/速度的Android应用。我在互联网上搜索并看到了很多解决方案,包括 Tutorials for OpenSL ES for Android How to change audio tempo and pitch individuality using ffmpeg?

由于我对开发和Android很陌生,其中一些只是出于我的缩影。

其中许多例子都讨论Soundpool,但这个api不能用于大文件。

查看API和类后,我发现方法setPlaybackRate(int sampleRateInHz) 在AudioTrack类下。 http://developer.android.com/reference/android/media/AudioTrack.html#setPlaybackRate(int)

然而,在所有这些例子中,网上没有人提到这一点。我错过了什么,可以用吗?

非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

setPlaybackRate()确实可以使用,但它可能不是你想要的。

假设您有一个44100的音频流。您可以使用此功能将播放设置为22050 Hz,这意味着样本将以一半的速率馈送到音频输出,这确实会减慢音乐。缺点是音频的频率也会下降到一半,因为样本以一半的速率馈送。

目前还没有直接的Android API来进行时间延长。这些算法在数学上是非常繁重的,即使你可以用Java编写它们,性能也会很糟糕。

最好的方法是使用JNI在C ++中查找实现,这可能包括像ffmpeg这样的库。

答案 1 :(得分:2)

API 23开始,MediaPlayer可以使用this method设置播放速度。

  

Class MediaPlayer

     

public void setPlaybackParams (PlaybackParams params)在API中添加   等级23

     

使用PlaybackParams设置播放速率。参数参数     PlaybackParams:回放参数。如果是,则抛出IllegalStateException   内部播放器引擎尚未初始化。   如果不支持params,则为IllegalArgumentException。

示例代码:

MediaPlayer mp = ...; //Whatever
float speed = 0.75f;     
mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(speed));