我正在开发一个播放器应用程序,我正在使用MediaPlayer
。
现在,我想改变播放曲目的速度。
我见过很多具有此功能的应用程序。我该怎么做?
从API 23开始,MediaPlayer可以使用此方法设置播放速度。
类媒体播放器
public void setPlaybackParams (PlaybackParams params)
在 API 中添加 23级使用播放参数设置播放速率。参数参数 播放参数:播放参数。抛出非法状态异常,如果 内部播放器引擎尚未初始化。 IllegalArgumentException 如果不支持参数。
示例代码:
MediaPlayer mp = ...; //Whatever
float speed = 0.75f;
mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(speed));
对于 API <23,请参阅上面(或下面)Vipul Shah 的回答。
MediaPlayer 不提供此功能,但 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);
}
});
soundpool 仅支持可以预加载的相对较小的音效文件。您将获得任何有用长度的音乐曲目的堆溢出。
现在您可以使用
mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(speed))
适用于 API 23 及更高版本!
MediaPlayer
类不提供此功能。请改用 SoundPool
类。它有一个名为 setRate (int streamID, float rate)
.阅读此内容以获取更多信息。下面是一个示例代码供您使用它。
中 ExoPlayer 的速度控制
//exoPlayer.setPlaybackParameters(PlaybackParameters(//speed in float))
//EXAMPLE->
exoPlayer.setPlaybackParameters(PlaybackParameters(1.5f))
根据这里提到的流程,以下代码适用于安卓API 23(安卓6.0棉花糖)
PlaybackParams playbackParams = new PlaybackParams();
playbackParams.setSpeed(2);
playbackParams.setPitch(1);
playbackParams.setAudioFallbackMode(
PlaybackParams.AUDIO_FALLBACK_MODE_DEFAULT);
mMediaPlayer.setPlaybackParams(playbackParams);