java - 如何逐步提高Android的声音播放速度?

标签 java android kotlin audio

我想播放一种会逐渐提高播放速度的声音,即第一次播放速度是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/

相关文章:

C++ 中的 Java 迭代器等价物? (带代码)

java - 如何编译maven包上的classpath资源?

java - 帮助我避免与 JPA、Hibernate 和 MySQL 的连接超时

libgdx - libGDX无法执行操作

android - 房间 : Crash on emulator

java - 为什么 Java ArrayList 类为添加返回一个 boolean 值?

java - 如何在Android中将变量从一个类发送到另一个类

android - 有没有办法在 TextView 中隐藏文本?

unit-testing - Kapt generatetubs - 无法使用单元测试中的内部构造函数初始化对象

android - Dagger2 Qualifier 不适用于 Kotlin?