有没有办法可以在同一个实例中同时多次播放声音资源(MediaPlayer)?

Is there a way I can play a sound resource (MediaPlayer) more than once at the same time from the same instance?

还是我必须经常重新实例化它?

我有一个声音文件,每次一艘船爆炸时都会播放爆炸声,但有时三艘或更多艘船会同时爆炸,所以我希望相同的声音片段重叠。我注意到除非我创建新实例,否则它不会这样做。有没有我遗漏的东西,或者这是唯一的方法吗?

//declaration
private final MediaPlayer[] explosionSound = new MediaPlayer[5];

//constructor
for (int i = 0; i < 5; i++)
{
    explosionSound[i] = MediaPlayer.create(app, R.raw.explosion);
}

//in program where I want to use it (when I want to play the sound)
for (int i = 0; i < 5; i++)
{
    if (!explosionSound[i].isPlaying())
    {
        explosionSound[i].start();
        break;
    }
}

//onDestroy() method to release the media
for (int i = 0; i < 5; i++)
{
    explosionSound[i].release();
}

我试图匿名实例化一个新的但它抱怨它没有被释放(当你在 onDestroy() 方法中释放它时错误消失)。我不能立即释放它,否则根本不会播放声音。我也不想将自己限制在 5 次爆炸。现在我也担心内存问题。

有更简单的方法吗?

MediaPlayer 并不是真的要解决小的重叠音频剪辑的问题。它更适合长运行媒体,包括音频和视频。

更适合您的特定情况的工具是 SoundPool,它专为您的情况而设计。