我想播放一种会逐渐提高播放速度的声音,即第一次播放速度是1倍,然后是1.5倍,然后是2.0倍,然后是3.5倍,4倍,等等。我试图编写一些代码,例如:
MediaPlayer mp;
float mpDrumFreq = 0f;
float frequency = 1f;
mp = MediaPlayer.create(MainActivity.this, R.raw.tiktok);
mp.setLooping(true);
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
mpDrumFreq = Math.min(10f, (mpDrumFreq+frequency) );
mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(mpDrumFreq));
}
}
});
TextView play = findViewById(R.id.play);
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.start();
}
});
在这里,
MediaPlayer mp
播放声音。我正在尝试通过此行setOnCompletionListener
提高mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(newSpeed));
内部的速度我还有其他一些变化。但这没有用。我不知道为什么有谁知道如何做到这一点?
在这种情况下,我尝试使用
MediaPlayer
,但可以随意提出任何建议,例如SoundPool
或其他一些库。谁能帮我?
最佳答案
您可以尝试使用SoundPool:
private static SoundPool sound;
private static SparseIntArray soundPoolMap = new SparseIntArray();
...
// 1 - use one thread
sound = new SoundPool(1, AudioManager.STREAM_MUSIC, 100);
soundPoolMap.put(0, sound.load(application, R.raw.sound, 0));
...
// last parameter - rate of sound
sound.play(soundPoolMap.get(0), 1.0f, 1.0f, 0, 0, 1f);
但是,正如Howard Liu所写,here SoundPool没有setOnCompletionListener(),建议使用custom class。
关于java - 如何逐步提高Android的声音播放速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61041537/