Lire des mp3 en Java
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 java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.util.Scanner;
import javazoom.jl.player.Player;
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());
}
}
}
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn