プロが教えるわが家の防犯対策術!

JavaFXで簡単な音楽再生プログラムを作成中です。指定されたディレクトリ内のMP3ファイルを1曲ずつ順番に流すというものです。以下がソースです。
// List型の変数musicListにディレクトリ内のmp3ファイルのパス名を入れていきます。
List<String> musicList = new ArrayList<String>();
File dir = new File("/home/hogehoge/ミュージック/album1/");
File[] list = dir.listFiles();
for (int i=0; i<list.length; i++) {
if(list[i].getName().contains(".mp3")) {
musicList.add(list[i].toString());
}
}
// for文でmusicList内の曲を順番に全部流したいですが、次から次に曲が流れてしまいます。
for(Iterator it = musicList.iterator(); it.hasNext();) {
Media m = new Media(new File(it.next().toString()).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(m);
mediaPlayer.play();
System.out.println(mediaPlayer.getStopTime().toSeconds());
//System.out.println(it.next());
}

質問者からの補足コメント

  • うーん・・・

    Tacosanへの補足ではなく回答者の方全員への補足を書かせていただきます。

    https://totomo.net/785.htmの下の方にJMFを使ったメディアプレイヤーのサンプルが載ってまして、

    「こうしないと、次々に新しいファイルを再生してしまい、何重奏にもなってしまいます。

    PlayMusic pm = new PlayMusic();
    String tmps = "c:\\mousugunerujikan.wav";
    pm.play( tmps );
    do{}while( pm.flug );
    pm.flug = true;
    tmps = "c:\\mousugunerujikan2.wav";
    pm.play( tmps ); 」

    ↑とあります。
    JavaFXでやりたいのですが、検索してもOracleのドキュメントを見ても中々情報が載っていません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/08/27 22:28

A 回答 (2件)

JavaFX は知らんけど現象を見る限り


mediaPlayer.play();
の挙動の問題だろう.
この回答への補足あり
    • good
    • 0
この回答へのお礼

どうもご回答ありがとうございます。

MediaPlayerの挙動っていうか、このプログラムだと1曲が終わる前に次々と曲を読み込んでしまうっていうことなんです。
プログラムの方で1曲が終わってから次の曲を再生するみたいにかければいいんですが、その方法がわからなくて。。。

ご回答どうもありがとうございました。

お礼日時:2020/08/27 22:09

https://detail.chiebukuro.yahoo.co.jp/qa/questio …
検索すれば出てくるものだなぁ.
    • good
    • 1
この回答へのお礼

どうもありがとうございました。私が検索してもヒットしませんでした。。紹介していただいたURLの2番目に私のと全く同じ目的のプログラムがありました(^^;
試行錯誤をして無事できました。以下が該当部分のソースです。

for (int i=0; i<mediaPlayers.size(); i++) {
MediaPlayer currentPlayer = mediaPlayers.get(i); // メディアプレーヤーズ配列変数のi番目を現在のプレーヤーとする
MediaPlayer nextPlayer = mediaPlayers.get((i+1) % mediaPlayers.size()); // 次の変数をnextプレーヤーとする
currentPlayer.setOnEndOfMedia(new Runnable() { // 現在のプレーヤーの終了シグナル時に現在のプレーヤーを終了させ(こうしないと終了しない)
@Override public void run() { // 次の曲をスタートするように設定する
currentPlayer.stop(); // 以上で曲の設定終わり
nextPlayer.play();
}
});
}

mediaPlayers.get(0).play(); // 曲をスタートする

お礼日時:2020/08/28 21:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!