Я разрабатываю приложение для проигрывателя, и для этого я использую MediaPlayer
.
Теперь я хочу изменить скорость воспроизведения.
Я видел так много приложений с этой функциональностью. Как я могу это сделать?
Я разрабатываю приложение для проигрывателя, и для этого я использую MediaPlayer
.
Теперь я хочу изменить скорость воспроизведения.
Я видел так много приложений с этой функциональностью. Как я могу это сделать?
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 Параметры воспроизведения: параметры воспроизведения. Выбрасывает исключение IllegalStateException, если внутренний движок игрока не был инициализирован. IllegalArgumentException, если параметры не поддерживаются.
Пример кода:
MediaPlayer mp = ...; //Whatever
float speed = 0.75f;
mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(speed));
Для API < 23, см. ответ Vipul Shah выше (или ниже).
soundpool поддерживает только относительно небольшие файлы звукового эффекта, которые можно предварительно загрузить. Вы получите переполнение кучи любой музыкальной дорожкой полезной длины.
Теперь вы можете использовать
mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(speed)
для API 23 и выше!
Класс MediaPlayer
не дает этой функции. Вместо этого используйте класс SoundPool
. Он имеет метод под названием setRate (int streamID, float rate)
. Прочтите этот для получения дополнительной информации. Ниже приведен пример кода для работы с ним.
PlaybackParams playbackParams = new PlaybackParams();
playbackParams.setSpeed(2);
playbackParams.setPitch(1);
playbackParams.setAudioFallbackMode(
PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT);
mMediaPlayer.setPlaybackParams(playbackParams);