자바에서 .mp3 및 .wav를 재생 하시겠습니까?


105

Java 애플리케이션에서 .mp3.wav파일을 재생하려면 어떻게 해야합니까? 스윙을 사용하고 있습니다. 이 예와 같은 것을 인터넷에서 찾아 보았습니다.

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

그러나 이것은 .wav파일 만 재생 합니다.

다음과 동일 :

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

같은 방법으로 .mp3파일과 .wav파일을 모두 재생할 수 있기를 바랍니다 .


1
일종의 플러그인이 필요한 것 같습니다. JMF에는 필요한 것이 있어야합니다. oracle.com/technetwork/java/javase/tech/index-jsp-140239.html
Otra

글쎄, 나는 이것을 사용하는 방법을 잘 모르겠습니다. 나는 전에 그것들을 사용한 적이 없습니다. 어떻게 묵시 할 수 있고, 어떻게 사용할 수 있습니까?
Stan

JFM은 2003 년에 폐기되었습니다. JFM을 사용하지 않는 것이 좋습니다.
joshreesjones

3
그 지적이의 가치는에 main방법, 그것은을 추가 할 필요가있어 Thread.sleep소리, 또는 다른 그런 일 이전에 종료됩니다 프로그램을 듣기 위해. 이를위한 유용한 방법은 다음과 같습니다.Thread.sleep(clip.getMicrosecondLength() / 1000);
André Valenti 2015 년

답변:


119

자바 FX는이 MediaMediaPlayermp3 파일을 재생합니다 클래스.

예제 코드 :

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

다음 import 문이 필요합니다.

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

5
최종 URL 리소스 = getClass (). getResource ( "a.mp3");
Neil

44
이것은 나를 위해 전혀 작동하지 않습니다. 수입품이 존재하지 않는다고합니다. 그리고 Java 7을 실행 중입니다 ...
PulsePanda

9
stackoverflow.com/questions/15149547/… Eclipse를 사용하는 경우 Java 7 폴더 내부에서 javafx 라이브러리를 수동으로 추가해야하는 것 같습니다.
Gyurme 2013-06-15

7
기술적으로, Media그리고 MediaPlayer하지 않은 자바 클래스,하지만 자바 FX 클래스. OS X 또는 Windows의 Java에 mp3 지원을 추가하려면 SampledSP 를 살펴볼 수 있습니다 . 그리고 예-그 도서관을 썼습니다.
Hendrik

8
이 작업을 수행하려면 javaFX도 초기화해야합니다. stackoverflow.com/questions/14025718/…
user738048 2014


18

.wav는 Java API로만 재생할 수 있습니다.

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

암호:

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

그리고 jLayer로 .mp3 재생


4
이것은 잘못되었습니다. Java는 wav 외에 다른 컨테이너 형식을 재생합니다. 또한 wav는 mp3도 포함 할 수있는 컨테이너 형식입니다. 따라서 Java는 모든 wav 파일을 재생할 수 없습니다.
Radiodef

15

사용 한지 오래 되었지만 JavaLayer 는 MP3 재생에 적합합니다.


네, 아주 멋져요. 단순하고 플랫폼에 의존하지 않는 것 같습니다. 백그라운드에서 잘 재생되며 스레드를 중지하는 방법을 알아 내면됩니다.
James P.

14

표준 javax.sound API, 단일 Maven 종속성, 완전 오픈 소스 사용 ( Java 7 필요) :

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>

암호

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

참조 :


UnsupportedAudioFileException : 나는 모두 MP3와 OGG이 오류를 받고 있어요 입력 파일에서 오디오 입력 스트림을 가져올 수 없습니다
데이비드 Winiecki

코드를 Maven 모듈에 넣었습니다. 그것은 확실히 작동합니다 search.maven.org/...
odoepner

버전 번호를 <dependency> <groupId> com.googlecode.soundlibs </ groupId> <artifactId> tritonus-share </ artifactId> <version> 0.3.7.4 </ version> </ dependency> <dependency>로 업그레이드 할 수 있습니다. <groupId> com.googlecode.soundlibs </ groupId> <artifactId> mp3spi </ artifactId> <version> 1.9.5.4 </ version> </ dependency> <dependency> <groupId> com.googlecode.soundlibs </ groupId> < artifactId> vorbisspi </ artifactId> <version> 1.0.3-2 </ version> </ dependency>
tibi

최신 버전 인 verbisspi 1.0.3.3 만 작동하지 않았습니다.
tibi

이것은 훌륭합니다. MP3 및 WAV에서 즉시 사용할 수 있습니다!
Miles Henrichs

13

BasicPlayerAPI를 사용하는 것이 좋습니다. 오픈 소스이고 매우 간단하며 JavaFX가 필요하지 않습니다. http://www.javazoom.net/jlgui/api.html

zip 파일을 다운로드하고 압축을 푼 후 프로젝트의 빌드 경로에 다음 jar 파일을 추가해야합니다.

  • basicplayer3.0.jar
  • lib 디렉토리 의 모든 jar (BasicPlayer3.0 내부)

다음은 최소한의 사용 예입니다.

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

필수 수입품 :

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

그게 음악 재생을 시작하는 데 필요한 전부입니다. 플레이어는 자신의 재생 스레드를 시작하고 관리하며 재생, 일시 중지, 다시 시작, 중지검색 기능을 제공합니다.

좀 더 고급 사용법은 jlGui Music Player를 참조하십시오. 오픈 소스 WinAmp 클론 : http://www.javazoom.net/jlgui/jlgui.html

가장 먼저 살펴볼 클래스는 PlayerUI (javazoom.jlgui.player.amp 패키지 내부)입니다. BasicPlayer의 고급 기능을 꽤 잘 보여줍니다.


감사합니다. 이것이 제가 현재 애플리케이션에 mp3 지원을 추가하려는 가장 쉬운 방법입니다. 그래도 자바 줌 사이트에서 mp3spi1.9.4.jar대체해야합니다 mp3spi1.9.5.jar.
Old Badman Gray

메인 스레드를 잠자는 것을 잊지 마십시오. 그렇지 player.play()않으면 소리가 들리지 않을 수 있습니다.
jeremyjjbrown dec.

7

내가 찾은 가장 쉬운 방법은 http://www.javazoom.net/javalayer/sources.html 에서 JLayer jar 파일을 다운로드 하여 Jar 라이브러리 http://www.wikihow.com/Add-JARs-에 추가하는 것입니다 . to-Project-Build-Paths-in-Eclipse- % 28Java % 29

다음은 수업 코드입니다.

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

그리고 여기에 수입품이 있습니다

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

1
예,이 동영상을 확인합니다 [ youtube.com/… 중지 및 일시 중지와 같은 모든 기능을 수행합니다.
Vlad

1
기본적으로 보이기 때문에 이미 이러한 기능을 포함해야한다고 생각합니다. 어쨌든, 나는 :) 회신에 대한 또 다른 또 다른 라이브러리 솔루션, 덕분에 발견
N3sh

5

독자들에게 또 다른 대안을 제공하기 위해 크로스 플랫폼 자바 mp3 플레이어 인 JACo MP3 플레이어 라이브러리를 제안합니다.

풍모:

  • 매우 낮은 CPU 사용량 (~ 2 %)
  • 놀라운 작은 라이브러리 (~ 90KB)
  • JMF (Java Media Framework)가 필요하지 않습니다.
  • 모든 애플리케이션에 쉽게 통합
  • 모든 웹 페이지에 쉽게 통합 할 수 있습니다 (애플릿으로).

메소드 및 속성의 전체 목록은 여기에서 해당 문서를 확인할 수 있습니다 .

샘플 코드 :

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

자세한 내용은 여기 에서 다운로드 가능한 소스 코드를 포함하는 간단한 자습서를 만들었습니다 .


와우, 정말 간단했습니다.
Wesos 드 Queso의

소스 코드 다운로드가 라이브러리에 실제 소스 코드를 제공하지 않습니까?
a8_

4

사용 MP3 디코더 / 플레이어 / 컨버터 메이븐 종속성.

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

  }

}

2

먼저 JMF를 설치해야합니다 ( 이 링크를 사용하여 다운로드 ).

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

JMF jar 파일을 추가하는 것을 잊지 마십시오


5
JMF는 오래 전에 Sun / Oracle에 의해 폐기되었습니다.
Hendrik

1

freshmeat.net에서 JAVE (Java Audio Video Encoder의 약자) 라이브러리 ( 여기 링크)를 검색 하십시오 . 이런 것들을위한 도서관입니다. Java에 기본 mp3 기능이 있는지 모르겠습니다.

한 가지 방법으로 두 유형의 파일을 모두 실행하려면 상속과 간단한 래퍼 함수를 ​​사용하여 mp3 함수와 wav 함수를 함께 래핑해야 할 것입니다.


사용자 지정 라이브러리를 사용하는 방법을 정말 모릅니다. 도움이 필요하십니까?
Stan

라이브러리를 다운로드하고 코드에 include 문을 작성합니다. 도서관 사용에 대한 지침이 포함되어 있어야합니다. 일반적으로 함수 호출이면 충분하지만 먼저 객체를 선언해야 할 수도 있습니다. 그런 다음 입력 파일 확장자를 확인하고 원하는 라이브러리 함수를 호출하는 함수를 만듭니다.
Spencer Rathbun

0

Java Sound에 MP3 읽기 지원을 추가하려면 mp3plugin.jarJMF의를 응용 프로그램의 런타임 클래스 경로에 추가합니다.

점을 유의 Clip클래스는 높은 품질의 사운드의 몇 초 이상이 적합하게 메모리 제한이 있습니다.


2
JMF는 2003 년에 폐기되었습니다. JMF를 사용하지 않는 것이 좋습니다.
joshreesjones

@ mathguy54 사람들에게 사용하지 말라고 추천하는 것은 다양한 유형의 미디어를 충분히 지원하지 않기 때문입니다. 그럼에도 불구하고 MP3 디코딩에는 여전히 전적으로 적합합니다.
Andrew Thompson

0

다른 방법이 있습니다. 첫 번째는 다음과 같습니다.

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

두 번째는 다음과 같습니다.

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

이 오디오에 루프를 만들고 싶다면이 방법을 사용합니다.

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

이 루프를 중지하려면 try에 다음 라이브러리를 추가합니다.

AudioPlayer.player.stop(s);

이 세 번째 방법에 대해 다음 가져 오기를 추가합니다.

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

-2

이 라이브러리 사용 : 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){}
}

2
이것은 오랫동안 사운드를 재생하는 올바른 방법이 아니 었습니다. 참조 Sun의 독점 Java 클래스를 사용하는 것은 나쁜 습관입니까? 빈 catch 블록이있는 코드도 끔찍한 예입니다.
Radiodef jul.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.