ともさんのHP >プロブラミング >JavaFX >【JAVA】音声や音楽ファイルを再生するためのクラス

【JAVA】音声や音楽ファイルを再生するためのクラス

JAVAで音声や音楽の入ったファイルを再生するClassをJavaFXを使って作成しました。
大昔に Java 楽天 +JMFで同様のものを作りましたが、JavaFX楽天 の時代になってJMFも廃れているので書き直すことにしたのです。
下の動画はクリックすると音が出ます。

広告


簡単なコード

基本的には3行で音声ファイルを再生できる。
Mediaオブジェクトに音楽ファイルを読み込ませ、MediaPlayerに入れる。play()メソッドで再生開始。

 Media media = new Media(new File("D:/work/日課時計/はちじです.mp3").toURI().toString());
 MediaPlayer mplayer = new MediaPlayer( media );
 mplayer.play();

下のサンプルプログラムは、ステージを開いて、ボタンを押すと音声ファイルを再生するもの。
JavaFX音楽再生プログラム

package tomojavalib.swingfx;

import java.io.File;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;

public class SoundFX extends Application {

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

 @Override
 public void start(Stage stage) throws Exception {
  stage.setTitle("JavaFX");
  BorderPane pane = new BorderPane();
  Scene scene = new Scene(pane, 320, 240);
  Button b = new Button("音声再生");
  b.addEventHandler( MouseEvent.MOUSE_CLICKED ,  e -> buttonCliked( e ) );
  pane.setCenter(b);
  stage.setScene(scene);
  stage.show();
 }

private void buttonCliked( MouseEvent e ){
 Media media = new Media(new File("D:/work/日課時計/はちじです.mp3").toURI().toString());
 MediaPlayer mplayer = new MediaPlayer( media );
 mplayer.play();
}

}


再生できるファイルフォーマット

JavaFXで再生できるファイルフォーマットはMP3、AAC、WAV。
MP3、WAVは実際に再生できるのを確認しました。
WMAはダメ。

広告

音楽ファイルの再生と情報取得

MediaPlayerの各メソッドで再生したり、情報を得たりすることが出来る。
再生開始、一時停止、停止

mplayer.play();
mplayer.pause();
mplayer.stop();

停止時間(秒)、再生中の経過時間

mplayer.getStopTime().toSeconds()
mplayer.getCurrentTime().toSeconds()

ボリューム調整

setVolume( 1.0 );


音楽再生サンプルプログラム

JavaFX音楽再生プログラム

ページトップの動画のサンプルプログラムです。
再生ボタン楽天 を押すと音声が再生され、ラベルに再生時間、スライダーに再生の進捗状態が表示されます

package tomojavalib.swingfx;

import java.io.File;
import javafx.application.Application;
import javafx.beans.Observable;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;

public class SoundFX2 extends Application {
MediaPlayer mplayer = null;
Slider slider = null;
Label l = null;

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

 @Override
 public void start(Stage stage) throws Exception {
  stage.setTitle("JavaFX");
  VBox pane = new VBox();
  Scene scene = new Scene(pane, 320, 240);

  //ボタンの設定
  Button b = new Button("音声再生");
  b.addEventHandler( MouseEvent.MOUSE_CLICKED ,  e -> buttonCliked( e ) );
  l = new Label("");
  //スライダーの初期化
  slider = new Slider();

  pane.getChildren().add( b );
  pane.getChildren().add( slider );
  pane.getChildren().add( l );
  stage.setScene(scene);
  stage.show();
 }

private void buttonCliked( MouseEvent e ){
 Media media = new Media(new File("D:/work/日課時計/はちじです.mp3").toURI().toString());
 mplayer = new MediaPlayer( media );
 mplayer.play();
 //スライダーの最大最小を設定
 mplayer.setOnReady(() -> {
  slider.setMin(mplayer.getStartTime().toSeconds());
  slider.setMax(mplayer.getStopTime().toSeconds());
  //音声の長さを表示
  l.setText( "再生時間 " + mplayer.getStopTime().toSeconds() + " 秒" );
 });

 //再生時間が進んだらスライダーの位置を変更する
 mplayer.currentTimeProperty().addListener((Observable observable) -> slider.setValue( mplayer.getCurrentTime().toSeconds() ));
}

}



Java、JMFを使った音楽再生プログラム

以下は以前作ったJMFを使用した方法です。消そうと思いましたが、まだ時々検索してこられる方がいるので、しばらく残しておきます。

JMFのインストール

JAVA 楽天 だけインストールしても動きません。JMFを追加でインストールしましょう。
JMFはJava Media Frameworkの略です。これをインストールすれば、音声ファイルだけでなく、動画や、USBカメラの制御もjavaで できるようになります。
具体的なインストールの仕方は...忘れてしまいました。確か、「\jre\lib\ext」フォルダの下にjmf.jar ファイルを置けばよかったかと思います(間違ってたらごめんなさい)。

音声ファイルの準備

音声は自分の声を録音しても良いのですが、自分の声を聞くのはちょっと恥ずかしいので、フリーの音声合成ソフトを探しました。 見つけたのは、こちら東芝のサイトです。 文章を入力すると音声を合成してくれて、wav形式のファイルをダウンロードできます。

音楽ファイルのファイル形式変換

音楽ファイルですが、wma形式でもっているのですが、Javaが認識してくれませんでした。そこでファイル形式変換のフリーソフトを 利用しました。
ecodecotool wma→wav形式に変換したら、普通に再生できました。

クラスの使い方

他のクラスから、下記のように呼び出せばOK

PlayMusic pm = new PlayMusic();
String tmps = "c:\\mousugunerujikan.wav";
pm.play( tmps );

再生中にプログラムは先へ進んでしまいます。連続して再生する場合は下記のように 再生の終了を待ってから次のファイルを再生します。
こうしないと、次々に新しいファイルを再生してしまい、何重奏にもなってしまいます。

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

java音楽音声ファイル再生classのソースコード

以下PlayMusic.javaファイルのソースです。コピペして使ってみてください。

広告


package tomojavalib.util;


import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.media.*;

/**
 * 
 * @author to.tomo.net
 *音声ファイルを再生するClassです。
 */


public class PlayMusic {

boolean flug = true;
 
public static void main(String[] args) {
 PlayMusic pm = new PlayMusic();
 String tmps = "";
 tmps = "c:\\mousugunerujikan2.wav";
 pm.play( tmps );
 System.out.println("end2");
 do{}while( pm.flug );
 pm.flug = true;
 pm.play( tmps );
 System.out.println("end3");
}


public void play(String filename)
{
 try {
     File file = new File(filename);
     URL url = file.toURL();
     final Player player = Manager.createRealizedPlayer(url);
     player.start();
     player.addControllerListener(new ControllerAdapter(){
         public void endOfMedia(EndOfMediaEvent ev) {
           System.out.println("end");
           flug = false;
           player.close();
            return;
         }
     });
 } catch (MalformedURLException ex) {
     Logger.getLogger(PlayMusic.class.getName()).log(Level.SEVERE, null, ex);
 } catch (IOException ex) {
     Logger.getLogger(PlayMusic.class.getName()).log(Level.SEVERE, null, ex);
 } catch (NoPlayerException ex) {

広告

     Logger.getLogger(PlayMusic.class.getName()).log(Level.SEVERE, null, ex);
 } catch (CannotRealizeException ex) {
     Logger.getLogger(PlayMusic.class.getName()).log(Level.SEVERE, null, ex);
 }
return;
}  

}

最終更新日: 2018-02-13 07:44:00

ともさんのHP >プロブラミング >JavaFX >【JAVA】音声や音楽ファイルを再生するためのクラス

広告
新着ページ

AIを利用し、衣服のデザイン画から型紙を制作する方法  
2つのアパレル3D技術でひらくオーダーメイド生産の手法  
【洋裁型紙】前後身頃の肩の傾きは何故前身頃の方が傾いているのか  
電子追尾式天体写真撮影法  
日本ミツバチ巣箱の種類  
ドラフター(製図台)でソーイング  
日本ミツバチが逃亡  
カメさんの箱庭  
天体用デジタルカメラの構造と天体写真  
Javaで静止画像(Jpeg)を動画(Mov)に変換  
USBカメラをJAVAで制御  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます