有没有办法可以在同一个实例中同时多次播放声音资源(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,它专为您的情况而设计。
还是我必须经常重新实例化它?
我有一个声音文件,每次一艘船爆炸时都会播放爆炸声,但有时三艘或更多艘船会同时爆炸,所以我希望相同的声音片段重叠。我注意到除非我创建新实例,否则它不会这样做。有没有我遗漏的东西,或者这是唯一的方法吗?
//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,它专为您的情况而设计。