Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 声音池播放多次_Java_Android_Android Mediaplayer_Soundpool_Android Sound - Fatal编程技术网

Java 声音池播放多次

Java 声音池播放多次,java,android,android-mediaplayer,soundpool,android-sound,Java,Android,Android Mediaplayer,Soundpool,Android Sound,我打原声台球有问题。 我是Android教育的新手,希望你能帮助我。 我创建了一个类来加载声音池 public class Suond { protected static int suond1 ,suond2,suond3,suond4,suond5,suond6,suond7; protected static SoundPool sou; protected static AudioAttributes aa; @SuppressLint

我打原声台球有问题。 我是Android教育的新手,希望你能帮助我。 我创建了一个类来加载声音池

 public class Suond {


    protected  static int suond1 ,suond2,suond3,suond4,suond5,suond6,suond7;
    protected  static  SoundPool sou;
    protected  static  AudioAttributes aa;


    @SuppressLint("NewApi") 
    @SuppressWarnings("deprecation")

    protected static void oi(Context Con ){


         if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){

             aa = new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_GAME)
            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
            .build();

 sou = new SoundPool.Builder().setMaxStreams(10)
.setAudioAttributes(aa).build();

                  suond1 = sou.load(Con,R.raw.Music1,1);
                  suond2 = sou.load(Con,R.raw.Music2,1);
                  suond3 = sou.load(Con,R.raw.Music3,1);
                  suond4 = sou.load(Con,R.raw.Music4,1);
                  suond5 = sou.load(Con,R.raw.Music5,1);
                  suond6 = sou.load(Con,R.raw.Music6,1);
                  suond7 = sou.load(Con,R.raw.Music7,1);
                           }

             else{ sou = new SoundPool(10,AudioManager.STREAM_MUSIC,1);

                  suond1 = sou.load(Con,R.raw.Music1,1);
                  suond2 = sou.load(Con,R.raw.Music2,1);
                  suond3 = sou.load(Con,R.raw.Music3,1);
                  suond4 = sou.load(Con,R.raw.Music4,1);
                  suond5 = sou.load(Con,R.raw.Music5,1);
                  suond6 = sou.load(Con,R.raw.Music6,1);
                  suond7 = sou.load(Con,R.raw.Music7,1);

                 }  

                }               

    }
我还有10个按钮,代表游戏中每个按钮的级别。textview包含一个值,该值与动画监听器一起用于监听器末尾的每个文本视图,use soundpool

valueAnimator.addListener(new Animator.AnimatorListener() {
      @Override
      public void onAnimationStart(Animator animation) {


        suond.sou.play(Suond.suond1, 1, 1, 1, 0, 1);

      }

      @Override
      public void onAnimationEnd(Animator animation) {


          Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);






      }

      @Override
      public void onAnimationCancel(Animator animation) {

      }

      @Override
      public void onAnimationRepeat(Animator animation) {

      }
    });

 valueAnimator.setDuration(2000);
 valueAnimator.start();
 }
每个按钮都有一个相互连接的侦听器,当侦听器播放第一个按钮时,动画分别从第二个和第三个按钮到第十个按钮开始。一切都进行得很顺利,但当动画达到第八个按钮时,有时是第九个或第十个按钮时,声音会消失,直到活动离开并返回声音活动两三次以重新播放。 在我看来,我认为声音停止是因为连续播放了好几次,但当我读到Soundpool时,它专门播放短声音,可以同时播放多个声音在我的应用程序中可以同时播放多达16个声音声音不是同时播放,而是分别播放,他使用的声音确实播放了不超过30KB。 我不知道怎么了。 为什么连续播放几次时声音停止播放。 我使用安卓4.0 非常感谢您,希望能帮助我找到解决方案。

(1)您的代码中有拼写错误,那么您是如何编译的

Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);
suond.sou.play(Suond.suond1, 1, 1, 1, 0, 1);
无论如何,它应该是:

Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);
(2) MaxStreams设置为10,因此您只能有10个并发流(不是16个):

(3) 跟踪活动声音(
Suond.sou.play
返回整数):

(4) 请记住在离开活动后进行整理(如果活动结束后不打算使用它,请在
onDestroy()
中释放):


谢谢你的回答。正如我在回答中所说,我已经创建了streamID每个语音,但问题仍然存在,并且在使用sou.release()时;返回活动声音不起作用,如果您有解决方案,我希望您能给我更多的澄清,非常感谢。Suond.suond2是声音ID而不是流线型,不同的东西。当您在活动中使用onPause()和onResume()时,您需要停止并重新开始。请参阅本教程:-是的,我以前读过这个教育节目,现在读了不止一次,但我无法解决这个问题,可能是因为母语不是英语,因为在理解某些术语时遇到了问题,我需要更详细的信息。我以这种方式使用valueAnimator中的每个听众。int streamID=Suond.sou.play(Suond.suond2,1,1,1,0,1);内部onPause()使用Suond.sou.stop(streamID);内部onResume()使用Suondapp.sou.resume(streamID);这好吗谢谢你的到来,我知道最好的方法,但是没有什么可以代替你自己尝试,所以你可以学习。
sou = new SoundPool.Builder().setMaxStreams(10).setAudioAttributes(aa).build();
else{ sou = new SoundPool(10,AudioManager.STREAM_MUSIC,1);
int streamID = Suond.sou.play(Suond.suond2, 1, 1, 1, 0, 1);//streamID better as an integer array
//loop round your active sounds
sou .stop(streamID) ;stop ONE active sound
sou .release();