繁体   English   中英

如何逐步加快Android中的声音播放速度?

[英]How to Gradually Accelerate Sound Playing Speed in Android?

我想播放一种会逐渐加快播放速度的声音,即第一次播放 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或其他一些库。 谁能帮我?

您可以尝试使用 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 所写,SoundPool没有 setOnCompletionListener() 并建议使用自定义 class

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM