【发布时间】:2012-06-01 12:06:46
【问题描述】:
【问题讨论】:
标签: android
【问题讨论】:
标签: android
从 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。
【讨论】:
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);
}
});
【讨论】:
soundpool 仅支持可预加载的相对较小的音效文件。任何有用的长度音乐曲目都会导致堆溢出。
【讨论】:
现在你可以使用
mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(speed))
适用于 API 23 及更高版本!
【讨论】:
MediaPlayer 类不提供此功能。而是使用 SoundPool 类。它有一个名为setRate (int streamID, float rate) 的方法。阅读this 了解更多信息。这是一个sample code 供您使用。
【讨论】:
根据我们提到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);
【讨论】:
Android 中 ExoPlayer 的速度控制
//exoPlayer.setPlaybackParameters(PlaybackParameters(//speed in float))
//EXAMPLE->
exoPlayer.setPlaybackParameters(PlaybackParameters(1.5f))
【讨论】: