Управление скоростью MediaPlayer в Android - программирование
Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Класс MediaPlayer

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

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

Пример кода:

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

Для API < 23, см. ответ Vipul Shah выше (или ниже).

Ответ 3

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

Ответ 4

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

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

для API 23 и выше!

Ответ 5

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

Ответ 6

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