私はプレーヤーアプリを開発していて、そのために使用MediaPlayer
しています。
ここで、再生トラックの速度を変更したいと思います。
この機能を備えたアプリをたくさん見てきました。これどうやってするの?
私はプレーヤーアプリを開発していて、そのために使用MediaPlayer
しています。
ここで、再生トラックの速度を変更したいと思います。
この機能を備えたアプリをたくさん見てきました。これどうやってするの?
API 23以降、MediaPlayerはこのメソッドを使用して再生速度を設定できます。
クラスMediaPlayer
public void setPlaybackParams (PlaybackParams params)
APIレベル23で追加PlayplayParamsを使用して再生速度を設定します。パラメータparamsPlaybackParams:再生パラメータ。内部プレーヤーエンジンが初期化されていない場合、IllegalStateExceptionをスローします。paramsがサポートされていない場合はIllegalArgumentException。
サンプルコード:
MediaPlayer mp = ...; //Whatever
float speed = 0.75f;
mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(speed));
API <23については、上記(または下記)のVipulShahの回答を参照してください。
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);
}
});
サウンドプールは、プリロードできる比較的小さな効果音ファイルのみをサポートします。有用な長さの音楽トラックでヒープオーバーフローが発生します。
今、あなたは使用することができます
mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(speed))
API 23以降の場合!
クラスはこのMediaPlayer
機能を提供しません。代わりにSoundPool
クラスを使用してください。と呼ばれるメソッドがありsetRate (int streamID, float rate)
ます。詳細については、これをお読みください。これは、それを操作するためのサンプルコードです。
ここで言及したフローによると、 次のコードはandroid API 23(Android 6.0 Marshmallow)用です。
PlaybackParams playbackParams = new PlaybackParams();
playbackParams.setSpeed(2);
playbackParams.setPitch(1);
playbackParams.setAudioFallbackMode(
PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT);
mMediaPlayer.setPlaybackParams(playbackParams);
AndroidのExoPlayerによる速度制御
//exoPlayer.setPlaybackParameters(PlaybackParameters(//speed in float))
//EXAMPLE->
exoPlayer.setPlaybackParameters(PlaybackParameters(1.5f))