29

我正在开发一个播放器应用程序,我正在使用MediaPlayer它。

现在,我想改变播放曲目的速度。

我见过很多具有此功能的应用程序。我怎样才能做到这一点?

4

7 回答 7

51

从 API 23 开始,MediaPlayer 可以使用此方法设置播放速度。

类媒体播放器

public void setPlaybackParams (PlaybackParams params)在 API 级别 23 中添加

使用 PlaybackParams 设置播放速率。参数 params PlaybackParams:播放参数。如果内部播放器引擎尚未初始化,则引发 IllegalStateException。如果不支持 params,则 IllegalArgumentException。

示例代码:

MediaPlayer mp = ...; //Whatever
float speed = 0.75f;     
mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(speed));

对于 API < 23,请参阅上面(或下面)的 Vipul Shah 的回答。

于 2016-05-07T22:26:45.517 回答
18

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);
     }
 });
于 2012-06-01T12:26:04.903 回答
16

soundpool 只支持比较小的可以预加载的音效文件。您将获得任何有用长度的音乐曲目的堆溢出。

于 2012-10-22T00:45:02.687 回答
8

现在你可以使用

mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(speed))

适用于 API 23 及更高版本!

于 2017-07-04T21:31:36.657 回答
1

该类MediaPlayer不提供此功能。而是使用SoundPool类。它有一个名为setRate (int streamID, float rate). 阅读内容以获取更多信息。这是一个示例代码供您使用。

于 2012-06-01T12:12:21.533 回答
1

根据我们在这里提到的流程, 以下代码适用于 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);
于 2018-04-20T11:15:47.380 回答
0

在 Android 中通过 ExoPlayer 进行速度控制

//exoPlayer.setPlaybackParameters(PlaybackParameters(//speed in float))
//EXAMPLE->
exoPlayer.setPlaybackParameters(PlaybackParameters(1.5f))
于 2021-02-11T10:10:11.473 回答