Управление скоростью 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)
, Прочитайте это для получения дополнительной информации. Вот пример кода для работы с ним.