android - SoundPool无法播放声音(MediaPlayer却可以)

标签 android audio soundpool

我正在尝试在应用程序中播放声音。但是,我无法使用SoundPool。代码真的很简单,我看不出它会失败。

一个类似的代码,但是使用MediaPlayer确实可以,但是我对使用SoundPool感兴趣。

SoundPool代码:

private void playSound2(){
    SoundPool sp = new SoundPool.Builder().build();
    int soundID = sp.load(MainActivity.this, R.raw.sound, 1);
    sp.play(soundID, 1, 1, 1, 0, 1);
}

上下文:
public void goButtonClick(View view){
    Button goButton = findViewById(id.button2);
    if (onGoing){
        goButton.setText("GO!");
    } else {
        goButton.setText("STOP");
        //playSound();   // MediaPlayer
        playSound2();    // SoundPool
    }
    onGoing = !onGoing;
}

MediaPlayer版本(有效):
private void playSound(){
    MediaPlayer mediaPlayer;
    mediaPlayer = MediaPlayer.create(MainActivity.this, R.raw.sound);
    mediaPlayer.start();
}

最佳答案

解决了!

我错过了等待声音文件加载到soundPool的过程。正确的代码是:

private void playSound2() {
    SoundPool sp = new SoundPool.Builder().build();
    int soundID = sp.load(MainActivity.this, raw.sound, 1);
    sp.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool sp, int soundID, int i1) {
            sp.play(soundID, 1, 1, 1, 0, 1);
        }
    });
}

关于android - SoundPool无法播放声音(MediaPlayer却可以),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55200787/

相关文章:

java - 在 android 中为 fragment 创建 "Shell"

android - Google Analytics 不生成配置文件,Firebase 冲突

Android:监听辅助端口

html - 为什么 HTML5 Audio 标签总是有两个来源?

android - 在 activity_main 之外的其他 Activity 中添加操作栏

Android NestedScrollView TalkBack - 仅导航到屏幕上可见的项目,跳过滚动下方的元素并转到底部选项卡

audio - 树莓派的输入声音检测

android - 涉及 soundpool 的应用程序的 BpMemoryHeap 问题

android - 发生碰撞时如何停止声音重新启动

android - SoundPool 错误 "erase can not get the lock"