按下 ImageButton 重叠声音
Overlaping sounds with push of ImageButton
我正在制作一个可以播放用户选择的声音的应用。首先他们 select 类别,然后他们选择特定的声音。声音不是很长,目前该应用程序可以正常播放声音。然而,如果用户 select 发出一种声音,然后他们 select 播放两种声音的第二种声音将会重叠(Beta 测试人员显然发现这很烦人)。我已经尝试过媒体播放器和声音池。在研究了这个问题之后,我发现重叠的可能原因是我使用 mp = mediaplayer.create(this,raw.soundfile); mp.start()
来播放每个声音。从那以后,我一直试图改变声音的播放方式。在阅读了包括this tutorial在内的几篇文章后,下面是我目前拥有的相关代码
public class [classname] implements [something] extends[somethingelse]{
MediaPlayer mp; //moved out of play sound method
protected void OnCreate(Bundle savedInstanceState){
mp = new MediaPlayer();// added to this area
}
public void playSound (View view) {
if (mp.isPlaying() ){
mp.stop();
mp.release();
}
switch (selection) {
case "sound1":
mp = MediaPlayer.create(this, R.raw.sound1);
mp.start();
break;
case "sound2":
mp = MediaPlayer.create(this, R.raw.sound2);
mp.start();
break;
case "sound3":
mp = MediaPlayer.create(this, R.raw.asound3);
mp.start();
break;
**10 more cases in this playsound method**
经过反复试验并得到 Udi Idan 的帮助后,以上代码目前在我的应用程序中运行。
如果你想避免重叠,你应该检查声音是否正在播放并停止它:
if (mp != null && mp.isPlaying())
mp.pause();
然后播放新的声音。
编辑
你应该与你播放声音的方式保持一致。
创建一个 MediaPlayer 变量作为 class 成员:
MediaPlayer mp;
if (mp != null && mp.isPlaying()){
mp.stop();
}
switch (selection) {
case "sound1":
mp = MediaPlayer.create(this, R.raw.sound1);
mp.start();
break;
case "sound2":
mp = MediaPlayer.create(this, R.raw.sound2);
mp.start();
break;
case "sound3":
mp = MediaPlayer.create(this, R.raw.sound3);
mp.start();
break;
}
我正在制作一个可以播放用户选择的声音的应用。首先他们 select 类别,然后他们选择特定的声音。声音不是很长,目前该应用程序可以正常播放声音。然而,如果用户 select 发出一种声音,然后他们 select 播放两种声音的第二种声音将会重叠(Beta 测试人员显然发现这很烦人)。我已经尝试过媒体播放器和声音池。在研究了这个问题之后,我发现重叠的可能原因是我使用 mp = mediaplayer.create(this,raw.soundfile); mp.start()
来播放每个声音。从那以后,我一直试图改变声音的播放方式。在阅读了包括this tutorial在内的几篇文章后,下面是我目前拥有的相关代码
public class [classname] implements [something] extends[somethingelse]{
MediaPlayer mp; //moved out of play sound method
protected void OnCreate(Bundle savedInstanceState){
mp = new MediaPlayer();// added to this area
}
public void playSound (View view) {
if (mp.isPlaying() ){
mp.stop();
mp.release();
}
switch (selection) {
case "sound1":
mp = MediaPlayer.create(this, R.raw.sound1);
mp.start();
break;
case "sound2":
mp = MediaPlayer.create(this, R.raw.sound2);
mp.start();
break;
case "sound3":
mp = MediaPlayer.create(this, R.raw.asound3);
mp.start();
break;
**10 more cases in this playsound method**
经过反复试验并得到 Udi Idan 的帮助后,以上代码目前在我的应用程序中运行。
如果你想避免重叠,你应该检查声音是否正在播放并停止它:
if (mp != null && mp.isPlaying())
mp.pause();
然后播放新的声音。
编辑
你应该与你播放声音的方式保持一致。
创建一个 MediaPlayer 变量作为 class 成员:
MediaPlayer mp;
if (mp != null && mp.isPlaying()){
mp.stop();
}
switch (selection) {
case "sound1":
mp = MediaPlayer.create(this, R.raw.sound1);
mp.start();
break;
case "sound2":
mp = MediaPlayer.create(this, R.raw.sound2);
mp.start();
break;
case "sound3":
mp = MediaPlayer.create(this, R.raw.sound3);
mp.start();
break;
}