Android中MediaPlayer的速度控制

时间:2012-06-01 12:06:47

标签: android

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

现在,我想改变比赛的速度。

我见过很多具有此功能的应用。我怎么能这样做?

7 个答案:

答案 0 :(得分:31)

从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));

对于API< 23 ,请参阅上面(或下面)的Vipul Shah's answer

答案 1 :(得分:15)

MediaPlayer不提供此功能,但SoundPool具有此功能。 SoundPool类有一个名为setRate (int streamID, float rate)的方法。如果您对API have a look here感兴趣。

此代码段可以使用。

 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);
     }
 });

答案 2 :(得分:15)

soundpool仅支持可预加载的相对较小的音效文件。你将获得任何有用的音乐曲目堆溢出。

答案 3 :(得分:4)

现在你可以使用

mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(speed)

用于API 23及更高版本!

这是post on my blog,其中包含更多详情

答案 4 :(得分:1)

MediaPlayer类不提供此功能。而是使用SoundPool类。它有一个名为setRate (int streamID, float rate)的方法。请阅读this以获取更多信息。这是sample code,您可以使用它。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

Android 中 ExoPlayer 的速度控制

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