Speel je .mp3 en .wav af in Java?

Hoe kan ik een .mp3– en een .wav-bestand afspelen in mijn Java-toepassing? Ik gebruik Swing. Ik heb geprobeerd op internet te zoeken naar iets als dit voorbeeld:

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

Maar dit speelt alleen .wav-bestanden af.

Hetzelfde met:

http://www.javaworld.com/javaworld/javatips/jw- javatip24.html

Ik wil zowel .mp3-bestanden als .wav-bestanden met dezelfde methode kunnen afspelen.


Antwoord 1, autoriteit 100%

Java FX heeft klassen Mediaen MediaPlayerdie mp3-bestanden kunnen afspelen.

Voorbeeldcode:

String bip = "bip.mp3";
Media hit = new Media(new File(bip).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();

U hebt de volgende importinstructies nodig:

import java.io.File;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

Antwoord 2, autoriteit 26%

Ik heb een pure java-mp3-speler geschreven: mp3transform.


Antwoord 3, autoriteit 15%

Met behulp van standaard javax.sound API, een enkele Maven-afhankelijkheid, volledig Open Source (Java 7of later vereist), zou dit de meeste WAV’s, OGG Vorbis- en MP3-bestanden moeten kunnen afspelen:

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

Referenties:


Antwoord 4, autoriteit 14%

je kunt .wav alleen spelen met 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();

En speel .mp3 af met jLayer


Antwoord 5, autoriteit 13%

Het is een tijdje geleden dat ik het heb gebruikt, maar JavaLayeris geweldig voor het afspelen van MP3


Antwoord 6, autoriteit 11%

Ik zou aanraden om de BasicPlayerAPI te gebruiken. Het is open source, heel eenvoudig en vereist geen JavaFX.
http://www.javazoom.net/jlgui/api.html

Na het downloaden en uitpakken van het zip-bestand moet men de volgende jar-bestanden toevoegen aan het buildpad van het project:

  • basicplayer3.0.jar
  • allede jars uit de libdirectory (in BasicPlayer3.0)

Hier is een minimalistisch gebruiksvoorbeeld:

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

Vereiste import:

import java.net.MalformedURLException;
import java.net.URL;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerException;

Dat is alles wat je nodig hebt om muziek af te spelen. De speler start en beheert zijn eigen afspeelthread en biedt functies voor afspelen, pauzeren, hervatten, stoppenen zoeken.

Voor een meer geavanceerd gebruik kun je de jlGui Music Player bekijken. Het is een open source WinAmp-kloon: http://www.javazoom.net/jlgui/jlgui.html

De eerste klasse om naar te kijken is PlayerUI(in het pakket javazoom.jlgui.player.amp).
Het demonstreert de geavanceerde functies van de BasicPlayer vrij goed.


Antwoord 7, autoriteit 6%

De gemakkelijkste manier die ik vond was om het JLayer-jar-bestand te downloaden van http://www.javazoom .net/javalayer/sources.htmlen om het toe te voegen aan de Jar-bibliotheek http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29

Hier is de code voor de klas

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

en hier zijn de importen

import javazoom.jl.player.*;
import java.io.FileInputStream;

Antwoord 8, autoriteit 4%

Om de lezers een ander alternatief te bieden, stel ik de JACo MP3-spelerbibliotheek voor, een cross-platform java-mp3-speler.

Kenmerken:

  • zeer laag CPU-gebruik (~2%)
  • ongelooflijke kleine bibliotheek (~90KB)
  • heeft geen JMF (Java Media Framework) nodig
  • gemakkelijk te integreren in elke applicatie
  • gemakkelijk te integreren in elke webpagina (als applet).

Voor een volledige lijst van de methoden en attributen kun je de documentatie raadplegen hier.

Voorbeeldcode:

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

Voor meer informatie heb ik hier een eenvoudige tutorial gemaakt die een downloadbare broncode bevat.


Antwoord 9, autoriteit 3%

Met behulp van MP3-decoder/speler/converterMaven Dependency.

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

Antwoord 10, autoriteit 2%

Je moet eerst JMF installeren (download via deze link)

File f = new File("D:/Songs/preview.mp3");
MediaLocator ml = new MediaLocator(f.toURL());
Player p = Manager.createPlayer(ml);
p.start();

vergeet niet JMF jar-bestanden toe te voegen


Antwoord 11

Zoek op freshmeat.net naar JAVE (staat voor Java Audio Video Encoder) Library (link hier). Het is een bibliotheek voor dit soort dingen. Ik weet niet of Java een native mp3-functie heeft.

U zult waarschijnlijk de mp3-functie en de wav-functie samen moeten gebruiken, met gebruikmaking van overerving en een eenvoudige wrapper-functie, als u wilt dat één methode beide typen bestanden uitvoert.


Antwoord 12

Als u ondersteuning voor het lezen van MP3 wilt toevoegen aan Java Sound, voegt u de mp3plugin.jarvan de JMF toe aan het runtime-klassenpad van de toepassing.

Houd er rekening mee dat de klasse Clipgeheugenbeperkingen heeft waardoor deze niet geschikt is voor meer dan een paar seconden geluid van hoge kwaliteit.


Antwoord 13

Ik heb daar andere methoden voor, de eerste is:

public static void playAudio(String filePath){
    try{
        InputStream mus = new FileInputStream(new File(filePath));
        AudioStream aud = new AudioStream(mus);
    }catch(Exception e){
        JOptionPane.showMessageDialig(null, "You have an Error");
    }

En de tweede is:

try{
    JFXPanel x = JFXPanel();
    String u = new File("021.mp3").toURI().toString();
    new MediaPlayer(new Media(u)).play();
} catch(Exception e){
    JOPtionPane.showMessageDialog(null, e);
}

En als we een loop naar deze audio willen maken, gebruiken we deze methode.

try{
    AudioData d = new AudioStream(new FileInputStream(filePath)).getData();
    ContinuousAudioDataStream s = new ContinuousAudioDataStream(d);
    AudioPlayer.player.start(s);
} catch(Exception ex){
    JOPtionPane.showMessageDialog(null, ex);
}

Als we deze lus willen stoppen, voegen we deze bibliotheken toe in de try:

AudioPlayer.player.stop(s);

voor deze derde methode voegen we de volgende imports toe:

import java.io.FileInputStream;
import sun.audio.AudioData;
import sun.audio.AudioStream;
import sun.audio.ContinuousAudioDataStream;

Antwoord 14

Niets werkte. maar deze perfect 👌

google en download eerst de Jlayer-bibliotheek.

import javazoom.jl.player.Player;
import java.io.FileInputStream;
public class MusicPlay {
  public static void main(String[] args)  {
    try{
      FileInputStream fs = new FileInputStream("audio_file_path.mp3");
      Player player = new Player(fs);
      player.play();
    } catch (Exception e){
      // catch exceptions.
    }
  }
}

Antwoord 15

Gebruik deze bibliotheek: 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){}
}

Other episodes