【问题标题】:Playing two sounds in sequence with SoundPool使用 SoundPool 按顺序播放两个声音
【发布时间】:2025-11-30 00:45:01
【问题描述】:

实际上,我想按顺序播放原始文件夹中的所有声音。当我单击按钮时,仅播放第一个按钮。我会很感激你的帮助。这是我的代码:

public class MainActivity extends AppCompatActivity {
private SoundPool soundPool;
private int sound1, sound2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        AudioAttributes audioAttributes = new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION)
                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .build();

        soundPool = new SoundPool.Builder()
                .setMaxStreams(2)
                .setAudioAttributes(audioAttributes)
                .build();
    } else {
        soundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 0);
    }

    sound1 = soundPool.load(this, R.raw.a, 1);
    sound2 = soundPool.load(this, R.raw.d, 1);

}
public void playSound(View v) {
    soundPool.play(sound1, 1, 1, 0, 0, 1);
    soundPool.play(sound2, 1, 1, 0, 0, 1);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    soundPool.release();
    soundPool = null;
}
}

【问题讨论】:

标签: android r.java-file soundpool


【解决方案1】:

我使用了 Howard Liu 的 SoundPoolPlayer 类,它是 SoundPool 的包装器,它计算音频文件播放的持续时间(使用 MediaPlayer)并在播放完成后使用 @ 调用自定义 OnCompletionListener 事件987654325@.

OnCompletionListener事件的处理中,只需要开始播放下一个音频文件即可。

【讨论】: