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.
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.
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:
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
Um eine mp3 abspielen zu lassen, benötigst du mindestens die folgenden beiden Klassen aus dem javafx.scene.media Paket:
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 🤘
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:
Mehr davon findest du in der offiziellen Oracle-Documentation: Die Klasse MediaPlayer
Java Basics
[Java einrichten] [Variablen] [Primitive Datentypen] [Operatoren] [if else] [switch-case] [Arrays] [Schleifen]
Objektorientierung
[Einstieg] [Variablen ] [Konstruktor] [Methoden] [Rekursion] [Statische Member] [Initializer] [Pass-by-value] [Objektsammlungen] [Objektinteraktion] [Objekte löschen]
Klassenbibliothek
[Allgemeines] [String ] [Math] [Wrapper] [Scanner] [java.util.Arrays] [Date-Time-API]