Android节奏/播放速度变化

Android节奏/播放速度变化,android,playback,audiotrack,Android,Playback,Audiotrack,我正在创建一个Android应用程序,它需要实时更改播放速率/速度。我在互联网上搜索过很多解决方案,包括 由于我对开发和安卓系统比较陌生,其中一些完全是我的专长 这些示例中有很多都是关于Soundpool的,但是这个api不适用于大文件 在查看了API和类之后,我找到了方法setPlaybackRate(int sampleRateInHz) 在音轨课下。 然而,在所有这些在线示例中,没有一个提到这一点。我是否遗漏了一些东西,可以使用它 非常感谢任何帮助确实可以使用setPlaybackRa

我正在创建一个Android应用程序,它需要实时更改播放速率/速度。我在互联网上搜索过很多解决方案,包括

由于我对开发和安卓系统比较陌生,其中一些完全是我的专长

这些示例中有很多都是关于Soundpool的,但是这个api不适用于大文件

在查看了API和类之后,我找到了方法setPlaybackRate(int sampleRateInHz) 在音轨课下。

然而,在所有这些在线示例中,没有一个提到这一点。我是否遗漏了一些东西,可以使用它

非常感谢任何帮助

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

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

目前还没有直接的Android API来进行时间拉伸。这些算法在数学方面非常复杂,即使您可以用Java编写它们,性能也会非常糟糕


<>最好的方法是在C++中使用JNI来实现,这可能包括像FFMPEG. 从API 23开始,MediaPlayer可以使用设置播放速度

类媒体播放器

public void setPlaybackParams(PlaybackParams-params)
添加到API中 第23级

使用PlaybackParams设置播放速率。参数参数 播放参数:播放参数。如果发生以下情况,则引发IllegalStateException 内部播放器引擎尚未初始化。 IllegalArgumentException(如果不支持参数)

示例代码:

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

谢谢你的回复,梅勒韦德,我其实不介意音高/频率是变慢还是变高,所以这可能会奏效。我做了更多的研究,发现有几页提到该方法不适用于MP3文件,这是一个大问题,因为它将用于音乐文件。好的,我不知道如何使用JNI或它是什么,但我会看看。谢谢你的帮助,如果你有任何更多的信息,将不胜感激