安卓媒体播放器的速度控制



我正在开发一个播放器应用程序,我正在使用MediaPlayer

现在,我想改变播放曲目的速度。

我见过很多具有此功能的应用程序。我该怎么做?

从API 23开始,MediaPlayer可以使用此方法设置播放速度。

类媒体播放器

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

使用播放参数设置播放速率。参数参数 播放参数:播放参数。抛出非法状态异常,如果 内部播放器引擎尚未初始化。 IllegalArgumentException 如果不支持参数。

示例代码:

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

对于 API <23,请参阅上面(或下面)Vipul Shah 的回答。

MediaPlayer 不提供此功能,但 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 及更高版本!

MediaPlayer 类不提供此功能。请改用 SoundPool 类。它有一个名为 setRate (int streamID, float rate) .阅读此内容以获取更多信息。下面是一个示例代码供您使用它。

Android

中 ExoPlayer 的速度控制

//exoPlayer.setPlaybackParameters(PlaybackParameters(//speed in float))
//EXAMPLE->
exoPlayer.setPlaybackParameters(PlaybackParameters(1.5f))

根据这里提到的流程,以下代码适用于安卓API 23(安卓6.0棉花糖)

PlaybackParams playbackParams = new PlaybackParams();
playbackParams.setSpeed(2);
playbackParams.setPitch(1);
playbackParams.setAudioFallbackMode(
    PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT);
mMediaPlayer.setPlaybackParams(playbackParams);

最新更新