2012-08-31 202 views
2

我正在製作一個應用程序,您可以在其中選擇1到4種不同的聲音並在同一時間播放它們。一切正常,直到我想停下來的聲音,功能停止在同一時間只能一個聲音,這裏是代碼(僅適用於的Soundpool)SoundPool停止功能不停止

sound = new SoundPool(1, AudioManager.STREAM_MUSIC, 0); 
     s1 = sound.load(Main.this, R.raw.mosq1, 1); 
     s2 = sound.load(Main.this, R.raw.mosq2, 1); 
     s3 = sound.load(Main.this, R.raw.mosq3, 1); 
     s4 = sound.load(Main.this, R.raw.mosq4, 1); 
. 
. 
. 
. 
     case R.id.play: 
      if (l1==true){sound.play(s1, 1, 1, 0, rep, 1); if(vib==true) wibracja.vibrate(4500);} 
      if (l2==true){sound.play(s2, 1, 1, 0, rep, 1); if(vib==true) wibracja.vibrate(6500);} 
      if (l3==true){sound.play(s3, 1, 1, 0, rep, 1); if(vib==true) wibracja.vibrate(2500);} 
      if (l4==true){sound.play(s4, 1, 1, 0, rep, 1); if(vib==true) wibracja.vibrate(4500);} 
      break; 
     case R.id.stop: 
      sound.stop(s1); 
      sound.stop(s2); 
      sound.stop(s3); 
      sound.stop(s4); 
      wibracja.cancel(); 
      break; 

如何正確使用停止功能?感謝您的幫助

回答

7

這是第一次爲 使用soundpool的用戶的常見問題。如果仔細查看soundpool的文檔,播放使用參​​數「soundID」,而停止使用參數「streamID」。就像你的代碼一樣,很容易忽略這一點,並使用load函數返回的soundID作爲這兩個命令。我甚至見過android教程示例得到這個錯誤。改爲使用這些命令:

s1 = sound.load(Main.this, R.raw.mosq1, 1); 
if (l1==true){p1=sound.play(s1, 1, 1, 0, rep, 1);  
sound.stop(p1);// NOT s1