Odtwarzanie. mp3 i.wav w Javie?

Jak mogę odtworzyć plik .mp3 i .wav w mojej aplikacji Java? Używam huśtawki. Próbowałem poszukać w Internecie czegoś takiego jak ten przykład:

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

Ale to będzie tylko odtwarzać .wav pliki.

To samo z:

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

Chcę móc odtwarzać zarówno pliki .mp3, jak i pliki .wav tą samą metodą.

Author: SpaceCore186, 2011-05-18

12 answers

Java FX posiada klasy Media i MediaPlayer, które będą odtwarzać pliki mp3.

Przykładowy kod:

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

Będziesz potrzebował następujących instrukcji importu:

import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
 102
Author: jasonwaste,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-04 00:21:12

Napisałem czysty Odtwarzacz MP3 java: mp3transform .

 30
Author: Thomas Mueller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-31 17:55:40

Możesz grać .wav tylko z java API:

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

Kod:

AudioInputStream audioIn = AudioSystem.getAudioInputStream(MyClazz.class.getResource("music.wav"));
Clip clip = AudioSystem.getClip();
clip.open(audioIn);
clip.start();

I odtwarzaj. mp3 z jLayer

 17
Author: Gustavo Marques,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-21 17:03:30

Dawno go nie używałem, ale JavaLayer świetnie nadaje się do odtwarzania MP3

 15
Author: Mark Heath,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-19 10:34:49

Polecam korzystanie z BasicPlayerAPI. Jest open source, bardzo prosty i nie wymaga JavaFX. http://www.javazoom.net/jlgui/api.html

Po pobraniu i rozpakowaniu pliku zip należy dodać następujące pliki jar do ścieżki budowania projektu:

  • basicplayer3. 0.jar
  • wszystkie słoiki z katalogu lib (wewnątrz BasicPlayer3. 0)

Oto minimalistyczne użycie przykład:

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

Wymagany IMPORT:

import java.net.MalformedURLException;
import java.net.URL;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerException;
To wszystko, czego potrzebujesz, aby zacząć grać muzykę. Gracz uruchamia i zarządza własnym wątkiem odtwarzania i zapewnia Funkcje odtwarzania, wstrzymywania, wznawiania, zatrzymywania i wyszukiwania.

Aby uzyskać bardziej zaawansowane użycie, możesz spojrzeć na Odtwarzacz Muzyczny jlGui. Jest to klon open source Winampa: http://www.javazoom.net/jlgui/jlgui.html

Pierwszą klasą do obejrzenia będzie PlayerUI (wewnątrz pakietu javazoom.jlgui.gracz.amp). Całkiem dobrze demonstruje zaawansowane funkcje Basicplayera.

 12
Author: Ivo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-10 16:24:23

Używając standardowego javaxa.w przeciwieństwie do Javy, Java nie jest w pełni kompatybilna z Javą.]}

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>

Kod

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

Bibliografia:

 9
Author: odoepner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-03 12:08:12

Najprostszym sposobem, jaki znalazłem, było pobranie pliku jlayer jar z http://www.javazoom.net/javalayer/sources.html i dodać go do biblioteki Jar http://www.wikihow.com/Add-JARs-to-Project-Build-Paths-in-Eclipse-%28Java%29

Oto kod dla klasy

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

A oto IMPORT

import javazoom.jl.player.*;
import java.io.FileInputStream;
 4
Author: Vlad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-13 15:44:12

Aby dać czytelnikom inną alternatywę, proponuję JACo MP3 Player library, wieloplatformowy odtwarzacz mp3 java.

Cechy:

  • bardzo niskie zużycie procesora (~2%)
  • niesamowita mała biblioteka (~90KB)
  • nie wymaga JMF (Java Media Framework)
  • łatwy do integracji w dowolnej aplikacji
  • łatwy do zintegrowania w dowolnej stronie internetowej (jako aplet).

Aby uzyskać pełną listę jego metod i atrybutów, możesz sprawdzić jego dokumentację tutaj .

Przykładowy kod:

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

Aby uzyskać więcej szczegółów, stworzyłem prosty samouczek tutaj , który zawiera kod źródłowy do pobrania.

 3
Author: Mr. Xymon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-04 13:13:40

Najpierw musisz zainstalować JMF (pobierz za pomocą tego linku )

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

Nie zapomnij dodać plików JMF jar

 2
Author: Kasun Shamentha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-09 17:06:46

Wykonaj wyszukiwanie freshmeat.net dla biblioteki JAVE (oznacza Java Audio Video Encoder) (link tutaj). To biblioteka na takie rzeczy. Nie wiem czy Java ma natywną funkcję mp3.

Prawdopodobnie będziesz musiał zawijać funkcję mp3 i funkcję wav razem, używając dziedziczenia i prostej funkcji owijania, jeśli chcesz jedną metodę do uruchamiania obu typów plików.

 1
Author: Spencer Rathbun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-25 20:28:17

Aby dodać obsługę odczytu MP3 do Java Sound, dodaj mp3plugin.jar JMF do ścieżki klasy run-time aplikacji.

Zauważ, że klasa Clip ma ograniczenia pamięci, które sprawiają, że nie nadaje się na dłużej niż kilka sekund wysokiej jakości dźwięku.

 0
Author: Andrew Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-08 09:20:28

Użyj tej biblioteki: 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){}
}
 0
Author: Akila Lekamge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-24 20:04:24