Управление скоростью MediaPlayer в Android

Я разрабатываю приложение для игрока, и я использую MediaPlayer для этого.

Теперь я хочу изменить скорость воспроизведения трека.

Я видел так много приложений с такой функциональностью. Как я могу это сделать?

7 ответов

Решение

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

Начиная с API 23, MediaPlayer может устанавливать скорость воспроизведения, используя этот метод.

Класс MediaPlayer

public void setPlaybackParams (PlaybackParams params) Добавлено в API уровень 23

Устанавливает скорость воспроизведения с помощью PlaybackParams. Параметры params PlaybackParams: параметры воспроизведения. Выдает IllegalStateException, если внутренний движок игрока не был инициализирован. IllegalArgumentException, если params не поддерживается.

Образец кода:

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

Для API <23, обратитесь к ответу Випул Шаха выше (или ниже).

Soundpool поддерживает только относительно небольшие файлы звуковых эффектов, которые можно предварительно загрузить. Вы получите переполнение кучи с любой полезной музыкальной дорожкой.

Теперь вы можете использовать

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

для API 23 и выше!

Вот пост в моем блоге с более подробной информацией

Управление скоростью с помощью ExoPlayer в Android

      //exoPlayer.setPlaybackParameters(PlaybackParameters(//speed in float))
//EXAMPLE->
exoPlayer.setPlaybackParameters(PlaybackParameters(1.5f))
PlaybackParams playbackParams = new PlaybackParams();
playbackParams.setSpeed(2);
playbackParams.setPitch(1);
playbackParams.setAudioFallbackMode(
    PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT);
mMediaPlayer.setPlaybackParams(playbackParams);

MediaPlayer класс не дает этой функциональности. Вместо этого используйте SoundPool учебный класс. У него есть метод setRate (int streamID, float rate), Прочитайте это для получения дополнительной информации. Вот пример кода для работы с ним.

Другие вопросы по тегам