ものがたり(旧)

atsushieno.hatenablog.com に続く

mldsp 0.1

今月の頭くらいからMoonlightを使ってMIDIプレイヤーを作っていたのですが、とりあえずしばらく放置して他のことをやるだろうと思うので公開しておきます。まだ作りかけの部分が残ってはいますが…


what is mldsp?

これは、Moonlight.Gtk環境で動くMIDI(SMF)プレイヤーです。今のところ主にGNU/Linux環境向け。Moonlightの開発の方向性次第では、他でも動くようになるかもしれません。実のところ、MIDI音源にメッセージを送信する部分以外は、Silverlightでも同様に動作します。↓こんな感じ:
http://veritas-vos-liberabit.com/mldsp/0.1.0/

rationale

Linux環境には僕がWindows環境で使っていたような各種のMIDIツールがありません*1。そんなわけで必要になりそうな物を作ってみたわけです。とりあえずコレをTMIDIの代わり使おうかなと思っています。ちなみに(分かる人には名前だけでも分かると思いますが)UIは懐古趣味です…どうせMIDIプレイヤーを作るなら、実用的な範囲でcoolなものがほしいですよね。

sources

moonlight2をtrunkからビルドしていないと使えないわけで、実際にmldspを動かせる人はほとんどいないと思いますが、ソースはgithubにtarballをうpしてあるので適当に拾って下さい。
http://github.com/atsushieno/mldsp/

Moonlight.Gtk上で再生するにはportmidiのshared libraryも必要です。Debianにはパッケージがあるみたいですが、他の環境では僕がビルドパッチを当てたバージョンが使えると思います。
http://github.com/atsushieno/portmidi-sharedlib/

why Moonlight.Gtk (and not Silverlight) ?

なんでSilverlightではダメなのかというと、SilverlightではMIDIメッセージを送ることが出来ないからです。Webアプリケーション環境なのだから、P/Invokeとかで変な命令をローカルで実行されちゃ困るわけです。

でもSilverlightくらいの軽量なライブラリなら便利だし、何より移植性が比較的高い。WPFなんて捨ててこっちをデスクトップに持ってくればいいじゃないか。というのはまあ、Miguelも僕もよく言っていることですが…そんなわけでMoonlightには(full) CLRアプリケーションとしてのビルドプロファイルがあります。ターゲットランタイムはnet_2_0 (.NET 3.5)です。*2

今のところMoonlightにもGtkしかありませんが、まあそのうちCarbonとかWinFormsとか、出てくるんじゃないでしょうか*3。どちらもmoonlight自体がビルドしませんけど、Moonlight 2.0はまだ開発途上ですし。Windowsで使いたいんだという人はWPFにでも持っていけばいいんだと思います。

ちなみにSilverlight環境しか持っていない人もターゲット ユーザーとして考えています。MIDI楽曲を演奏するだけの動画じゃいまいちだから、何かチャラいUIのプレイヤーで再生しているところを見せたいけど、いまどき*mdspの類を動かせる環境は無いし…といった人が使えるといいかなと思っています。いや、まあその観点では疑似スペアナとか重要な部分がまだmockなわけですが…

internals

MIDIメッセージの送信にはportmidiにパッチをあてて共有ライブラリにしたものをP/InvokeするC#のライブラリを作ってあったので、それを使っています。(seealso: id:atsushieno:20090527:p1) porttimeのバインディングは必要ないだろうということで作っていません(演奏部分は適当に自作)。

Applicationの派生クラスは何やら変なコードになっていますが、これはもともとprocessingでお絵描きしていたものを、自作のコンバータ(id:atsushieno:20090217:p3)を使って移植したところから始めているためです。このUIを移植できるようにするために、放置していたtsukimiにちょこちょこと手を加えました。

  • -

…で、コレを英語にして、さらにtsukimiとかportmidi-sharpの話も書いてmonologueに上げなあかんと思っているわけですが、めんどくさいのでなかなか手がつけられません。国外だと懐古趣味の文脈も通じないだろうしなあ。困った困った。

書き忘れましたが、もし機能要望などありましたら教えていただければ対応できるかもしれません(できないかも)。とりあえず僕が自分で把握しているものはgithubで列挙してあります

*1:まあ、あまり真剣に探していないのですが

*2:現時点でデスクトップ版はパッケージも存在しないので、trunkからビルドすることになるでしょう。

*3:出てきていないものの話は細かく書けませんなあ