3

我该如何实施

setRate(float f) 

对于我的 Android MediaPlayer,其次是否可行?

4

3 回答 3

4

我相信是您正在寻找的功能。

这设置了音频数据将被消耗和播放的采样率,而不是内容的原始采样率。将其设置为内容采样率的一半将导致播放持续时间延长两倍,但也会导致负音调偏移。有效的采样率范围是从 1Hz 到返回值的两倍getNativeOutputSampleRate(int)

如果你想直接使用 AudioTrack 播放 mp3,你可以看看这个例子,或者将你的 mp3 文件转换成 wav 格式,这样 AudioTrack 就可以轻松使用它。如果您想轻松调整播放速率,这是您应该考虑的权衡。

于 2012-07-23T16:35:29.790 回答
0

Android 6.0 添加了PlaybackParamsfor MediaPlayer,所以你现在可以这样做:

String recordingPath = recordingDirectory + File.separator + "music.mp3";
MediaPlayer audioPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse(recordingPath));
audioPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
PlaybackParams params = new PlaybackParams();
params.setSpeed(0.75f);
audioPlayer.setPlaybackParams(params);
audioPlayer.start();

我还没有 Android 6 设备,但这在模拟器中对我有用。

于 2015-10-23T23:25:54.790 回答
-1

根据 Android 开发人员文档,您可能必须改用 SoundPool。

Android 开发者:Media SoundPool-setRate

public final void setRate (int streamID, float rate)

更改播放速率。播放速率允许应用程序改变声音的播放速率(音高)。值 1.0 表示以原始频率播放。值 2.0 表示播放速度加倍,值 0.5 表示播放速度减半。如果流不存在,它将不起作用。

参数

streamID : play() 函数返回的 streamID

rate:播放速率(1.0 = 正常播放,范围 0.5 到 2.0)

于 2012-07-23T15:46:16.883 回答