web-dev-qa-db-ja.com

javafxを使用して再生するmp3ファイルを取得する

私は今日、Eclipseで何らかの形式のオーディオを取得する方法を探すのに何時間も費やし、その過程のあらゆる段階で問題を抱えてきました。現在、動作するはずの何かがありますが、エラーが発生します:

スレッド「main」の例外Java.lang.IllegalArgumentException:com.Sun.javafx.css.parser.Css2Bin.main(Css2Bin.Java:44)の引数としてファイル名が必要です

私は基本的にそれを動かしていた誰かからこれをコピーしました。 FXlibが本来あるべき場所に追加されていると言いたいです。私はこれが派手ではないことを知っていますが、私はただ基本を試していました。

package b;
import Java.io.File;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
public class test {

    public static void main(String[] args){
    String uriString = new File("C:\\Users\\Mike\\workspace\\b\\src\\hero.mp3").toURI().toString()
    MediaPlayer player = new MediaPlayer( new Media(uriString));
    player.play();
}}

また、運が悪かった場合に備えて、さまざまなパス名を試しました。また、Eclipseで取得したパス名をコピーして、プロパティex:/b/src/hero.mp3に移動して貼り付けようとしました。この悪夢から抜け出すために助けていただければ幸いです。

8
Kasarrah

ワークスペースの外部にあるファイルは、file://プレフィックスを付けて含める必要があります。機能を示す簡単な例は次のとおりです。

public class Reproductor extends Application {

    public static void main(String[] args) {
        launch(args); 
    }

   @Override
   public void start(Stage stage) throws Exception {
       Media media = new Media("file:///Movies/test.mp3"); //replace /Movies/test.mp3 with your file
       MediaPlayer player = new MediaPlayer(media); 
       player.play();
   }  
 }
2
ItachiUchiha

埋め込みリソースの参照に問題があると思われます。埋め込みリソースは、アプリケーションコンテキスト内に含まれる(つまり、この場合、アプリケーションJar内に格納される)ファイルです。

これらのリソースへの参照を取得するには、Class#getResourceを使用する必要があります。これはURLを返し、要件に応じてリソースをロードするために使用できます。

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        String path = Test.class.getResource("/Kalimba.mp3").toString();
        Media media = new Media(path);
        MediaPlayer mp = new MediaPlayer(media);
        mp.play();

        System.out.println("Playing...");
    }

    public static void main(String[] args) {
        launch(args);
    }

}

さて、Applicationコンテキストにラップするまで、それを機能させることができませんでした...

1
MadProgrammer

JavaFXは、NetBeansを使用してMP3をjar(jar内)に埋め込みました

最初のJavaFXパッケージをNetBeansでプログラミングした後、jarに埋め込まれたmp3音楽ファイルであるサウンドをjar内に追加して、jarを友人に電子メールで送信し、音楽を友人のコンピューターで再生できるようにしました。 。 StackOverflowにご協力いただきありがとうございます。特に「音楽ファイルをJARに入れる、getResourceAsStream()は使用したいAPIです」と言ったメンバーに感謝します。私はgetResource()を使用することになりましたが、彼は私を正しい方向に導いてくれました。できます。

ステップ1:まず、NetBeansで実行を押したときに再生する音楽を取得しました。

ステップ2:音楽をループ(リピート)したかった。 StackOverflowのメンバーのおかげで、最終的にはそれが正しくなりました。私のソースコードを見てください。

ステップ3:最後にmp3をjarファイルにEMBEDしました。さて、これは重要です。最初は私のコンピューターで音楽が再生されましたが、jarファイルがハードディスクからそれを読み取りました。 mp3の名前を変更すると、jarがクラッシュし、実行されず、mp3が見つかりませんでした。 mp3をjarに埋め込み、jar内(jar内)に配置する必要がありました。そうしないと、他の人のコンピューターで再生されません。ここでgetResource()がトリックを行いました。

ステップ4:それから私は私の瓶を友人に電子メールで送りました。一部のサービスプロバイダーはjarを信頼せず、メールを未配信で私に送り返しました。他のサービスプロバイダーは問題なくメールを配信しました。それで、私は何をしましたか? * .jarの名前を* .mp4に変更すると、メールが配信されたので、友達に* .mp4から* .jarに戻すように依頼しました。出来た。

これが私のソースコードです。完璧ではないと思いますが、StackOverflowのおかげで機能します。

 /* Of course, one needs to import the following gizmo’s (and others): */
    import javafx.util.Duration;  
    import javafx.scene.media.Media;  
    import javafx.scene.media.MediaPlayer; 

    /* I want to EMBED the music inside the jar (in the jar).
     The secret seems to be getResource. The source code starts here,
     to EMBED the sound (DollyParton.mp3) into the jar: */

//************************ begin the music ***********************

    @Override public void start(Stage primaryStage) throws Exception {
        init(primaryStage);
        primaryStage.show();
        play();
    }

    public static void main(String[] args) {
        launch(args);
    }
        MediaPlayer musicplayer; {

    /* Put your music file IN THE JAR, "getResourceAsStream()" is
    the API you want to use. Put the DollyParton.mp3 into the Windows
    folder src/rockymountain. NetBeans automatically copies the mp3
    to the folder build/classes/rockymountain. */

        Media mp3MusicFile = new Media(getClass().getResource("DollyParton.mp3").toExternalForm()); 

        musicplayer = new MediaPlayer(mp3MusicFile);
        musicplayer.setAutoPlay(true);
        musicplayer.setVolume(0.9);   // from 0 to 1      

        //***************** loop (repeat) the music  ******************
        musicplayer.setOnEndOfMedia(new Runnable() {    
        public void run() {
        musicplayer.seek(Duration.ZERO); 
       }
         });  
      //*************** end of loop (repeat) the music  **************

    }

//**************************** end of music *************************

Mp3をWindowsフォルダーsrc/rockymountainに入れました。次に、NetBeansはmp3をbuild/classes/rockymountainフォルダに自動的にコピーしました。 NetBeansは、誰かがそう言ったので、私が不必要に作成したファイルであるフォルダ/ resourcesにmp3をコピーしません。/resourcesフォルダーは必要ありません。空のままです。

次のようにNetBeansを使用してJava ARchive(jar)ファイルを作成します。

  1. プロジェクト名を右クリックします

  2. プロパティを選択します

  3. [パッケージ]をクリックします

  4. コンパイル後にビルドJARを確認します

  5. JARファイルの圧縮を確認してください

  6. [OK]をクリックして変更を受け入れます

  7. プロジェクト名を右クリックします

  8. Clean andBuildを選択します

    JARファイルが作成されます。 NetBeans内で表示するには:

  9. [ファイル]タブをクリックします

  10. ProjectName >> dist(distribution)を展開します。 jarファイルはdistフォルダー内にあります。

1
dirk

ファイルがresources/musicにある場合、これは機能し、アプリケーションは移植可能になります。.mp3 inside the .jar

Media media = null;
try {
  media = new Media(getClass().getResource("/music/hero.mp3").toURI().toString());
} catch (URISyntaxException e) {
  e.printStackTrace();
} 

enter image description here

0
GOXR3PLUS