# Eine mp3 Datei in Java abspielen



## MABY (15. Okt 2017)

Hallöchen Freunde!
Ich arbeite zur Zeit an einem kleinen Spiel. Grundsätzlich ist das Spiel von der GUI vollendet, allerdings benötige ich noch Sounds für das Spiel. Diese Sounds sollen am besten mp3 Dateien sein. Nun meine Frage: Wie kann ich mp3 Dateien in Java abspielen. Diese Frage wurde schon in mehreren Foren gestellt, allerdings konnte ich mit den gesamten Antworten nichts anfangen.
So sollte der Code dafür aussehen:

```
public class Mp3_Abspieler {
 
   public static void main(String args[]) {
 
       Mp3_Abspieler abspieler = new Mp3_Abspieler();
       abspieler.dateiAbspielen("/Users/maby/Desktop/Sound.mp3");
  
   }

   public void dateiAbspielen(String Dateipfad) {
       //Hier soll der Code fuer einen Mp3-Abspieler hin

   }

}
```
Danke!


----------



## Nuiton (15. Okt 2017)

Warum kannst du nichts mit Code anfangen? Wo liegt das Problem?


----------



## MABY (15. Okt 2017)

Nuiton hat gesagt.:


> Warum kannst du nichts mit Code anfangen? Wo liegt das Problem?


Der Code aus den Antworten funktioniert bei mir irgendwie nicht....
Kennt jemand eine einfach Möglichkeit, Mp3s abzuspielen?


----------



## Nuiton (15. Okt 2017)

Spontan fallen mir einige Methoden ein:

http://www.java2s.com/Code/Java/JavaFX/Playmp3file.htm


```
public class Main extends Application {

   @Override
   public void start(Stage primaryStage) {
       String path = Test.class.getResource("/meineDatei.mp3").toString();
       Media media = new Media(path);
       MediaPlayer mp = new MediaPlayer(media);
       mp.play();

       System.out.println("Playing...");
   }

   public static void main(String[] args) {
       launch(args);
   }

}
```
Quelle: https://stackoverflow.com/questions/24347658/getting-a-mp3-file-to-play-using-javafx


----------



## MABY (16. Okt 2017)

Danke für deine Antwort. Leider funktionieren beide Möglichkeiten bei mir nicht. Egal welche Möglichkeit ich ausprobiere, es kommt immer die "java.lang.reflect.InvocationTargetException".

Kenne mich mit den Exceptions noch nicht so aus. Wodurch wird diese Exception ausgelöst? Wie kann ich sie vermeiden?
LG MABY


----------



## VfL_Freak (16. Okt 2017)

Moin,


MABY hat gesagt.:


> Wodurch wird diese Exception ausgelöst?


https://stackoverflow.com/questions...e-java-lang-reflect-invocationtargetexception
VG Klaus


----------



## JuKu (18. Okt 2017)

Mit welcher Library hast du denn deine GUI geschrieben?
AWT, Swing, JavaFX, ... ?


----------



## MABY (19. Okt 2017)

JuKu hat gesagt.:


> Mit welcher Library hast du denn deine GUI geschrieben?
> AWT, Swing, JavaFX, ... ?


@JuKu Die habe ich mit Swing geschrieben...weshalb?


----------



## JuKu (23. Okt 2017)

@MABY Weil jedes GUI Framework andere Möglichkeiten mitbringt.
Bei Swing weiß ich es aber leider auch nicht mehr so genau, ich bin mir sicher, dass es möglich ist, aber nicht mehr wie.


----------



## krgewb (23. Okt 2017)

Im Zweifelsfall musst du wav verwenden.


----------



## krgewb (4. Dez 2017)

Wie hast du es letztendlich gemacht?


----------



## MABY (5. Dez 2017)

krgewb hat gesagt.:


> Wie hast du es letztendlich gemacht?


Leider nicht geschafft. Das muss ich mir noch mal anschauen :O


----------



## Xyz1 (16. Nov 2018)

Mal en Frage,
wieso muss ich den Umweg gehen über m, temp1 und temp2 sowie brauche dringend zwingend das JMF 2.1.1e zum Abspielen MP3 s?

```
com.mpatric.mp3agic.Mp3File m = new Mp3File(f);
    AudioInputStream temp1 = AudioSystem.getAudioInputStream(f);
    AudioFormat temp2 = temp1.getFormat();
    AudioInputStream audioStream = AudioSystem.getAudioInputStream(
            new AudioFormat(
                    AudioFormat.Encoding.PCM_SIGNED,
                    m.getSampleRate(),
                    16,
                    temp2.getChannels(),
                    temp2.getChannels() * 2,
                    m.getSampleRate(),
                    temp2.isBigEndian()), temp1);

    AudioFormat format = audioStream.getFormat();
//playit...
```

AudioFormat kennt Sample Rate nich, wieso externe Lib, wieso ist sampleSizeInBits immer 16, wieso ist frameSize immer das doppelte der channels?

Nun läuft es:
44 / 370 / 320kb / (CBR) / 44100 Hz

Mir scheint das wurde sooooo konzipiert dass man damit überhaupt nich MP3 s abspielen SOLL!!!!!


----------



## mihe7 (16. Nov 2018)

DerWissende hat gesagt.:


> Mir scheint das wurde sooooo konzipiert dass man damit überhaupt nich MP3 s abspielen SOLL!!!!!


Es ist eher so konzipiert, dass man über das SPI alles abspielen _kann_. MP3-Support war/ist(?) nicht enthalten, vermutlich aufgrund der Softwarepatente der Fraunhofer Gesellschaft, die spätestens 2017 erloschen sind.


----------



## Xyz1 (17. Nov 2018)

mihe7 hat gesagt.:


> MP3-Support war/ist(?) nicht enthalten



@mihe7 es lüppt hiermit aber ich bin noch nicht hellauf begeistert:

```
private static boolean tryToPlay(File[] listFiles, int index) {
        try {
            File f = listFiles[index];
            com.mpatric.mp3agic.Mp3File m = new Mp3File(f);
            AudioInputStream temp1 = AudioSystem.getAudioInputStream(f);
            AudioFormat temp2 = temp1.getFormat();
            AudioInputStream audioStream = AudioSystem.getAudioInputStream(
                    new AudioFormat(
                            AudioFormat.Encoding.PCM_SIGNED,
                            m.getSampleRate(),
                            16,
                            temp2.getChannels(),
                            temp2.getChannels() * 2,
                            m.getSampleRate(),
                            temp2.isBigEndian()), temp1);

            AudioFormat format = audioStream.getFormat();

            DataLine.Info info = new DataLine.Info(Clip.class, format);

            try (Clip audioClip = (Clip) AudioSystem.getLine(info)) {
                LListener llistener = new LListener();

                audioClip.addLineListener(llistener);

                audioClip.open(audioStream);

                audioClip.start();

                while (!llistener.playCompleted) {


                    // wait for the playback completes
                    Thread.sleep(1000);
                }
            }

            return true;
        } catch (InvalidDataException | UnsupportedTagException | IOException | InterruptedException | LineUnavailableException | UnsupportedAudioFileException e) {
            e.printStackTrace();

            return false;
        }
    }
```


----------

