# MediaPlayer Soundklasse Start und Stop (stop funktioniert nicht)



## kuzdu (29. Mrz 2015)

Hallo,

damit mein Code übersichtlicher wird, habe ich eine Soundklasse geschrieben, wo alle meine Sounds aufgelistet werden sollen.

Sie sieht so aus: 


```
public class SoundPlayer {	 
	 public void playSound(Context context, int soundID){		
		 	MediaPlayer mp = MediaPlayer.create(context, soundID);  
		 	mp.start();
		}
	 
	 public void stopSound(Context context, int soundID) {
		 MediaPlayer mp = MediaPlayer.create(context, soundID);  
		 mp.stop();
	 }
```
Also echt nichts großartiges. Trotzdem scheint stopSound nicht zu funktionieren.

Ausgeführt wird der Code wie folgt: 


```
public class Question extends Activity {
		
SoundPlayer sp;

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_question);
		
		sp = new SoundPlayer();
                }

 private class TimeToQuestionBegin implements Runnable {
		 
	        @Override
	        public void run() {
	           
	        sp.playSound(getApplicationContext(), R.raw.race);
                
                  if (end) {
				sp.stopSound(getApplicationContext(), R.raw.race);
				}

                }
      }
}
```

Also es passiert einfach gar nichts. Der Sound läuft weiter, obwohl er stoppen sollte. Die If-Bedingung wird ausgeführt, was ich mittels eines System.out.println() getestet habe, allerdings ist das jetzt hier nicht drin.

Ich denke, ich übersehe irgendetwas grundlegendes? Iwie glaube ich, das Programm weiß gar nicht welchen Sound es stoppen soll. Jemand eine Idee?


----------



## Flown (29. Mrz 2015)

Ja du erzeugst dir jedes mal einen neuen MediaPlayer. Du musst dir aber die Instanz von dem Player speichern der dir gerade dein Sound abspielt und auf diesen musst du dann stop aufrufen.

So in etwa:


```
class SoundPlayer {

  private MediaPlayer mp = null;

  public void playSound(Context context, int soundID) {
    if (mp == null) {
      mp = MediaPlayer.create(context, soundID);
      mp.start();
    }
  }

  public void stopSound() {
    if (mp != null) {
      mp.stop();
    }
  }
}
```

Bei mehreren Playern würde ich dir eine Map ans Herz legen mit {Context, soundId} -> MediaPlayer. Dann kannst du immer auf den richtigen zugreifen.


----------

