Comment puis-je lire un fichier .mp3
et un fichier .wav
dans mon application Java? J'utilise Swing. J'ai essayé de chercher sur Internet quelque chose comme cet exemple:
public void playSound() {
try {
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("D:/MusicPlayer/fml.mp3").getAbsoluteFile());
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();
} catch(Exception ex) {
System.out.println("Error with playing sound.");
ex.printStackTrace();
}
}
Mais cela ne fera que lire les fichiers .wav
.
De même:
http://www.javaworld.com/javaworld/javatips/jw-javatip24.html
Je veux pouvoir lire les fichiers .mp3
et les fichiers .wav
avec la même méthode.
Java FX a les classes Media
et MediaPlayer
qui liront les fichiers mp3.
Exemple de code:
String bip = "bip.mp3";
Media hit = new Media(new File(bip).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();
Vous aurez besoin des déclarations d'importation suivantes:
import Java.io.File;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
J'ai écrit un pur lecteur Java mp3: mp3transform .
vous pouvez jouer au format .wav uniquement avec Java API:
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
code:
AudioInputStream audioIn = AudioSystem.getAudioInputStream(MyClazz.class.getResource("music.wav"));
Clip clip = AudioSystem.getClip();
clip.open(audioIn);
clip.start();
Et jouez en .mp3 avec jLayer
Cela fait longtemps que je ne l’utilise pas, mais JavaLayer est idéal pour la lecture MP3.
A l'aide de l'API javax.sound standard, une dépendance Maven unique, entièrement Open Source ( Java 7 requise):
<!--
We have to explicitly instruct Maven to use tritonus-share 0.3.7-2
and NOT 0.3.7-1, otherwise vorbisspi won't work.
-->
<dependency>
<groupId>com.googlecode.soundlibs</groupId>
<artifactId>tritonus-share</artifactId>
<version>0.3.7-2</version>
</dependency>
<dependency>
<groupId>com.googlecode.soundlibs</groupId>
<artifactId>mp3spi</artifactId>
<version>1.9.5-1</version>
</dependency>
<dependency>
<groupId>com.googlecode.soundlibs</groupId>
<artifactId>vorbisspi</artifactId>
<version>1.0.3-1</version>
</dependency>
import Java.io.File;
import Java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine.Info;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
import static javax.sound.sampled.AudioSystem.getAudioInputStream;
import static javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED;
public class AudioFilePlayer {
public static void main(String[] args) {
final AudioFilePlayer player = new AudioFilePlayer ();
player.play("something.mp3");
player.play("something.ogg");
}
public void play(String filePath) {
final File file = new File(filePath);
try (final AudioInputStream in = getAudioInputStream(file)) {
final AudioFormat outFormat = getOutFormat(in.getFormat());
final Info info = new Info(SourceDataLine.class, outFormat);
try (final SourceDataLine line =
(SourceDataLine) AudioSystem.getLine(info)) {
if (line != null) {
line.open(outFormat);
line.start();
stream(getAudioInputStream(outFormat, in), line);
line.drain();
line.stop();
}
}
} catch (UnsupportedAudioFileException
| LineUnavailableException
| IOException e) {
throw new IllegalStateException(e);
}
}
private AudioFormat getOutFormat(AudioFormat inFormat) {
final int ch = inFormat.getChannels();
final float rate = inFormat.getSampleRate();
return new AudioFormat(PCM_SIGNED, rate, 16, ch, ch * 2, rate, false);
}
private void stream(AudioInputStream in, SourceDataLine line)
throws IOException {
final byte[] buffer = new byte[4096];
for (int n = 0; n != -1; n = in.read(buffer, 0, buffer.length)) {
line.write(buffer, 0, n);
}
}
}
Je recommanderais d'utiliser le BasicPlayerAPI. Il est open source, très simple et ne nécessite pas JavaFX. http://www.javazoom.net/jlgui/api.html
Après avoir téléchargé et extrait le fichier Zip, vous devez ajouter les fichiers JAR suivants au chemin de génération du projet:
Voici un exemple d'utilisation minimaliste:
String songName = "HungryKidsofHungary-ScatteredDiamonds.mp3";
String pathToMp3 = System.getProperty("user.dir") +"/"+ songName;
BasicPlayer player = new BasicPlayer();
try {
player.open(new URL("file:///" + pathToMp3));
player.play();
} catch (BasicPlayerException | MalformedURLException e) {
e.printStackTrace();
}
Importations requises:
import Java.net.MalformedURLException;
import Java.net.URL;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerException;
C'est tout ce dont vous avez besoin pour commencer à jouer de la musique. Le lecteur démarre et gère son propre fil de lecture et fournit une lecture, une pause, une reprise, un arrêt et cherche fonctionnalité.
Pour une utilisation plus avancée, jetez un coup d’œil au lecteur de musique jlGui. C'est un clone open source WinAmp: http://www.javazoom.net/jlgui/jlgui.html
La première classe à regarder serait PlayerUI (à l'intérieur du paquet javazoom.jlgui.player.amp). Il illustre assez bien les fonctionnalités avancées du BasicPlayer.
Le moyen le plus simple que j’ai trouvé était de télécharger le fichier JL de JLayer à partir de http://www.javazoom.net/javalayer/sources.html et de l’ajouter à la bibliothèque Jar http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29
Voici le code pour la classe
public class SimplePlayer {
public SimplePlayer(){
try{
FileInputStream fis = new FileInputStream("File location.");
Player playMP3 = new Player(fis);
playMP3.play();
} catch(Exception e){
System.out.println(e);
}
}
}
et voici les importations
import javazoom.jl.player.*;
import Java.io.FileInputStream;
Pour proposer aux lecteurs une autre alternative, je suggère la bibliothèque JACo MP3 Player, un lecteur MP3 multi-plateformes Java.
Fonctionnalités:
Pour une liste complète de ses méthodes et attributs, vous pouvez consulter sa documentation here .
Exemple de code:
import jaco.mp3.player.MP3Player;
import Java.io.File;
public class Example1 {
public static void main(String[] args) {
new MP3Player(new File("test.mp3")).play();
}
}
Pour plus de détails, j'ai créé un tutoriel simple ici qui inclut un code source téléchargeable.
Vous devez d'abord installer JMF ( télécharger en utilisant ce lien )
File f = new File("D:/Songs/preview.mp3");
MediaLocator ml = new MediaLocator(f.toURL());
Player p = Manager.createPlayer(ml);
p.start();
n'oubliez pas d'ajouter des fichiers jar JMF
Effectuez une recherche sur freshmeat.net pour JAVE (signifie Java Encoder Audio/Vidéo) Bibliothèque (link here ). C'est une bibliothèque pour ce genre de choses. Je ne sais pas si Java a une fonction mp3 native.
Vous devrez probablement encapsuler la fonction mp3 et la fonction wav ensemble, à l'aide de l'héritage et d'une fonction d'encapsuleur simple, si vous souhaitez qu'une méthode exécute les deux types de fichiers.
Utilisation de décodeur/lecteur/convertisseur MP Dépendance maven.
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
import Java.io.FileInputStream;
import Java.io.FileNotFoundException;
public class PlayAudio{
public static void main(String[] args) throws FileNotFoundException {
try {
FileInputStream fileInputStream = new FileInputStream("mp.mp3");
Player player = new Player((fileInputStream));
player.play();
System.out.println("Song is playing");
while(true){
System.out.println(player.getPosition());
}
}catch (Exception e){
System.out.println(e);
}
}
}
Pour ajouter la prise en charge de la lecture MP3 à Java Sound, ajoutez le mp3plugin.jar
du fichier JMF au chemin de classe au moment de l'exécution de l'application.
Notez que la classe Clip
a des limitations de mémoire qui la rendent inutilisable pendant plus de quelques secondes de son de haute qualité.