# Java Sound Probleme



## tobi193 (26. Nov 2009)

Hi,
ich habe ein kleines Spielchen mit einmal einer Hintergrundmusik (als .mp3, ca. 3mb groß) und bisher ein Geräusch (ca. 1,5 sekunden lang, .wav). Beide lassen sich mittels jmf abspielen.
Ich habe einen Button um die Hintergrundmusik pausieren und fortfahren zu können, dazu dienen     clip.start()     bzw.  clip.stop();
Aber jetzt zu den Problemen:
Wenn die Hintergrundmusik läuft und ich auf Pause klicke, friert das Spiel etwa 1,5 Sekunden ein. Zuvor mit einer .wav Hintergrundmusik und ohne jmf hat er das nicht gemacht. Außerdem will er keinen Endlosloop machen.
Und das Geräusch wird jeweils nur einmal abgespielt, soll aber bei Aufruf immer wieder kommen können. Wie setze ich den irgendwie zurück ?

Hier noch ein bisschen Code:

```
private Player clip, ding;
...
        try{
            URL soundURL = getClass().getResource("jingle.mp3");
            URL soundURL2 = getClass().getResource("ding.wav");
            clip = Manager.createRealizedPlayer(soundURL);
            ding = Manager.createRealizedPlayer(soundURL2);
            clip.start();
        }catch(Exception e){
            e.printStackTrace();
        }
...
if(ding abspielen ?){
    ding.start();
}
```

Gruß tobi


----------



## radiac (26. Nov 2009)

Hi Tobi...


also en bissl mehr Code wäre nicht schlecht .


----------



## tobi193 (27. Nov 2009)

Moin,
hm, was denn an Code ?
Eigentlich gibt es sonst Soundspezifisches nichts mehr.
Das kurze Aufhängen beim stoppen habe ich so gelöst:

```
public void stop(){
        Thread th = new Thread(){
            public void run(){
                 clip.stop();
            }
        };
        th.start();
    }
```
Aber bei den anderen Dingen bin ich noch immer ratlos.


----------



## Steev (27. Nov 2009)

Man kann mit JMF soweit ich weis Sounds mithilfe von [Java]player.setMediaTime(new Time(0));[/Java] wieder auf die Startposition zurücksetzen. [Java]new Time(0)[/Java] würde ich dabei in eine Konstante auslagern. Weil du sonst jedesmal eine neue Instanz erzeugen würdest.


----------



## tobi193 (27. Nov 2009)

Super, das klappt auch.
Dann fehlt nur noch der Enlosloop der Hintergrundmusik


----------



## Steev (27. Nov 2009)

Das müsstest du mithilfe eines Listeners machen:

[Java]
player.addControllerListener(ControllerListener {
	public void controllerUpdate(ControllerEvent ce) {
                if (event instanceof EndOfMediaEvent) {
                        player.setMediaTime(new Time(0));
                } 
	}
});[/Java]

Ich hoffe das klappt auch. Ich frage im Grunde genommen nur ab, ob der Sound fertig ist und setze ihn dann wieder auf 0.


----------



## tobi193 (28. Nov 2009)

hm, also das geht überhaupt nicht, er meckert auch an mehreren Stellen:
illegal start of expression, aber eigentlich müssten ja alle Zeichen da sein.

Ist das dann die beste Möglichkeit für einen Loop ? Gibt es da keine Methode um das zu bestimmen oder so ?


----------



## radiac (28. Nov 2009)

tobi, schau dir mal Quaxlies Tutorial an. Da gibts ne gute SoundLib. Da erklärt er unter anderen wie man SoundLoops macht. Soweit ich weis, geht da aber kein MP3... das müsstest du dann erweitern.


Greetz Radiac


----------



## Steev (28. Nov 2009)

Das Ende des Blocks "}" hatte ich vergessen, ich habe den Code oben noch mal abgeändert.
Meckert er sonst noch wo? Normalerweise wird das ganze nämlich über einen ControllerListener gemacht.


----------

