JMC を使って Java で MP3 を再生する

下記の記事

を読んで、JavaFX のクラスを Java 言語から使うためのパターンがわかってきたので、Java Media Components を Java から使い MP3 ファイルを再生することに挑戦。やっと成功しました。

ただし Windows XP で Java FX SDK 1.1 を C:\Program Files\JavaFX\javafx-sdk にインストールしています。

JavaFX の機能は重要だがスクリプト言語は嫌い、という主張には同意できる点もあるのですが、下記の書き方がやたら冗長に感じるのも事実です。

私としては、Java で過去に実装した資産をうまく再利用するためにこのテクニックを使ってみたいと思います。

// Java MP3 Player using JavaFX JMC classes 
// 2009-03-08 by nishimotz@gmail.com
// based on work of Matt Hicks
// http://www.matthicks.com/2009/02/i-hate-javafx-i-love-javafx.html
//
// Requirements (Eclipse 3.4.1)
// To avoid 
//   java.lang.UnsatisfiedLinkError: 
//   com.sun.media.jmcimpl.plugins.directshow.DShowEngine.ndsInit()
// add jmc.dll as follows:
// Java -> Build Path -> User Library
//   jmc-dll
//   File : C:\Program Files\JavaFX\javafx-sdk\lib\desktop\jmc.dll
//   Location : C:/Program Files/JavaFX/javafx-sdk/lib/desktop
// Notes
//   javafxgui.jar : for javafx.scene.media.* 
package test;
import java.io.IOException;
import javafx.scene.Scene;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.Stage;
public class MyMediaPlayer {
public MyMediaPlayer() throws IOException {
Media media = new Media(); {
media.initialize$();
String mediaUrl = "http://hoge.hoge/hoge.mp3";
// String mediaUrl = "file:///C:/hoge/hoge.mp3";
media.$source.set(mediaUrl);
}
MediaPlayer mediaPlayer = new MediaPlayer(); {
mediaPlayer.$media.set(media);
}
MediaView mediaView = new MediaView(); {
mediaView.$mediaPlayer.set(mediaPlayer);
}
Scene scene = new Scene(); {
scene.impl_setWidth(100.0f);
scene.impl_setHeight(100.0f);
scene.$content.insert(mediaView);
}
Stage stage = new Stage(); {
stage.$title.set("MyMediaPlayer");
stage.$scene.set(scene);
}
mediaPlayer.play();
}
public static void main(String[] args) throws Exception {
new MyMediaPlayer();
}
}

参考までに、上記の元になった JavaFX の実装例はこちら:

// based on http://gihyo.jp/dev/serial/01/javafx/0010?page=1
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.media.*;
var mediaUrl:String = "http://hoge.hoge/hoge.mp3";
var theWidth:Number = 100.0;
var theHeight:Number = 100.0;
var media = Media {
source: mediaUrl
};
var mediaPlayer = MediaPlayer {
media: media
};
Stage {
title: "MP3 Player"
scene: Scene {
width: theWidth
height: theHeight
content: MediaView {
mediaPlayer: mediaPlayer
}
}
}
mediaPlayer.play();

Windows Eclipse CVS sourceforge.jp

Windows XP で Eclipse 3.4.1 の CVS クライアントを使って sourceforge.jp のアカウントで作業を。。

anonymous ではなく sourceforge.jp のアカウントで commit ができるための設定をしました。

最初に試したのは

でしたが Windows ではうまくいかなかったので再度調査。

をすこし手直ししたら成功しました。

  • 以下 PC のアカウントは nishi で SF.jp のアカウントは nishimoto という想定。

まず Windows XP のコントロールパネル「システム」で環境変数の設定。

HOME=c:/cygwin/home/nishi
CVSROOT=nishimoto@sourceforge.jp:/cvsroot/galatea
CVS_RSH=ssh
[cygwin]
$ cd
$ ssh-keygen
/home/nishi/.ssh/identity
$ notepad .ssh/idendity.pub

これを sourceforge.jp の Account Maitainance で CVS/SVN/SSH Shared Authorized Keys に追加。

環境変数が反映されるように新しい cygwin コンソールで確認します。

$ ssh -l nishimoto cvs.sourceforge.jp
(omitted)
You cannot execute anything here.
Connection to cvs.sourceforge.jp closed.
$ ssh -l nishimoto shell.sourceforge.jp
Last login: Sat Nov  1 14:38:37 2008 from xxxxxxxxxxxxxxxxxxxx
nishimoto@sf-usr-shell:~$ ls
galatea
nishimoto@sf-usr-shell:~$ logout
Connection to shell.sourceforge.jp closed.

環境変数が反映されるように Eclipse を新たに起動します。

  • Window – Prefefence – Team – CVS – Ext connection method
    • CVS_RSH : c:\cygwin\bin\ssh.exe
    • Parameter : -l {user} {host}
    • SSH2 (General – Network Connections – SSH2)
      • SSH2 home: C:\cygwin\home\nishi\.ssh
      • Private Keys: C:\cygwin\home\nishi\.ssh\identity
  • New – Project – Project from CVS – New repository location
Host: cvs.sourceforge.jp
Repo Path: /cvsroot/galatea
User: nishimoto
Pass: (empty)
Conn.Type: extssh

repository の中身が見えたので成功。

上記リンクと少し違う手順が必要でしたが、参考になりました。感謝。