# Sound im loop abspielen, wenn boolscher wert true ist



## kevinistes (1. Jul 2015)

Hallo Community!

Momentan entwickeln wir für die Uni ein kleines Spielchen. Ich suche eine Lösung wie ich einen Sound in einer Schleife abspielen kann, solange der Wert isplaying true ist. Sobald ich ihn auf false setze soll er aufhören den Sound zu spielen.

Hierbei handelt es sich um die Bewegung einer Spielfigur nach links und rechts. 

Meine play Methode um einen einzelnen Sound abzuspielen (wie zb beim springen) sieht wie folgt aus

```
public void play() {
        try {
            System.out.println("Try playing:" + filename);
            new Thread(){
                public void run() {
                    clip.play(volume);
                    System.out.println("Played:" + filename);
                }
            }.start();
        }
        catch (Exception e) {
            System.out.println("Error: Playing:" + filename);
            e.printStackTrace();
        }
    }
}
```

Ich hab mir überlegt einfach am anfang des Threads die variable is playing auf true zu setzen und danach wieder auf False, aber aufgrund der Tatsache dass wieder ein neuer Thread gestartet wird scheint das nicht zu funktionieren.

Jetzt hab ich mir noch überlegt eine extra Methode loopPlay zu schreiben die einen Sound solange abspielt bis diese besagt Variable wieder auf false gesetzt ist

Momentan sieht sie so aus, was aber nicht wirklich zielführend ist...

```
public void loopPlay(){
        if (!isPlayingsound()) {
            try {
                setPlayingsound(true);
                System.out.println("Try playing:" + filename);
                new Thread() {
                    public void run() {
                        clip.play();
                        System.out.println("Played:" + filename);
                    }
                }.start();
            } catch (Exception e) {
                System.out.println("Error: Playing:" + filename);
                e.printStackTrace();
            }
            setPlayingsound(false);
        }
    }
```

Über Anregungen und Hilfen würde ich mich freuen 
Danke schonmal im Vorraus


----------



## Diabolus (2. Jul 2015)

Ich denke mit einer globalen Variable dürfte es auch trotz Threads funktionieren


----------



## Gucky (2. Jul 2015)

Du könntest versuchen eine Klasse von Thread erben zu lassen und diese den Clip abspielen zu lassen.
Diese Klasse bietet eine Methode stop bzw. überschreibt sie oder wie auch immer du sie nennst. Diese Methode ruft AudioClip#stop() auf das aktuelle Objekt auf.


----------



## RalleYTN (13. Aug 2015)

Du musst in deinen Thread(aus deinem erstem geposteten Code) in der Methode run() noch eine Schleife einbauen.

```
while(isLooping) {
    if(clip.getMicrosecondPosition() >= clip.getMicrosecondLength()) {
        clip.setMicrosecondPosition(0);
        clip.play();
    }
}
```


----------

