Android中MediaPlayer的速度控制

Kri*_*har 23 android

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

现在,我想改变比赛的速度.

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

Shi*_*pta 38

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

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));
Run Code Online (Sandbox Code Playgroud)

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

  • 对于那些在调用'setPlayParams'方法时遇到IllegalStateException的人,请确保你没有执行PlaybackParams params = mp.getPlaybackParams(),设置速度然后将其传递给mp.setPlaybackParams()!在调用mp.getPlayParams()时直接设置速度!就像Shishir Gupta的回答一样! (3认同)

小智 16

soundpool仅支持可预加载的相对较小的音效文件.您将获得任何有用长度音乐曲目的堆溢出.


Vip*_*hah 15

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);
     }
 });
Run Code Online (Sandbox Code Playgroud)

  • 如果我正确地说它意味着音调也会改变?有没有改变音高调整速度的方法? (3认同)

小智 8

现在你可以使用了

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

对于API 23及以上!

这是我博客上帖子,其中包含更多详细信息

  • 请注意,如果您想宣传自己的产品/博客,您必须在答案中披露您的联盟**,否则您的答案可能被标记为垃圾邮件.请阅读[如何不成为垃圾邮件发送者](http://stackoverflow.com/help/promotion) (9认同)
  • 此外,这个答案似乎已经包含在@ShishirGupta 上面的答案中 (2认同)