Javaで.mp3と.wavを再生していますか?


105

Javaアプリケーションで.mp3.wavファイルを再生するにはどうすればよいですか?Swingを使用しています。私はこの例のようなもののためにインターネットを見てみました:

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

まあ、私はこれらのものをどのように使用するかわからない、私は以前にそれらを使用したことがない。どのように私はそれを懇願することができますか、それをどのように使用できますか?
スタン、

JFMは2003年に廃止されました。使用することはお勧めしません。
joshreesjones、2014年

3
mainメソッドでThread.sleepは、サウンドを聞くためにを追加する必要があることに注意してください。そうしないと、プログラムはその前に終了します。これを行うための便利な方法は次のとおりです。Thread.sleep(clip.getMicrosecondLength() / 1000);
AndréValenti、2015年

回答:


119

Java FXにはMediaMediaPlayermp3ファイルを再生するクラスとクラスがあります。

コード例:

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

次のインポート文が必要です。

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

5
最終的なURLリソース= getClass()。getResource( "a.mp3");
ニール、

44
これは私にはまったく効果がありません。インポートが存在しないと表示されています。私はJava 7を実行しています...
PulsePanda

9
stackoverflow.com/questions/15149547/…Eclipseを使用している場合、Java 7フォルダー内からjavafxライブラリーを手動で追加する必要があるようです。
Gyurme 2013年

7
技術的には、MediaおよびMediaPlayerでないのJavaクラスが、のJavaFXクラス。OS XまたはWindows上のJavaにmp3サポートを追加するには、SampledSPを調べてください。そしてはい-私はそれらのライブラリを書きました。
Hendrik 2013

8
これを機能させるには、javaFXも初期化する必要があることを忘れないでください。stackoverflow.com/questions/14025718/...
user738048


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

参照:


mp3とoggの両方でこのエラーが発生します:UnsupportedAudioFileException:入力ファイルからオーディオ入力ストリームを取得できませんでした
。UnsupportedAudioFileException

コードを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> <バージョン> 1.0.3-2 </バージョン> </ 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ディレクトリ(BasicPlayer3.0内)のすべてのjar

以下は、最小限の使用例です。

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音楽プレーヤーをご覧ください。これは、オープンソースのWinAmpクローンです。http://www.javazoom.net/jlgui/jlgui.html

最初に確認するクラスは、PlayerUI(パッケージjavazoom.jlgui.player.amp内)です。これは、BasicPlayerの高度な機能をかなりよく示しています。


おかげで、これは現在のアプリケーションにmp3サポートを追加しようとした最も簡単な方法です。 ただし、Javaズームサイトからmp3spi1.9.4.jar置き換える必要がmp3spi1.9.5.jarあります。
Old Badman Grey

メインスレッドをスリープさせることを忘れないでください。そうしないとplayer.play()、音が聞こえない場合があります。
jeremyjjbrown 2014

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

読者に別の選択肢を与えるために、私はJACo MP3プレーヤーライブラリ、クロスプラットフォームのjava mp3プレーヤーを提案しています。

特徴:

  • CPU使用率が非常に低い(〜2%)
  • 信じられないほどの小さなライブラリ(〜90KB)
  • JMF(Java Media Framework)は必要ありません
  • どのアプリケーションにも簡単に統合
  • (アプレットとして)任意のWebページに簡単に統合できます。

メソッドと属性の完全なリストについては、そのドキュメントをここで確認できます

サンプルコード:

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

詳細については、ダウンロード可能なソースコードを含む簡単なチュートリアルをここに作成しました。


うわー、それは信じられないほど簡単でした。
ウェソスデケソ2017

ソースコードのダウンロードは実際のソースコードをライブラリに提供しませんか?
a8_

4

使用してMP3デコーダ/プレーヤー/ Aコンバータ 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);
    }

  }

}

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 2013

1

JAVE(Java Audio Video Encoderの略)ライブラリのfreshmeat.netを検索してください(リンクはこちら))。こういうもののライブラリです。Javaにネイティブのmp3関数があるかどうかはわかりません。

1つのメソッドで両方のタイプのファイルを実行する場合は、おそらく継承と単純なラッパー関数を使用して、mp3関数とwav関数を一緒にラップする必要があります。


カスタムライブラリの使用方法がまったくわかりません。
スタン

ライブラリをダウンロードし、コードにincludeステートメントを記述します。ライブラリの使用に関する説明が含まれているはずです。通常は関数呼び出しで十分ですが、最初にオブジェクトを宣言する必要がある場合もあります。次に、その入力のファイル拡張子をチェックし、必要なライブラリ関数を呼び出す関数を作成します。
Spencer Rathbun、

0

MP3読み取りサポートをJava Soundに追加するにmp3plugin.jarは、JMFのをアプリケーションのランタイムクラスパスに追加します。

このClipクラスにはメモリ制限があるため、数秒を超える高品質のサウンドには適していません。


2
JMFは2003年に廃止されました。これを使用することはお勧めしません。
joshreesjones、2014年

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

そして2番目は:

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

このループを停止したい場合は、このライブラリーを試行に追加します。

AudioPlayer.player.stop(s);

この3番目の方法では、次のインポートを追加します。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.