Control de velocidad de MediaPlayer en Android

Estoy desarrollando una aplicación para jugadores y estoy usando MediaPlayer para eso.

Ahora, quiero cambiar la velocidad de la pista de reproducción.

He visto tantas aplicaciones con esta funcionalidad. ¿Cómo puedo hacer esto?

MediaPlayer no proporciona esta característica, pero SoundPool tiene esta funcionalidad. La clase SoundPool tiene un método llamado setRate (int streamID, float rate) . Si está interesado en la API, eche un vistazo aquí .

Este fragmento funcionará.

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

Comenzando API 23 , MediaPlayer puede establecer la velocidad de reproducción usando este método .

Clase MediaPlayer

public void setPlaybackParams (PlaybackParams params) Agregado en el nivel API 23

Establece la velocidad de reproducción usando PlaybackParams. Parámetros params PlaybackParams: los parámetros de reproducción. Lanza IllegalStateException si el motor del reproductor interno no se ha inicializado. IllegalArgumentException si params no es compatible.

Código de muestra:

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

Para API <23 , consulte la respuesta de Vipul Shah anterior (o más abajo).

Soundpool solo admite archivos de efectos de sonido relativamente pequeños que se pueden precargar. Obtendrá desbordamientos de stack con cualquier pista de música útil.

Ahora podrías usar

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

para API 23 en adelante

Aquí hay una publicación en mi blog con más detalles

La clase MediaPlayer no proporciona esta funcionalidad. En su lugar, use la clase SoundPool . Tiene un método llamado setRate (int streamID, float rate) . Lea esto para más información. Aquí hay un código de muestra para que trabajes con él.

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