# JMF Player spielt mp3 nur ohne Ton



## Lexi (17. Jan 2010)

Guten Tag 


```
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.media.AudioDeviceUnavailableEvent;
import javax.media.ControllerAdapter;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.StartEvent;
import javax.media.StopEvent;

public class PlayerTest3 {
	public static void main(String[] args){
		Player p = null;
		ControllerAdapter ca = new ControllerAdapter();
		ControllerListener cl = new ControllerAdapter(){
			@Override
			public void endOfMedia(EndOfMediaEvent e){
				System.out.println("EndOfMedia");
			}
			@Override
			public void audioDeviceUnavailable(AudioDeviceUnavailableEvent e){
				System.out.println("Audiodevice is not availible");
			}
			@Override
			public void start(StartEvent se){
				System.out.println("Got startEvent");
			}

			@Override
			public void stop(StopEvent se){
				System.out.println("Got stopEvent");
			}
		};

		try {
			p = Manager.createPlayer(new URL("file:///home/delexi/Musik/test.mp3"));
		} catch (NoPlayerException e) {
			// FIXME Auto-generated catch block
			e.printStackTrace();
		} catch (MalformedURLException e) {
			// FIXME Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// FIXME Auto-generated catch block
			e.printStackTrace();
		}
		p.addControllerListener(cl);
		System.out.println("Created");

		p.prefetch();
		System.out.println("Prefetched");
		p.realize();
		System.out.println("Realized");
		p.start();
		System.out.println("Started");
	}
}
```

Wenn ich oben stehenden Code ausführe bekomme ich zunächste einmal Folgendes auf der Konsole ausgegeben:

```
Created
Prefetched
Realized
Started
Got startEvent
```
Allerdings passiert nun nichts weiter. Ich höre nichts und es wird auch kein EndOfMedia- oder StopEvent ausgelöst. Jegliche Fehlermeldungen bleiben auch aus.
Die MP3 Datei ist vollkommen in Ordnung und kann mit anderen Playern ( VLC, Rythmbox, ... ) ohne weiteres abgespielt werden.
Was mache ich falsch ?


----------



## The_S (18. Jan 2010)

Player API-Doc



> Starts the player as soon as possible



Evtl. verhindert irgendetwas den Start? Versuchs doch mal mit anderen mp3s oder lad die mp3 mal hoch. Habe schon festgestellt, dass das JMF mit manchen mp3s Probleme hat, die auf anderen Playern laufen. Generell ist das JMF recht veraltet, evtl. funktioniert das fmj besser? Oder vielleicht hilft dir das hier auch weiter: http://www.java-forum.org/allgemeine-java-themen/34626-kleine-mp3-lib.html


----------



## Lexi (23. Jan 2010)

In deinem alten Thread benutzt du Jlayer, sofern ich das jetzt richtig gesehen habe, ist das nicht ebenfalls total veraltet ?

Zum fmj: Kennst du eventuell ein Tutorial zu diesem Framework ?


----------



## The_S (25. Jan 2010)

kA, aber als ich es damals verwendet habe, war es zumindest noch aktueller als das JMF. Beim FMJ findest du eigentlich vieles auf der Website, generell sind JMF und FMJ aber API-Kompatibel, so dass der Umstieg nicht sonderlich schwer fallen sollte.


----------



## Heady86 (25. Jan 2010)

Hi,

so wie versprochen hab ichs mir mal angekuckt 

Also dein Code läuft bei mir auch nicht, da bekomm ich die Meldung:


> Unable to realize com.sun.media.amovie.AMController



Ich habs dann mal bis auf ein Minimum runtergebrochen, aber er scheint bei mir dann den Teil bei mir nicht zu mögen: 

```
"file:///home/delexi/Musik/test.mp3"
```

Ich hab bei mir nämlich gar keine einzelnen mp3s rein, sondern es wird immer eine per Zufall ausgewählt, das tut komischerweise ohne Probleme. Ich poste mal den Ausschnitt, vielleicht hilft es dir ja.
Code ist nicht gerade schön und einen deprecated teil nutz ich auch, war ja aber auch nur ein Test.

```
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Random;

import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;


public class PlayerTest3 {

		
   private static Player player;
			
		
   public static File get (File[] fileList) {
      Random generator = new Random();
      int rnd = generator.nextInt(fileList.length);
      return fileList[rnd];
   }
		
   public static void main(String[] args) {
						
     File dir = new File("E:\\Musikvideos\\mp3");

     final File[] fileList = dir.listFiles();
			
     final File ret = PlayerTest3.get(fileList);
			
     try {
						
        player = Manager.createPlayer(ret.toURL());
						
        } catch (NoPlayerException e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
        } catch (MalformedURLException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
       } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
     }

     player.start();
			
   }
			
}
```


----------



## The_S (26. Jan 2010)

Evtl. fehlt der Codec auf dem Betriebssystem?


----------



## Heady86 (26. Jan 2010)

Hi,

also die oben genannte Fehlermeldung kam selbst bei meinem Code als ich ein einzelnes File aufrufen wollte, genau der gleiche Code geht aber wenn ichs wie oben über ein Verzeichnis mach. Bin bisher daraus noch nicht schlau geworden.

grüße


----------



## homer65 (26. Jan 2010)

Es ist doch so das das JMF von Sun aus lizenzrechtlichen Gründen gar kein MP3 mehr unterstützt. Oder irre ich mich da.
Jedenfalls habe ich bei meinem MP3 Player eine Bibliothek von JavaZOOM benutzt. Mag sein das es auch noch andere gibt.


----------



## Lexi (26. Jan 2010)

@Heady Ich habs jetzt mal mit 
	
	
	
	





```
dir.listFiles()
```
 und 
	
	
	
	





```
fileList[1].toURL()
```
 versucht, hatte allerdings keinen Erfolg.

@The_S API kompatibel heißt also, dass ich meinen jetzt geschriebenen Code genauso übernehmen kann, abgesehen von den Imports, die dann aus dem anderen Package ( fmj ) kommen müssen ?

Kann es wirklich an den Codecs liegen, wenn ich mp3 Dateien außerhalb Java ohne Probleme wiedergeben kann ?

PS: Ich verwende Ubuntu 9.10 NBR


----------



## The_S (27. Jan 2010)

Lexi hat gesagt.:


> @The_S API kompatibel heißt also, dass ich meinen jetzt geschriebenen Code genauso übernehmen kann, abgesehen von den Imports, die dann aus dem anderen Package ( fmj ) kommen müssen ?



Habs nie ausprobiert, aber sollte so gehen, ja


----------



## Heady86 (27. Jan 2010)

Lexi hat gesagt.:
			
		

> @Heady Ich habs jetzt mal mit
> 
> 
> 
> ...



Hast du auch einfach mal meinen Code übernommen und den probiert obs so bei dir läuft?
Dann konnt man evtl. ein bischen einkreisen obs an dem Part mit dem Controller liegt.

Grüße


----------



## Lexi (31. Jan 2010)

Heady, dein Code bringt die gleichen Ergebnisse, wie meiner.

Muss ich eigentlich das MP3Plugin installiert haben ?


----------



## The_S (1. Feb 2010)

wäre Vorteilhaft, wenn du  mp3s abspielen willst


----------



## Lexi (1. Feb 2010)

Das MP3 Plugin habe ich installiert, allerdings hilft das ebenfalls nicht weiter.

Ist es nötig die jmf.jar und die mp3plugin.jar in das /lib/ext/ Verzeichnis der JRE zu kopieren und dann den "java com.sun.media.codec.audio.mp3.JavaDecoder" Befehl auszuführen ? Kann man das nicht auch anders lösen ? zb die beiden jars in den Class-Path mit einbinden ?

Ich werde das ganze gleich mal an meinem Windows Rechner testen und die Ergebnisse hier posten.

Hat jemand noch Ideen, was hier schief laufen könnte ?


----------



## The_S (1. Feb 2010)

Schief läuft, dass du JMF mit mp3 und das auch noch unter Linux verwenden willst. Das JMF mit mp3 habe ich nur unter Windows zum Laufen gebracht, und dann auch nur, wenn ich das komplette Installationspackage verwendet habe - also nix über den Classpath eingebunden habe.

Noch mal der Tipp: Versuchs mit dem fmj oder mit javazoom.


----------

