我正在开发一个播放器应用程序,我正在使用MediaPlayer
它。
现在,我想改变播放曲目的速度。
我见过很多具有此功能的应用程序。我怎样才能做到这一点?
从 API 23 开始,MediaPlayer 可以使用此方法设置播放速度。
类媒体播放器
public void setPlaybackParams (PlaybackParams params)
在 API 级别 23 中添加使用 PlaybackParams 设置播放速率。参数 params PlaybackParams:播放参数。如果内部播放器引擎尚未初始化,则引发 IllegalStateException。如果不支持 params,则 IllegalArgumentException。
示例代码:
MediaPlayer mp = ...; //Whatever
float speed = 0.75f;
mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(speed));
对于 API < 23,请参阅上面(或下面)的 Vipul Shah 的回答。
MediaPlayer 不提供此功能,但 SoundPool 具有此功能。SoundPool 类有一个名为setRate (int streamID, float rate)
. 如果您对API 感兴趣,请查看此处。
此代码段将起作用。
float playbackSpeed=1.5f;
SoundPool soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
soundId = soundPool.load(Environment.getExternalStorageDirectory()
+ "/sample.3gp", 1);
AudioManager mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
final float volume = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener()
{
@Override
public void onLoadComplete(SoundPool arg0, int arg1, int arg2)
{
soundPool.play(soundId, volume, volume, 1, 0, playbackSpeed);
}
});
soundpool 只支持比较小的可以预加载的音效文件。您将获得任何有用长度的音乐曲目的堆溢出。
现在你可以使用
mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(speed))
适用于 API 23 及更高版本!
根据我们在这里提到的流程, 以下代码适用于 android API 23 (Android 6.0 Marshmallow)
PlaybackParams playbackParams = new PlaybackParams();
playbackParams.setSpeed(2);
playbackParams.setPitch(1);
playbackParams.setAudioFallbackMode(
PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT);
mMediaPlayer.setPlaybackParams(playbackParams);
在 Android 中通过 ExoPlayer 进行速度控制
//exoPlayer.setPlaybackParameters(PlaybackParameters(//speed in float))
//EXAMPLE->
exoPlayer.setPlaybackParameters(PlaybackParameters(1.5f))