WebMidiPlayer(のようなもの)

| No Comments | No TrackBacks

portmidi-sharpのサンプルとして、WCF経由でportmidiを叩くものを追加してみた。本当はRESTful APIを使いたいのだけど、まだしばらく不安定になりそうなのと、Silverlight環境で使えないということがあるので、今回はまだBasicHttpBindingだ。 サーバ, クライアント

これが実におそろしいもので、mono環境ではまだきちんと動作しない可能性が高い。mono on Windowsのコンソール上では、一応.NETクライアント/サーバとmonoクライアント/サーバの任意の組み合わせで実行できるはずだけど、同じものをMac環境にもっていくとなぜか途中で止まったりする。たぶんネットワークまわりの実装が異なるためだろう。非同期メッセージングはそもそも最初からきちんと動作しないので、この辺も解決していく必要がある。

で、何がおそろしいかというと、今回の実装はMIDIメッセージをそのまま送信する仕様になっているので、無駄に演奏のハードルが高いのである(WCFのdogfoodingのためにあえてそうしている)。MIDIプレイヤで送られるMIDIメッセージの数量はとてつもなく多いし、処理速度もかなり要求される、という点だ。monoのWCFのコードは全くと言っていいほど最適化されていないので、これから最適化していく必要があるだろう。まあ、こんなにヘビーな使い方は想定していないのだけど。ただ、.NET環境ではそれなりに再生できているので、多少なりとも張り合えるところまではもっていきたい。

実用上は、SMFの生データと演奏制御命令(play/stop/pause)を送受信すれば全て解決だ。これはmldsp上で実際に必要になる(実装する)予定なので、それは別のものと考える。

さて、このweb playerの目的はSMFを演奏することではない(それはそれであるけど)。自宅で接続するのが面倒くさいYAMAHAのラック音源を別のネットワークマシンに接続して、そのマシンでserviceを起動しておいて、ローカルのclientがそれを叩く、ということを主な用途として想定している。

もちろん、serviceはローカルマシン上で動作させておいて、mldspのようなsilverlightアプリから演奏命令を送信するということもできる。これはFlashでgainerをコントロールするgspと同じやり方だ。

ただ、mldspに関しては、ただでさえCLRのHttpWebRequestを経由するWCFで重いところを、ブラウザへのXPCOM呼び出し経由でHttpWebRequestを介して通信するのが現実的であるとは考えにくい。やはりSMFと制御命令を送受信するのが現実的だ。そもそも本当に利用したくなったらWCFなんて使わない。

今この方法で設計しようと思っているのがMIDI音色エディタ(のようなもの)だ。MIDI制御命令を全てこのWebプレイヤ経由で処理するようにすれば、ブラウザのみで利用できるようにすることもできる。GUI部分に何を使って設計するのが一番良いか、いろいろ考えたのだけど、とりあえずmoonlightを使ったやり方はアリだと思っている。コレとは別に、OpenTKを使う方法も検討している。ただ、テキスト入力をどうするか別途検討する必要もありそうだ(WinFormsを使えば実現できるが、iPhoneなどでは使えなくなる)。

No TrackBacks

TrackBack URL: http://veritas-vos-liberabit.com/noteon/mt-tb.cgi/67

Leave a comment

About this Entry

This page contains a single entry by note on published on September 6, 2009 7:49 PM.

MIDI INいじりは終わり / 変数参照解決に歴史あり was the previous entry in this blog.

learning pd is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Categories

Pages

OpenID accepted here Learn more about OpenID
Powered by Movable Type 4.23-en