【问题标题】:Speed Control of MediaPlayer in AndroidAndroid中MediaPlayer的速度控制
【发布时间】:2012-06-01 12:06:46
【问题描述】:

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

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

我见过很多具有此功能的应用程序。我该怎么做?

【问题讨论】:

标签: android


【解决方案1】:

从 API 23 开始,MediaPlayer 可以使用this method 设置播放速度。

类媒体播放器

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 ,请参考上面(或下面)的Vipul Shah's answer

【讨论】:

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

MediaPlayer 不提供此功能,但 SoundPool 具有此功能。 SoundPool 类有一个名为setRate (int streamID, float rate) 的方法。如果您对API have a look here感兴趣。

此代码段将起作用。

 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);
     }
 });

【讨论】:

  • No MediaPlayer 不提供此功能。
  • 如果我理解正确意味着音高也会改变?有没有办法在不改变音高的情况下调整速度?
  • SoundPool 仅适用于大约 5.5 秒的播放。对于 Lollipop 和更早的版本,我只是不提供速度控制选项。而且,是的,我刚买了一个乐队的新平板电脑,恰好是 Lollipop。
【解决方案3】:

soundpool 仅支持可预加载的相对较小的音效文件。任何有用的长度音乐曲目都会导致堆溢出。

【讨论】:

  • 这确定吗?任何人都可以确认这个答案?谢谢。
【解决方案4】:

现在你可以使用

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

适用于 API 23 及更高版本!

【讨论】:

  • 请注意,如果您想宣传自己的产品/博客,您必须在回答中披露您的隶属关系,否则您的回答可能会被标记为垃圾邮件。请阅读How to not be a spammer
  • 此外,@ShishirGupta 上面的回答似乎已经涵盖了这个答案
【解决方案5】:

MediaPlayer 类不提供此功能。而是使用 SoundPool 类。它有一个名为setRate (int streamID, float rate) 的方法。阅读this 了解更多信息。这是一个sample code 供您使用。

【讨论】:

  • 是的。那么我可以在 SoundPool 中设置下一首、上一首、声音控制、前进、后退、睡眠、重复、随机播放等其他功能吗?请给我一些想法。
  • 您可以在Google上搜索教程。你会发现很多这样的例子。
【解决方案6】:

根据我们提到here的流程,以下代码适用于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);

【讨论】:

  • 为您的答案添加一些解释。仅代码的答案并不是很有用。
【解决方案7】:

Android 中 ExoPlayer 的速度控制

//exoPlayer.setPlaybackParameters(PlaybackParameters(//speed in float))
//EXAMPLE->
exoPlayer.setPlaybackParameters(PlaybackParameters(1.5f))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    相关资源
    最近更新 更多