Lire des mp3 en Java

  1. Lire un fichier MP3 à l’aide de JLayer
  2. Lire un MP3 avec JACo MP3Player

Aujourd’hui, nous allons voir comment lire des MP3 en Java. Les bibliothèques natives de Java ne nous permettent pas de lire de l’audio au format MP3, nous utilisons donc ici deux bibliothèques externes qui nécessitent une configuration minimale.

Lire un fichier MP3 à l’aide de JLayer

Ci-dessous, nous créons une classe appelée MP3Player et deux variables dans lesquelles la première est la chaîne qui contiendra le nom et le chemin du fichier MP3 à lire, et la deuxième variable est l’objet jlPlayer de la classe Player. Ensuite, nous générons un constructeur de la classe MP3Player et prenons la chaîne mp3FileToPlay en paramètre et initialisons la variable de classe.

On fait une méthode play() qui prend le mp3FileToPlay et le passe au constructeur de FileInputStream qui convertit le fichier en un InputStream puis on passe cet objet InputStream à BufferedInputStream qui le convertit dans un BufferedInputStream. Passons maintenant l’objet BufferedInputStream au constructeur de la classe Player qui renvoie un objet.

Une chose à noter est que le thread dans lequel l’audio est lu est bloqué jusqu’à ce que le traitement audio soit terminé. Nous ne voulons pas bloquer le thread principal, nous créons donc un nouveau Thread() et appelons la méthode run() à l’intérieur. Dans la méthode run(), nous appelons la fonction play() fournie avec la classe Player de la bibliothèque. Pour démarrer le thread, nous appelons la fonction start() du thread.

Maintenant dans la méthode main(), nous initialisons filename avec le nom de fichier MP3 puis créons un objet de la classe MP3Player avec le filename passé dans son constructeur. Pour démarrer l’audio, nous appelons mp3Player.play(). Après cela, nous obtenons l’objet Scanner et prenons l’entrée de l’utilisateur si l’entrée est égale à stop, puis nous appelons le mp3Player.close() qui appelle la méthode close() du Player classe, et il arrête la musique.

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();
    }
}

Lire un MP3 avec JACo MP3Player

JACo MP3Player est une bibliothèque externe que nous devons inclure dans notre projet pour pouvoir l’utiliser. Il s’agit d’une très petite bibliothèque et facile à intégrer. Dans l’exemple suivant, nous créons un objet de la classe MP3Player qui est une classe de la bibliothèque. Nous passons un objet File dans le constructeur de MP3Player. Nous appelons la fonction play() de la classe MP3Player pour démarrer l’audio.

Pour arrêter le traitement audio, nous vérifions d’abord si l’audio s’est arrêté en utilisant la méthode isStopped(), et s’il est arrêté, nous appelons Thread.sleep() qui met le thread en pause pendant un certain temps.

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());
        }
    }
}