PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Javazoom mp3: Musik stoppen



BlueJay
24-10-2010, 10:34
Hallo Leute,

kennt jemand diese Bibliothek? Sie erweitert Java um mp3-Fähigkeiten.

Auch hier brauche ich eine Hintergrundmusik, die auf Knopfdruck ein/ und ausgeschaltet werden kann.

Unterschied zur Sun-Bibliothek: die play-Loop scheint atomar/synchronized zu sein: wenn man sie normal anschubst, blockiert sie das Programm. Man muss sie also in einen Extra-Thread packen.

Und nun kommen die Probleme:
stoppen soll das Gedudel anhalten, cont an der Stelle wieder aufsetzen.

play:


// braucht javazoom.jl.player.Player, player ist Typ Player
// als Thread starten, mp3thread und player sind global zur class:
public void starten()
{ try
{ mp3thread=new Thread()
{ public void run()
{ try { player.play(); }
catch (Exception e) { System.out.println(e); }
}
};
mp3thread.start();
}
catch (Exception e) { System.out.println("mp3 nicht spielbar!"); }
}


Variante 1:


public void stoppen()
{ if (mp3thread!=null) mp3thread.suspend();
System.out.println("gestoppt");
}

public void conti()
{ if (mp3thread!=null) mp3thread.resume(); else starten();
System.out.println("weiter");
}


funktioniert wunderbar, ist aber deprecated. :mad:

Variante 2:



public void stoppen_neu()
{ if (mp3thread!=null)
{ try { posi=player.getPosition(); mp3thread.interrupt(); }
catch (Exception e) { }
System.out.println("Stop2"+posi);
}
}

public void conti_neu()
{ if (mp3thread!=null)
{ if (mp3thread.isInterrupted()) mp3thread.notify();
System.out.println("conti2");
}
else starten(); // generiert den Thread nochmal
}


funktioniert nur auf dem Papier, der mp3thread denkt gar nicht daran, zu stoppen!

Player selbst hat keine Funktion dafür.

Hier noch der Output der Funktionen nach start/pause/conti:


run:
conti2
Stop26797
conti2
BUILD SUCCESSFUL (total time: 21 seconds)


aber genudelt wird pausenlos. Natürlich ist der Thread auch nicht interrupted.

Wo muss ich da eingreifen so dass es wie im deprecated Beispiel funktioniert?

Gruß,
Ulrike

Zusatzfrage: das Ganze läuft unter Windows XP, ist die Bibliothek auch Linux-kompatibel?

anda_skoa
24-10-2010, 12:26
Generell dürfte die Sache mit deprecated nicht so schlimm sein, es sei denn man will die Warnungen beim Build wegkriegen.

Aber hast du es schon mit der AdvancedPlayer Klasse aus dem Paket versucht? Die scheint eine stop() Methode zu haben.
http://www.javazoom.net/javalayer/docs/docs1.0/javazoom/jl/player/advanced/AdvancedPlayer.html#stop()

Ciao,
_

BlueJay
24-10-2010, 12:55
Mit der AdvancedPlayer habe ich auch herumgespielt, die habe ich hier gar nicht erst zum Dudeln bekommen, obwohl die Methoden der Klasse vielversprechend aussahen. Irgendwo stand auch, dass die noch nicht ganz abgesegnet ist.

Zudem reagieren die Parameter in den Methoden anders als in dem einfachen Player, Beispiel: play (int). Einmal gibt es die Startposition an, in der anderen Klasse die Anzahl Frames, die dudeln sollen.

Die eine Klasse hat eine Methode, die Frames abzufragen, die andere eine, um den Start zu setzen, aber keine hat beides. Sonst hätte ich schon mit rigorosem Abwürgen gearbeitet.

Gruß,
Ulrike