Soundpool SetMaxStreams方法似乎不起作用

时间:2015-03-08 16:50:49

标签: java android media soundpool

我的项目是一个简单的应用程序,通过点击ListView中的按钮来再现声音。除了那种方法,一切都很好。

这是班级" Effetti" :

.
.
.
public Effetti(Context context, int resId) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
Builder21(); 
} 

else    
{
createSoundPoolWithConstructor();
}

  am =  (AudioManager)  
   context.getSystemService(Context.AUDIO_SERVICE);                  
    volume = am.getStreamVolume(AudioManager.STREAM_MUSIC);
   soundID = sound.load(context, resId, PRIORITY);     
}


@TargetApi(Build.VERSION_CODES.LOLLIPOP)

protected void Builder21(){

AudioAttributes attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
 sound = new SoundPool.Builder().setAudioAttributes(attributes).setMaxStreams(1).build();

}


@SuppressWarnings("deprecation")

protected void createSoundPoolWithConstructor(){
  sound = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
 }


 public void playsound() { 

  sound.play(soundID, volume, volume, 1, 0, 1f);   

  }

通过这种方式,构造函数应该与所有API目标一起使用。我使用API​​ 21。

在.Wash类中,我使用内部类AsyncTask创建一个包含所需对象的数组。在onResume()方法中我执行任务,在onPause()方法中我可以释放所有资源。

我使用ListView和onItemClick方法。 SoundPool中有32个声音的已知限制,因此我决定在播放后释放每个声音并重新创建它。我这样做是使用Threads.Maybe不是那么干净,但现在它工作,并且UI工作正常。

.
.
.
listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> adapterv, final View componente, int pos, long id){          

    switch(pos){case 0: 

    sound_one.playsound(); 

    new Thread (new Runnable(){ 
          @Override
            public void run(){
               try {Thread.sleep(50000);} catch (InterruptedException e) {e.printStackTrace();}
                 sound_one.release();sound_one=new Effetti(getApplicationContext(),R.raw.boom);
               }
             }).start();
    } 
    switch(pos){case 1:

        sound_two.playsound(); 

        new Thread (new Runnable(){ 
      @Override
        public void run(){    
           try {Thread.sleep(50000);} catch (InterruptedException e) {e.printStackTrace();}
             sound_two.release();sound_two=new Effetti(getBaseContext(),R.raw.exp);
           }
         }).start();

我的问题是声音可以同时播放,我真的不希望它发生!我已将MaxStreams方法设置为1,但它不会起作用。 有什么建议吗?感谢

0 个答案:

没有答案