JAVA

Java MP3 MediaPlayer

2023-09-24 | credit: AS Photo Family

Overview

Um Audio und Video-Daten über Java abspielen zu lassen, gibt es in JavaFX die sehr praktische Media-API für genau diesen Zweck. Wie genau das funktioniert, schauen wir uns in diesem Tutorial anhand eines abspielbaren MP3-Songs einmal an. 

Media einbinden

Die API-Medien-Klassen, die für die Wiedergabe von Audio und Video am besten geeignet sind, befinden sich im Klassenpaket javafx.scene.media.

In der Java-Version, mit der wir gerade arbeiten (JDK 16), sind die Media-Bibliothek und das Media-Modul allerdings nicht standardmäßig installiert und wir müssen sie daher erst noch in das Projekt einbinden. Solltest du noch nicht mit JavaFX gearbeitet haben, empfehlen wir dir, zuerst das JavaFX Einsteiger-Tutorial zu machen. 

Media Klassen einbinden

Im ersten Schritt holen wir uns die Media-API, die über das Klassenpaket javafx.scene.media repräsentiert wird. Gehe dazu in intelliJ auf File > Project Structure und dann auf Libraries. Klicke dann auf das (+) und füge die neue Bibliothek von "From Maven..." hinzu. Im nun erscheinenden Download-Fenster gibst du folgende URL zum Maven Repository ein: 

org.openjfx:javafx-media:16

Bestätige anschließend mit OK, um die API in dein Projekt-Modul einzubinden. Die erforderlichen Media-Klassen stehen danach zur Verfügung: 

JavaFX Media Play

Media Modul hinzufügen

Die Klassen an sich reichen aber noch nicht! Wir müssen das Modul javafx.media noch explizit unserem Modul-Path hinzufügen. 

Gehe hierzu in intelliJ im Menu oben auf Run > Edit Configurations... . Stelle sicher, dass "Add VM Options" in intelliJ aktiviert ist. Füge jetzt das Modul javafx.media am Ende deines Modul-Pfads als neues komma-separiertes Element hinzu. Dies könnte bei dir so aussehen: 

--module-path /PfadZurJavaFXBib/javafx-sdk-16-2/lib --add-modules javafx.controls,javafx.fxml,javafx.media

JavaFX Media Modul

Einen MediaPlayer erstellen

Um eine mp3 abspielen zu lassen, benötigst du mindestens die folgenden beiden Klassen aus dem javafx.scene.media Paket: 

  • javafx.scene.media.Media: Objekte dieser Klasse halten Informationen über die Art des Mediums, seine Quelle, Auflösung oder Meta-Daten.
  • javafx.scene.media.MediaPlayer: Nimmt ein Media-Objekt auf und steuert die Wiedergabe des Media-Objekts. 

Erstellen wir also aufbauend auf diesen beiden Hauptklassen einen eigenen Player: 

public class Music {

    public static MediaPlayer mp;

    public void startMusic(){
        String path = "https://falconbyte.net/ressources/music/cnc_Industrial.mp3";
        Media media = new Media(new File(path).toPath().toString());
        mp  = new MediaPlayer(media);
        mp.play();
    }

}
// JavaFX Startklasse
public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{

        Music m2 = new Music(); // Music-Objekt erstellen
        m2.startMusic(); 

    }

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

In unserer Klasse Music befindet sich die statische MediaPlayer Referenz mp. Sie ist deshalb statisch, weil der Garbage Collector in bestimmten Java-Konfigurationen das Media-Player Objekt recht bald löscht, nachdem die Methode play() ausgeführt wurde und der Song würde nach wenigen Sekunden abbrechen.

Die Methode startMusic() erstellt dann ein lokales Media-Objekt mit einem String-Argument zum (hier: https) Pfad unserer MP3-Datei. Falls du auf eine lokale Audio-Datei verweist, verwende bei der String-Umwadlung statt toPath() die Methode toURI():

Media media = new Media(new File(path).toURI().toString());

Anschließend wird ein neues Objekt von MediaPlayer mit Media als Argument erzeugt und der Referenz mp zugewiesen.

Nun ist die MP3 steuerbar und wir lassen den Soundtrack über die Methode play() von MediaPlayer laufen 🤘

Methoden von MediaPlayer

In unserem Beispiel haben wir bislang für die Klasse MediaPlayer nur die Methode play() zum Start des Abspielens der Media-Datei genutzt. Klar, dass es eine ganze Reihe weiterer nützlicher Methoden gibt, zum Beispiel: 

  • setCycleCount(int value): Anzahl der Loops einer Media-Datei
  • pause(): Pausiert den Player
  • play(): Startet das Abspielen des Mediums
  • stop(): Stoppt das Abspielen des Mediums
  • setAutoPlay(boolean value): Legt den AutoPlay-Wert fest
  • setMute(boolean value): Stellt auf stumm
  • setVolume(double value): Bestimmt die Audio-Lautstärke

Mehr davon findest du in der offiziellen Oracle-Documentation: Die Klasse MediaPlayer

Werbung

Java lernen

Werde zum Java Profi!

PHP Lernen

Lerne serverbasierte Programmierung

JavaScript lernen

Skille dein Webcoding

FALCONBYTE.NET

Handmade with 🖤️

© 2018-2023 Stefan E. Heller

Impressum | Datenschutz | Changelog

Falconbyte Youtube Falconbyte GitHub facebook programmieren lernen twitter programmieren lernen discord programmieren lernen