ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
965
965
EMPFEHLEN
-
Hallo,
Ich hab mit dem Tutorial von thomasbe (http://www.tutorials.de/forum/java-tutorials/330869-java-media-framework.html) jetzt einen Player zusammengebastelt mit schöner Oberfläche, Wiedergabeliste etc.
Momentan häng ich dabei noch an 2 Problemen und komm damit einfach nicht weiter, weil ich auch online nichts finde...
1. Steuerung über einen Slider
Das erste Problem ist, dass ich einen JSlider hab, welcher den Fortschritt des Songs repräsentiert. Zu dieser Umsetzung habe ich auch das Beispiel aus dem Tutorial verwendet und es entsprechend abgeändert.
Nun soll man aber über diesen Slider auch manuell den Fortschritt setzen können.
Allerdings startet er den Song jedes mal von vorne...
Relevanter Code:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
public void play() { if(player != null) player.stop(); //sollte schon etwas laufen try { player = Manager.createRealizedPlayer(new File(songPfad).toURI().toURL()); //Player mit dem Pfad neu setzen songLänge = (int) player.getDuration().getSeconds(); //Länge ermitteln player.setMediaTime(pausiertZeit); //sollte vorher pausiert worden sein player.start(); //setzen stop = false; //ist ein in den Attributen definierter boolean refresherThread = new Thread() { //Thread, der alle 100ms das refresherRunnable aufruft { setPriority(Thread.MIN_PRIORITY); } public void run() { try { while ((refresherRunnable != null) && (!stop) && (!isInterrupted())) { SwingUtilities.invokeLater(refresherRunnable); sleep(100); } } catch (InterruptedException e) { e.printStackTrace(); } } }; //Runnable Thread refresherRunnable = new Runnable() { //Runnable, welches den fortschrittSlider sowie die beiden Slider aktualisiert public void run() { int fortschritt = (int)player.getMediaTime().getSeconds(); int position = (100*fortschritt)/songLänge; //Berechnung der Position auf dem Slider fortschrittSlider.setValue(position); //Setzen } }; refresherThread.start(); //Thread starten
Ansätze waren bisher: ChangeListener, was allerdings mit dem "nur" 100-millisekündlichen Update und dem daraus resultierenden ständigen Neu-Setzen der Zeit zu unerwünschten Problemen führt
Außerdem hab ich's mit einem MouseListener versucht, das sieht momentan so aus:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
fortschrittSlider = new JSlider(); //wurde auch schon mit private JSlider fortschrittSlider; in den Attributen definiert fortschrittSlider.setValue(0); fortschrittSlider.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent evt) { stop=true; //refresherThread anhalten, da der Slider sonst jedes Mal neu bewegt wird refresherThread.interrupt(); zeitSetzen(fortschrittSlider.getValue()); } public void mouseClicked(MouseEvent evt) { stop=true; //refresherThread anhalten, da der Slider sonst jedes Mal neu bewegt wird refresherThread.interrupt(); zeitSetzen(fortschrittSlider.getValue()); } });
Letztendlich die Methode, in der die Zeit gesetzt werden soll:
Code java:1 2 3 4 5 6 7 8
public void zeitSetzen(int wert) { player.stop(); //anhalten long zeit = songLänge * wert* 10; //Zeitberechnung (eigentlich wert/100), aber da Time die Millisekunden verlangt, *10 pausiertZeit = new Time(zeit); //new Time(Millisekunden) play(); //wieder starten }
Wie gesagt, springt er nun beim Klick immer auf 0 zurück.. Vielleicht steh ich auch nur auf der Leitung und hab bei der Berechnung was falsch gemacht oder derartiges.
Wenn jemand einen Tipp (gern auch mehrere) für mich hat, wäre ich sehr froh, diesen zu hören.
2. Automatisch nächsten Song abspielen
Nun soll der Player auch automatisch den nächsten Song abspielen können.
Hierfür überlege ich noch über den passenden Ansatz.
Da ich in der API nichts entsprechendes gelesen habe (außer vielleicht der Controller, welcher mir aber auch nicht geeignet erscheint), habe ich mir gedacht, dass es das simpelste wäre, einen Timer mitlaufen zu lassen, der dann am Songende den nächsten aufruft.
Gibt es da eine bessere Lösung bzw. gar eine Methode des JMF?
Ich bin für jegliche Hinweise, Tips etc. dankbar; Vielen Dank im Voraus!
Gruß,
Martin
-
Hi nochmal,
hat denn keiner eine Idee? Hab in der Zwischenzeit leider immer noch keine Lösung gefunden und wär um eine solche umso dankbarer...
Danke im Voraus für (hoffentlich kommende) Antworten.
Gruß,
Martin
-
Hab mich jetzt nach längerer Zeit mal wieder mit dem Thema beschäftigt...
Wen die Lösung interessiert:
1. Steuerung über Slider
Das Problem hatte am Schluss auch etwas mit der Berechnung via Integer und double zu tun.Code java:1 2 3 4 5 6 7 8 9 10 11 12
public void zeitSetzen(int prozent) { player.stop(); //erstmal Player anhalten /* Zeitberechnung */ double doubleprozent = (double)prozent/100; double neueZeit = (songLänge * doubleprozent); pausiertZeit = new Time(neueZeit); //Zeit setzen play(); //neustarten //Anmerkung: bei play() wird dem Player die pausiertZeit übergeben und gesetzt, //wodurch das Ändern der Zeit letztendlich realisiert wird. }
2. Automatisch nächsten Song abspielen
Hierfür gibt es zwar laut API ein Event, jedoch erschien mir die Variante über den Timer dann doch einfacher:
Code java:1 2 3
nächsterSongTimer = new Timer((int) (songLänge-pausiertZeit.getSeconds())*1000, this); //Timer mit (verbleibender) Zeit (ms) erstellen //Ist die pausierte Zeit 0, so wird einfach die songLänge verwendet, was meistens der Fall ist nächsterSongTimer.start(); //starten
Gruß,
Martin
Ähnliche Themen
-
nächsten Eintrag automatisch finden
Von Steusi im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 19.01.09, 17:00 -
Mc automatisch rückwärts abspielen
Von nbeyond im Forum Flash PlattformAntworten: 3Letzter Beitrag: 19.10.08, 15:29 -
swf wie eine flv abspielen und steuern
Von drsoa im Forum Flash PlattformAntworten: 1Letzter Beitrag: 29.08.08, 21:42 -
Song aus einer ListBox abspielen
Von mathon im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 15.09.06, 05:50 -
abspielen von avi / video mit keys framegenau steuern?
Von piXel-issue im Forum Cinema 4DAntworten: 11Letzter Beitrag: 22.03.05, 20:00





Zitieren
Login




