如何逐渐加快 Android 中的声音播放速度?
Posted
技术标签:
【中文标题】如何逐渐加快 Android 中的声音播放速度?【英文标题】:How to Gradually Accelerate Sound Playing Speed in Android? 【发布时间】:2020-04-05 11:01:16 【问题描述】:我想播放一个会逐渐加快播放速度的声音,即第一次播放 1x 速度,然后 1.5x 速度,然后 2.0x 速度,然后 3.5x,4x,......类似的东西。我试着写了一些代码,比如:
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
播放声音。我正在尝试使用这条线 mp.setPlaybackParams(mp.getPlaybackParams().setSpeed(newSpeed));
提高 setOnCompletionListener
内的速度
我还有一些其他的变化。但它没有用。我不知道为什么。有谁知道怎么做?
在这种情况下,我尝试使用 MediaPlayer
,但可以随意提出任何建议,例如 SoundPool
或其他一些库。
谁能帮帮我?
【问题讨论】:
【参考方案1】:您可以尝试使用 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。
【讨论】:
以上是关于如何逐渐加快 Android 中的声音播放速度?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Android 动画播放“滴答滴答”声音(可能使用“Android MediaPlayer / SoundPool”)?