2016-04-25 5 views
2

Ich habe Probleme in meinem Programm mit der Soundpool-Klasse. Ich habe den Soundpool Builder initiiert und meine Sounds ohne Probleme geladen. Ich möchte in der Lage sein, mehrere Togglebuttons zu verwenden, die bestimmte Sounds ein- und ausschalten. Ich bin in der Lage, togglebuttons ein- und auszuschalten, aber zum Beispiel, wenn ich zwei oder mehr togglebuttons anwende und als ich eine Pause mache ..... der Rest wird aufhören. Ich will das nicht, ich möchte, dass die anderen Sounds weiterspielen. Hier ist mein Code. Auch wenn irgendjemand mir helfen kann, es ein wenig aufzuräumen, wäre das hilfreich. Danke im Voraus.Android, Soundpool-Klasse - Autopause Probleme beim Schleifen Sound

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     bT1 = (ToggleButton) findViewById(R.id.firstToggle); 
     bT2 = (ToggleButton) findViewById(R.id.secondToggle); 
     bT1.setOnClickListener(this); 
     bT2.setOnClickListener(this); 
     bT3 = (ToggleButton) findViewById(R.id.thirdToggle); 
     bT4 = (ToggleButton) findViewById(R.id.fourthToggle); 
     bT3.setOnClickListener(this); 
     bT4.setOnClickListener(this); 
     bT5 = (ToggleButton) findViewById(R.id.fifthToggle); 
     bT6 = (ToggleButton) findViewById(R.id.sixToggle); 
     bT5.setOnClickListener(this); 
     bT6.setOnClickListener(this); 
     bT7 = (ToggleButton) findViewById(R.id.seventhToggle); 
     bT8 = (ToggleButton) findViewById(R.id.eighthToggle); 
     bT7.setOnClickListener(this); 
     bT8.setOnClickListener(this); 

     initionalizeSoundpool(); 
    } 

    private void initionalizeSoundpool() { 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      AudioAttributes audioAttributes = new AudioAttributes.Builder() 
        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) 
        .setUsage(AudioAttributes.USAGE_MEDIA) 
        .build(); 

      ourSounds = new SoundPool.Builder() 
        .setMaxStreams(8) 
        .setAudioAttributes(audioAttributes) 
        .build(); 
      soundFx = ourSounds.load(this, R.raw.highhatandrims, 1); 
      beatOne = ourSounds.load(this, R.raw.technodrums, 1); 
      soundFx2 = ourSounds.load(this, R.raw.soothing, 1); 
      beatTwo = ourSounds.load(this, R.raw.thumpohyeahbeat, 1); 
      soundFx3 = ourSounds.load(this, R.raw.dreamyone, 1); 
      beatThree = ourSounds.load(this, R.raw.atredundantsynthesis, 1); 
      soundFx4 = ourSounds.load(this, R.raw.tawaka, 1); 
      clap = ourSounds.load(this, R.raw.cabessa, 1); 
     } else { 
      ourSounds = new SoundPool(4, AudioManager.STREAM_MUSIC,1); 
      soundFx = ourSounds.load(this, R.raw.highhatandrims, 1); 
      beatOne = ourSounds.load(this, R.raw.technodrums, 1); 
      soundFx2 = ourSounds.load(this, R.raw.soothing, 1); 
      beatTwo = ourSounds.load(this, R.raw.thumpohyeahbeat, 1); 
      soundFx3 = ourSounds.load(this, R.raw.dreamyone, 1); 
      beatThree = ourSounds.load(this, R.raw.atredundantsynthesis, 1); 
      soundFx4 = ourSounds.load(this, R.raw.tawaka, 1); 
      clap = ourSounds.load(this, R.raw.cabessa, 1); 
     } 

    } 




public void onClick(View view) { 
     switch (view.getId()) { 
      case R.id.firstToggle: 
       if(bT1.isChecked()) { 
        ourSounds.play(soundFx, 1, 1, 1, -1, 1); 
       } 
       else { 
        ourSounds.autoPause(); 
       } 
       break; 
      case R.id.secondToggle: 
       if(bT2.isChecked()) { 
        ourSounds.play(beatOne, 1, 1, 1, -1, 1); 
       } 
       else { 
        ourSounds.autoPause(); 
       } 
       break; 
      case R.id.thirdToggle: 
       if(bT3.isChecked()) { 
        ourSounds.play(soundFx2, 1, 1, 1, -1, 1); 
       } 
       else { 
        ourSounds.autoPause(); 
       } 
       break; 
      case R.id.fourthToggle: 
       if(bT4.isChecked()) { 
        ourSounds.play(beatTwo, 1, 1, 1, -1, 1); 
       } 
       else { 
        ourSounds.autoPause(); 
       } 
       break; 
+0

was die Länge einer Sounddatei? –

+0

sie sind kurze Proben, vielleicht 5-10 Sekunden lang. – wth7777

Antwort

1

Fügen Sie diese auf Ihre OnPause Methode:

@Override 
public void onPause() { 
    super.onPause(); 

    ourSounds.release(); 
    ourSounds = null; 
} 

Update:

Statt ourSounds.autoPause(); versuchen Sie es ourSounds.pause(soundID); zum Beispiel zu verwenden:

case R.id.firstToggle: 
      if(bT1.isChecked()) { 
       ourSounds.play(soundFx, 1, 1, 1, -1, 1); 
      } 
      else { 
       ourSounds.pause(soundFx); 
      } 
      break; 
... 
+0

Ich habe versucht, diese beiden Zeilen des Codes in der Else-Anweisung direkt unter der Autopause, aber es hat nicht funktioniert. Ich würde zwei oder drei Knöpfe drücken und alle würden spielen, aber wenn ich eine Pause machte, hörten die anderen auf und es würde mich aus dem Programm werfen. Danke für den Vorschlag. – wth7777

+0

Nein, ich meine, in 'OnPause' Methode, bitte überprüfen Sie meine aktualisierte Antwort –

+0

Ich bin immer noch ein Anfänger, so habe ich Probleme zu verstehen. Ich habe keine OnPause-Methode oder onResume. Wenn ich OnPause erstellen brauche ich ein onResume? Wo rufe ich die onPause, in meiner else Aussage? Muss ich einen int an onPause übergeben? Danke nochmal für deine Hilfe. – wth7777