MP3 in Java abspielen

  1. Abspielen einer MP3-Datei mit JLayer
  2. Abspielen einer MP3-Datei mit JACo MP3Player

Heute werden wir uns die Möglichkeiten ansehen, wie man MP3 in Java abspielen kann. Die nativen Bibliotheken von Java erlauben es uns nicht, Audio im MP3-Format abzuspielen, daher verwenden wir hier zwei externe Bibliotheken, die eine minimale Einrichtung erfordern.

Abspielen einer MP3-Datei mit JLayer

Im Folgenden erstellen wir eine Klasse namens MP3Player und zwei Variablen, wobei die erste der String ist, der den Namen und den Pfad der abzuspielenden MP3-Datei enthält, und die zweite Variable das Objekt jlPlayer der Klasse Player ist. Dann generieren wir einen Konstruktor der Klasse MP3Player und nehmen den mp3FileToPlay String als Parameter und initialisieren die Klassenvariable.

Wir machen eine play()-Methode, die mp3FileToPlay nimmt und an den Konstruktor von FileInputStream übergeben, der die Datei in einen InputStream umwandelt, und dann übergeben wir dieses InputStream-Objekt an BufferedInputStream, der es konvertiert in einen BufferedInputStream. Nun übergeben wir das Objekt bufferedInputStream an den Konstruktor der Klasse Player, der ein Objekt zurückgibt.

Beachten Sie, dass der Thread, in dem das Audio abgespielt wird, blockiert wird, bis die Audioverarbeitung abgeschlossen ist. Wir wollen den Hauptthread nicht blockieren, also erstellen wir einen neuen Thread() und rufen darin die Methode run() auf. In der Methode run() rufen wir die Funktion play() auf, die mit der Klasse Player der Bibliothek geliefert wird. Um den Thread zu starten, rufen wir die Funktion start() des Threads auf.

Nun initialisieren wir in der Methode main() filename mit dem MP3-Dateinamen und erzeugen dann ein Objekt der Klasse MP3Player mit dem im Konstruktor übergebenen filename. Um das Audio zu starten, rufen wir mp3Player.play() auf. Danach erhalten wir das Objekt Scanner und nehmen Eingaben vom Benutzer entgegen, wenn die Eingabe gleich stop ist, dann rufen wir mp3Player.close() auf, das die Methode close() des Player aufruft Klasse, und es stoppt die Musik.

import javazoom.jl.player.Player;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.util.Scanner;


public class PlayMP3 {
    public static void main(String[] args) {

        String filename = "example.mp3";
        MP3Player mp3Player = new MP3Player(filename);
        mp3Player.play();

        Scanner sc = new Scanner(System.in);

        System.out.println("Write stop to stop the music: ");

        if (sc.nextLine().equalsIgnoreCase("stop")) {
            mp3Player.close();
        }

    }
}

class MP3Player {
    private final String mp3FileToPlay;
    private Player jlPlayer;

    public MP3Player(String mp3FileToPlay) {
        this.mp3FileToPlay = mp3FileToPlay;
    }

    public void play() {
        try {
            FileInputStream fileInputStream = new FileInputStream(mp3FileToPlay);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
            jlPlayer = new Player(bufferedInputStream);
        } catch (Exception e) {
            System.out.println("Problem playing mp3 file " + mp3FileToPlay);
            System.out.println(e.getMessage());
        }

        new Thread() {
            public void run() {
                try {
                    jlPlayer.play();
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
            }
        }.start();


    }
    
    public void close() {
        if (jlPlayer != null) jlPlayer.close();
    }
}

Abspielen einer MP3-Datei mit JACo MP3Player

JACo MP3Player ist eine externe Bibliothek, die wir in unser Projekt aufnehmen müssen, um sie nutzen zu können. Dies ist eine sehr kleine Bibliothek und einfach zu integrieren. Im folgenden Beispiel erstellen wir ein Objekt der Klasse MP3Player, das eine Klasse aus der Bibliothek ist. Wir übergeben ein File-Objekt im Konstruktor von MP3Player. Wir rufen die Funktion play() aus der MP3Player-Klasse auf, um das Audio zu starten.

Um die Audioverarbeitung zu stoppen, überprüfen wir zunächst mit der Methode isStopped(), ob das Audio gestoppt wurde, und wenn es gestoppt wurde, rufen wir Thread.sleep() auf, das den Thread für einige Zeit anhält.

import jaco.mp3.player.MP3Player;

import java.io.File;

public class PlayMP3 {
    public static void main(String[] args) {

        try {

            File f = new File("example.mp3");

            MP3Player mp3Player = new MP3Player(f);
            mp3Player.play();

            while (!mp3Player.isStopped()) {
                Thread.sleep(5000);
            }
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}