web-dev-qa-db-fra.com

Jouer au format .mp3 et .wav en Java?

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.

104
Stan

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;
110
jasonwaste

J'ai écrit un pur lecteur Java mp3: mp3transform .

30
Thomas Mueller

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

18
Gustavo Marques

Cela fait longtemps que je ne l’utilise pas, mais JavaLayer est idéal pour la lecture MP3.

15
Mark Heath

A l'aide de l'API javax.sound standard, une dépendance Maven unique, entièrement Open Source ( Java 7 requise):

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:

13
odoepner

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:

  • basicplayer3.0.jar
  • all les fichiers JAR du répertoire lib (dans BasicPlayer3.0)

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.

13
Ivo

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;
5
Vlad

Pour proposer aux lecteurs une autre alternative, je suggère la bibliothèque JACo MP3 Player, un lecteur MP3 multi-plateformes Java.

Fonctionnalités:

  • 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 (sous forme d'applet).

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.

4
Mr. Xymon

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

2
Kasun Shamentha

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.

1
Spencer Rathbun

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

  }

}
0
Nikhil Chauhan

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é.

0
Andrew Thompson