我正在创建一个需要实时更改播放速率/速度的Android应用程序。我已经在互联网上搜索了很多,并看到了许多解决方案,包括OpenSL ES for Android 教程如何使用 ffmpeg 更改音频速度和音高个性化?
由于我对开发和Android相对较新,因此其中一些根本超出了我的选择范围。
其中许多示例都谈到了 Soundpool,但此 API 不适用于大文件。
在浏览了API和类之后,我找到了方法setPlaybackRate(int sampleRateInHz)在音轨类下。http://developer.android.com/reference/android/media/AudioTrack.html#setPlaybackRate(整型)
然而,在所有这些在线示例中,他们都没有提到这一点。我错过了什么,可以使用吗?
任何帮助都非常感谢
从API 23开始,MediaPlayer可以使用此方法设置播放速度。
类媒体播放器
public void setPlaybackParams (PlaybackParams params)
在 API 中添加 23级使用播放参数设置播放速率。参数参数 播放参数:播放参数。抛出非法状态异常,如果 内部播放器引擎尚未初始化。 IllegalArgumentException 如果不支持参数。
示例代码:
MediaPlayer mp = ...; //Whatever
float speed = 0.75f;
mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(speed));
setPlaybackRate()
确实可以使用,但可能不是您要找的。
假设您有一个 44100 的音频流。您可以使用此功能将播放速率设置为 22050 Hz,这意味着样本将以一半的速率馈送到音频输出,并且确实会减慢音乐速度。缺点是音频的频率也会下降到一半,因为样本以一半的速率馈送。
目前没有直接的Android API来延长时间。这些算法在数学方面非常繁重,即使你可以用Java编写它们,性能也会很糟糕。
最好的方法是使用 JNI 在C++中寻找实现,这可能包括像 ffmpeg 这样的库。