Управление скоростью MediaPlayer в Android
Я разрабатываю приложение для проигрывателя, и для этого я использую MediaPlayer
.
Теперь я хочу изменить скорость воспроизведения.
Я видел так много приложений с этой функциональностью. Как я могу это сделать?
Ответы
Ответ 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);