通过推送ImageButton覆盖声音

时间:2015-10-27 09:57:36

标签: android media-player soundpool

我正在创建一个播放用户选择的声音的应用。首先他们选择类别,然后他们选择特定的声音。声音不是很长,目前应用程序将播放声音很好。然而,如果用户选择一个声音,然后他们选择第二个声音播放,则2个声音将重叠(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的帮助,上面的代码是我的应用程序中当前正在运行的代码。

1 个答案:

答案 0 :(得分:0)

如果你想避免重叠,你应该检查播放声音的天气并停止它:

if (mp != null && mp.isPlaying())
    mp.pause();

然后播放新声音。

修改

你应该与播放声音的方式保持一致。

创建一个MediaPlayer变量作为类成员:

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; 
}