2009年2月21日土曜日

ミクさんで拡張現実でWPFなWMPの視覚エフェクトプラグインを更新

更新内容は
1.IWMPEffects, IWMPEffects2をそれぞれ明示的に実装した。これで、過去のWMPでも使えるはず。
2.パラメタを少しいじった。

パラメタをいじったので、レジストリのHKCU/software/tomorrowplusplus/WMPEmitMiku以下を削除してから実行すると良いかも。

ここのWMPEmitMiku.zipです。

自分のPCだとパフォーマンスに難があるし、ネカフェだと.net framework3.5のインストールとかに時間がかかったりで、準備に時間がかかり過ぎる。

誰か、3D性能およびWEBカメラの性能の両方が良い環境の方、うまい音楽を選んでパラメタをうまくいじってCamStudioでのキャプチャ動画を作ってくれませんかねえ。CamStudioならスピーカ出力もキャプチャできるし(ただし何故かうちではできない)。

オイオイ

夜、寝られはするけれど、日中の眠気が強烈で夜になると少しすっきりするっていう、昼夜逆転気味の体内リズムが戻ってきたぞ。薬の処方が変わったせいかなあ。

2009年2月20日金曜日

ミクさんで拡張現実でWPFなWMPの視覚エフェクトプラグインを更新

更新内容は
1.パワーの対数を取るオプションを追加し、デフォルトでオンにした
2.インストールの方法に関する説明で、レジストリファイルの修正が必要な事に言及していなかったので言及した。

ここのWMPEmitMiku.zipです。

体調

今日は朝から体調激悪+微熱だったのだが、午後になってちょっとすっきりしてきた。以前は低体温=眠気で辛かったのだが、最近は微熱が体温調節の狂いというより風邪気味の症状の一環として出てくるので、普通に微熱が引く方が調子が良い。

追記:今日は眠気も風邪気味の症状も強いのに、妙にすっきりしているなあ。

ミクさんで拡張現実でWPFなWMPの視覚エフェクトプラグイン


最低限の形にはなった。指数分布に従って確率的にミクさんを放出し、その時に、帯域毎のパワーに応じて単位時間辺りのミクさん放出数を決めている。パラメタなどいじる余地がまだまだあるし、初速度を帯域のパワーと関連させるのもありだろう。

ここのWMPEmitMiku.zipがソース。バイナリも入っているので、readme-en.txtの指示に従えば遊ぶだけも可。

追記:設定をレジストリで持つようにしたら、平均ミク放出数の最小値と最大値を同じにしてしまって音楽に合わせた変化が生まれなくなってしまった。このバグは修正した。

2009年2月19日木曜日

.netアセンブリをCOMサーバとして登録する場合の注意

GUIDがあるんだから、同じ``名前空間.クラス名''のクラスでも問題ないと思ったら問題大有り。生成されるレジストリエントリは

[HKEY_CLASSES_ROOT\MyEffect]
@="WMPWPFTest.MyEffect"

[HKEY_CLASSES_ROOT\MyEffect\CLSID]
@="{F6ADD2D1-C4C0-4E4A-99DF-49AC5A90D23B}"

[HKEY_CLASSES_ROOT\CLSID\{F6ADD2D1-C4C0-4E4A-99DF-49AC5A90D23B}]
@="WMPWPFTest.MyEffect"

[HKEY_CLASSES_ROOT\CLSID\{F6ADD2D1-C4C0-4E4A-99DF-49AC5A90D23B}\InprocServer32]
@="mscoree.dll"
"ThreadingModel"="Both"
"Class"="WMPWPFTest.MyEffect"
"Assembly"="WMPWPFTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v2.0.50727"
"CodeBase"="file:///C:/Users/Ruke/Documents/Visual Studio 2008/Projects/WMPWPFTest/bin/Release/WMPWPFTest.dll"

[HKEY_CLASSES_ROOT\CLSID\{F6ADD2D1-C4C0-4E4A-99DF-49AC5A90D23B}\InprocServer32\1.0.0.0]
"Class"="WMPWPFTest.MyEffect"
"Assembly"="WMPWPFTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
"RuntimeVersion"="v2.0.50727"
"CodeBase"="file:///C:/Users/Ruke/Documents/Visual Studio 2008/Projects/WMPWPFTest/bin/Release/WMPWPFTest.dll"

と、実際に登録されるのはmscoree.dllだ。こいつが.netアセンブリをロードし、マーシャリングをする仕組みになっているっぽい。そこで、たとえGUIDがちがくとも、同じ``名前空間.クラス名''のクラスを複数登録すると、一つのCOMクライアントからそれらを同時に参照する場合に問題が生じる。多分、厳密な名前とやらを付与しても変わらない(未実験)。

そういうわけで、前のエントリで公開したWMPの視覚エフェクトのスケルトンをいじる時は名前空間やクラス名を変えて、その上でクラスのGUIDも変えるというステップを踏みましょう。

C#+WPFによるWMP VisualizerのスケルトンにIWMPEffects2を実装した

これで、他の視覚エフェクトと行儀良く共存できるようになった。
ダウンロードはこちらの WMPWPFTest.zip です。