# Audio wird nur 1 Mal abgespielt



## RezaScript (28. Mrz 2021)

Hallo, ich habe eine Klasse die Tts heisst und darin soll eine Audio-Datei abgespielt werden, also so:

```
MediaPlayer mediaPlayer = new MediaPlayer();
String myFile = context.getFilesDir() + "/output.mp3";
mediaPlayer.setDataSource(myFile);
mediaPlayer.prepare();
mediaPlayer.start();
```

Ich habe in der App mehrere Knöpfe. Wenn ich auf einen Knopf drücke, wird das Audio abgespielt, was gut ist. Aber ich möchte nicht, dass während ein Audio abgespielt wird, ein anderer Knopf gedrückt wird. Also gleichzeitige Audios möchte ich vermeiden.

Das Problem ist mir aber bewusst. Ich weiss also, dass jedes Mal, wenn ich auf einen Knopf drücke, MediaPlayer() erneut initialisiert wird. Somit habe ich MediaPlayer() in der Klasse Tts als Eigenschaft und im Konstruktor aufgenommen, also so:


```
private final MediaPlayer _mediaPlayer;

public Tts(Context context, MediaPlayer _mediaPlayer) {
    this.context = context;
    this._mediaPlayer = _mediaPlayer;
}
```

In der Klasse MainActivity habe ich ebenfalls MediaPlayer als Eigenschaft definiert, also so:

```
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private final MediaPlayer _mediaPlayer = new MediaPlayer();
```

Und sobald ein Knopf gedrückt wird, initialisiere ich die Klasse Tts und rufe die Methdode (say()) auf. Also so:

```
public void onClick(View view) {
    Tts tts = new Tts(this, _mediaPlayer);
    tts:say();
```
Also somit ist mein Ziel zwar erreicht, dass die Audios nicht gleichzeitig abgespielt werden sollten aber das Problem ist, dass das Audio nun nur 1 Mal abgespielt wird und nicht mehr. D.h. auch wenn es bereits abgespielt wurde und ich im Nachhinein auf einen oder denselben Knopf drücke, wird es nicht mehr abgespielt. 

Ich denke ich habe irgendwo ein Problem mit der Logik. Liegt es daran, dass ich MediaPlayer als Eigenschaft in MainActivity habe? Wenn ja, wie wäre es denn korrekt?


----------



## Robertop (29. Mrz 2021)

Hallo RezaScript,

dass ich was mit dem MediaPlayer gemacht habe ist schon länger her. Aber ich habe mal in ein altes Projekt von mir geguckt und dort gesehen, dass ich meinen MediaPlayer auch in der MainActivity habe, ihn aber so initialisiere:

```
mediaPlayer = MediaPlayer.create(context, uri);
// URI der Audiodatei
```
Dieses "prepare" habe ich damals anscheinend gar nicht verwendet. Was ich aber auch noch im selben Projekt gefunden habe, ist das hier, um zurück an den Start zu kommen:

```
mediaPlayer.seekTo(0);
```

Ich hoffe, das hilft der vielleicht irgendwie weiter.


----------



## kneitzel (29. Mrz 2021)

Also das wird hier etwas behandelt:








						How to play, stop, and then play again with MediaPlayer
					

My Code:  llBtn = (LinearLayout) findViewById(R.id.button); llBtn.setOnClickListener(new View.OnClickListener() {     @Override     public void onClick(View v) {         //Toast.makeText(MainActivity.




					stackoverflow.com
				




In Kurz: Ruf das prepare() erneut auf, wenn du es erneut abspielen willst und es schon in den stop Staus gegangen ist.
So lange er am spielen ist, kannst Du seekTo(0) aufrufen, um an den Anfang zu kommen. (Das geht aber nicht, wenn es bereits im STOP Zustand ist!)

Wenn Du aber die Musik / den Sound in einer Endlosschleife haben willst, dann reicht auch ein setLooping(true)


----------

