user1546276
user1546276

Reputation: 31

How can I setRate for Android MediaPlayer?

How can I implement

setRate(float f) 

for my Android MediaPlayer, and secondly is it posible?

Upvotes: 3

Views: 7086

Answers (3)

arlomedia
arlomedia

Reputation: 9071

Android 6.0 adds PlaybackParams for MediaPlayer, so you can now do this:

String recordingPath = recordingDirectory + File.separator + "music.mp3";
MediaPlayer audioPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse(recordingPath));
audioPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
PlaybackParams params = new PlaybackParams();
params.setSpeed(0.75f);
audioPlayer.setPlaybackParams(params);
audioPlayer.start();

I don't have an Android 6 device yet, but this works for me in the emulator.

Upvotes: 0

Erol
Erol

Reputation: 6526

I believe this is the function you are looking for.

This sets the sampling rate at which the audio data will be consumed and played back, not the original sampling rate of the content. Setting it to half the sample rate of the content will cause the playback to last twice as long, but will also result in a negative pitch shift. The valid sample rate range is from 1Hz to twice the value returned by getNativeOutputSampleRate(int).

If you want to play mp3 directly using AudioTrack, you can either have a look at this example or convert your mp3 file to wav format, which enables AudioTrack to use it without hassle. This is the tradeoff you should account for if you want to adjust the playback rate easily.

Upvotes: 4

mattdonders
mattdonders

Reputation: 1356

Based on the Android developer documentation, you may have to use SoundPool instead.

Android Developer: Media SoundPool-setRate

public final void setRate (int streamID, float rate)

Change playback rate. The playback rate allows the application to vary the playback rate (pitch) of the sound. A value of 1.0 means playback at the original frequency. A value of 2.0 means playback twice as fast, and a value of 0.5 means playback at half speed. If the stream does not exist, it will have no effect.

Parameters

streamID: a streamID returned by the play() function

rate: playback rate (1.0 = normal playback, range 0.5 to 2.0)

Upvotes: -2

Related Questions