Java Sound Probleme

Status
Nicht offen für weitere Antworten.

tobi193

Aktives Mitglied
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:
Java:
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
 
Moin,
hm, was denn an Code ?
Eigentlich gibt es sonst Soundspezifisches nichts mehr.
Das kurze Aufhängen beim stoppen habe ich so gelöst:
Java:
    public void stop(){
        Thread th = new Thread(){
            public void run(){
                 clip.stop();
            }
        };
        th.start();
    }
Aber bei den anderen Dingen bin ich noch immer ratlos.
 
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.
 
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.
 
Zuletzt bearbeitet:
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 ?
 
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
 
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.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben