web-dev-qa-db-ja.com

javaでmp3ファイルを再生できないのはなぜですか

私はJavaで日本語を学ぶのを助けるために学習ガイドを作成していますが、私に日本語を話すのに苦労しています。Espeakが機能しなかったため、 このコード は.mp3ファイルを取得し、mpg123をインストールしてファイルを再生します。これは端末で問題なく動作しますが、Javaで再生することはできません。

私のコード:

String command="mpg123 "+dir+"/Xubuntu\\ Apps/Study\\ guide/Japanese/sounds/あう.mp3";
        System.out.println(command);
        try {Runtime.getRuntime().exec(command);} catch (IOException e) {e.printStackTrace();}

出力

mpg123 /home/myuser/Documents/Xubuntu\ Apps/Study\ guide/Japanese/sounds/あう.mp3

音は聞こえませんが、コマンドをターミナルにコピー/貼り付けすると、正常に機能します。

なぜJavaでプレイしないのですか?

3
TAAPSogeking

曲の再生に埋め込みコードを使用する場合は、このコードを使用できます、:)

ソース: http://Java-demos.blogspot.hu/2012/11/Java-code-to-play-mp3-file.html

JavaでMP3曲を再生するためのコード:

_import javax.media.*;
import Java.net.*;
import Java.io.*;
import Java.util.*;

public class AudioPlay {

    public static void main(String args[]) throws Exception {

        // Take the path of the audio file from command line
        File f = new File(args[0]);

        // Create a Player object that realizes the audio
        final Player p = Manager.createRealizedPlayer(f.toURI().toURL());

        // Start the music
        p.start();

        // Create a Scanner object for taking input from cmd
        Scanner s = new Scanner(System.in);

        // Read a line and store it in st
        String st = s.nextLine();

        // If user types 's', stop the audio
        if (st.equals("s")) {
            p.stop();
        }
    }
}
_

説明

Playerは、javax.mediaパッケージのインターフェースです。インターフェースのオブジェクトを直接作成できないため、それを実装するクラスが作成され、そのオブジェクトが使用されます。マネージャーはそのようなことを行うクラスです。

Playerにはいくつかの状態があります。彼らです

[〜#〜] unrealized [〜#〜]:意味、プレーヤーは何をすべきか(メディアについて)を知らない

[〜#〜] realizing [〜#〜]:意味、プレイヤーは仕事をするのに必要な世界を決定している(リソースを決定している)ファイル)

[〜#〜] realized [〜#〜]:つまり、プレーヤーはファイルを再生するためのリソースを取得し、タイプに関する情報も取得します。メディアなどの.

[〜#〜] prefetching [〜#〜]:準備が整いました。ファイルを再生する方法を知っています。

[〜#〜] prefetched [〜#〜]:これで、メディアの再生方法がわかりました。今すぐ発射できます。

[〜#〜] start [〜#〜]:音楽を開始し、ファイルの再生を開始します。

実現プレーヤーを作成しました。これは、UNREALIZED、REALIZINGのステップが自動的に実行される代わりにスキップされることを意味するものではありません。メソッドcreateRealizedPlayer(URL url)は、メディアファイルを指すURLを取ります。 FileオブジェクトからURLオブジェクトを取得するには、_Java.io.File_クラスでtoURL()メソッドを使用できます。これは、toURI()メソッドを呼び出して_Java.net.URI_オブジェクトを返し、その後toURL()メソッドを返すので廃止されたためです。ユーザーも音楽を停止する必要があるため、入力はユーザーから取得されます。

ただし、出力を表示することはできません。試してみる必要があります。プログラムの実行時にオーディオファイルの完全なパスを指定すると、ArrayIndexOutOfBoundsExceptionが発生することに注意してください。コマンドは次のようになります。

_Java AudioPlay "Path/to/file.mp3"
_

Credit Goes to Java Demo

1
rɑːdʒɑ