Lecture.mp3 et.wav en Java?
Comment puis-je lire un fichier .mp3
et un fichier .wav
dans mon application Java? Je suis à l'aide de Swing. J'ai essayé de regarder sur internet, pour 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 lira que les fichiers .wav
.
La même chose avec:
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.
12 réponses
Java FX a des classes Media
et MediaPlayer
qui vont lire des 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 instructions d'importation suivantes:
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
Vous pouvez jouer .wav uniquement avec l'API java:
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 jouer. mp3 avec jLayer
Cela fait un moment que je ne l'ai pas utilisé, mais JavaLayer est idéal pour la Lecture MP3
Je recommande d'utiliser le BasicPlayerAPI. C'est open source, très simple et il ne nécessite pas JavaFX. http://www.javazoom.net/jlgui/api.html
Après avoir téléchargé et extrait le fichier zip, il faut ajouter les fichiers jar suivants au chemin de construction du projet:
- basicplayer3. 0.jar
- Tous Les pots du répertoirelib (à L'intérieur de BasicPlayer3. 0)
Voici un usage minimaliste exemple:
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 thread de lecture et fournit la fonctionnalitéplay, pause, resume, stop etseek .
Pour une utilisation plus avancée, vous pouvez jeter un oeil 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.joueur.amp). Il démontre assez bien les fonctionnalités avancées de BasicPlayer.
En utilisant javax standard.API audio, une seule dépendance Maven, complètement Open Source (Java 7 requis):
Pom.xml
<!--
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>
Code
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);
}
}
}
Références:
Le moyen le plus simple que j'ai trouvé était de télécharger le fichier jar JLayer à partir de http://www.javazoom.net/javalayer/sources.html et pour l'ajouter à la bibliothèque Jar http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29
Voici le code de 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 donner aux lecteurs une autre alternative, je suggère Jaco MP3 Player library, un lecteur MP3 java multi-plateforme.
Caractéristiques:
- Très faible utilisation du processeur (~2%)
- incroyable petite bibliothèque (~90KB)
- n'a pas besoin de JMF (Java Media Framework)
- , facile à intégrer dans n'importe quelle application
- , facile à intégrer dans n'importe quelle page web (applet).
Pour une liste complète de ses méthodes et attributs, vous pouvez consulter sa documentation ici.
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
Faites une recherche de freshmeat.net pour JAVE (signifie Java Audio Video Encoder) Bibliothèque (lien ici). C'est une bibliothèque pour ce genre de choses. Je ne sais pas si Java a une fonction MP3 native.
Vous aurez probablement besoin d'envelopper la fonction mp3 et la fonction wav ensemble, en utilisant l'héritage et une simple fonction wrapper, si vous voulez une méthode pour exécuter les deux types de fichiers.
Pour ajouter la prise en charge de la lecture MP3 au son Java, ajoutez le mp3plugin.jar
du JMF au chemin de classe d'exécution de l'application.
Notez que la classe Clip
a des limitations de mémoire qui la rendent inadaptée pour plus de quelques secondes de son de haute qualité.
Utilisez cette bibliothèque: import sun.audio.*;
public void Sound(String Path){
try{
InputStream in = new FileInputStream(new File(Path));
AudioStream audios = new AudioStream(in);
AudioPlayer.player.start(audios);
}
catch(Exception e){}
}