日記(984)

<前 次>

VBCHECK

こっそりパネルαとじゃんけんαを更新ですよ。
VBのコードの問題点を指摘してくれるソフトをたまたま見つけたので、あたっている部分だけ修正してアップしました。
ついでに著作権情報や一部アルゴリズムも変更しておきました。

そのソフトを見つけるきっかけとなったのがNeoMupl。
NeoMuplの動作が極端に遅いということ、そして解決法は先日書いたとおりですが、ソートアルゴリズムや文字列-データ対応のプログラムなんかはいかにも誰かが作っていそうだったので手近なところでVectorで探していたら、目的のものは見つからずに他の便利そうなソフトが見つかったというわけです。
結局ソートアルゴリズム周りで楽はできそうにないので再びC#も視野に入れ始めたのですが、現段階の問題として、VC#2005がExpressEditionだからなのかあるいはC#だからなのか、エクスプローラからのドラッグ&ドロップができなくて、一歩踏み出せずにいます。
これさえあればもう迷わなかったんですけどね。
C#でエクスプローラからのドラッグ&ドロップの方法を模索しつつVBで効率のよいアルゴリズムを作るとしましょう。

そうそう、アキタラヤメル企画にレゴのコンテンツを追加しようと思います。
今レゴでオリジナルの作品がいくつもあり、それらを分解する前に作っておいたLDrawのデータがあるのですよ。
うちのキャラのいくつかはレゴで作ったものが元ネタだし、こういうのがあってもいいと思うのですよ。

時間の問題

NeoMuplに新たな問題ですよ。
まずソートプログラムがO(n2)の処理時間なので数が多くなるとソートが圧倒的に遅くなること。
予想はしていたんですが項目が数千個になるとかなり時間がかかりますよ。
そしてもう一つ、こっちのほうが深刻です。
リストのロードとセーブに時間がかかるんです。
計算したらやはりO(n2)の処理時間。
項目のソートに関してはクイックソートを使うことで、ロードとセーブについては読み込んだ結果の参照が遅いということがわかっているので読み込んだ時点で読み込み結果をソートして、ソートされていることを前提とした検索で目的のデータを探すことにすれば、いずれもO(nlogn)の処理時間に抑えることができそうです。

一気に進む

はい、もう一気にできそうですね。
ループ処理も演奏位置を変更するだけで可能。
100ナノ秒精度ですよ。
ループ演奏・演奏後の処理など、基本的な処理が早くもできました。
あとはBGMモードを付け加えれば基本機能が出揃うわけです。
そうそう、データ記録周りを少し整理しました。
レジストリに記録する場合とINIファイルに記録する場合で同じものを記録する処理を2回書いていたのですがここを統一して書くのが一回で済むようにしました。
そして、忘れてませんよ。
NeoMuplは進んだら進んだだけたとえ中途半端でもアップします。

そういえば弟がメトロイドプライム2を買ってきていました。
グラフィックについては1がすごすぎたから別に驚かなかったんですがこれもやっぱりバンジョーと同じくやりすぎなほどの正当進化の予感がひしひしと伝わってきています。
そういえば最近爆ボン以外のゲーム記の更新が滞ってるな。
ま、いいけど。

DirectShow

MusicPlayer3の怪しい挙動にどうにも我慢ならん!
と、NeoMuplの開発のほうに行こうとしたのですが、現在のVC++6での開発状況が、MFCに挫折して自分でWindowsライブラリを作ると意気込んで作っていて色々面倒くさそうな作業がたまっていたことに気付き、C#にあっさり移行したのはよいのですが、手抜きのため導入したYanesdk.NETではMP3が鳴らせないしMIDIは左側からしか聞こえてこないしで今回の用途には使い物にならず、だったら自前で作るかと思ったらDirectX9には日本語ドキュメントがないしDirectMusicへの対応が怪しかったりで結局どっちもうまくいきそうにありませんでした。
そういえばDirectShowのヘルプに「Microsoft Visual Basic でDirectShow API のかなりのサブセットにアクセスできるが、Visual Basic のサポートは完全ではない。」って書いてあったけど、これはほとんど使えますと解釈してよいのかな…?
去年の12月にVBはいったん捨てたんですが実は再生用DLLを作る必要すらなく、VBオンリーでいけたようです。
最初からダメだと諦めて別の方法を探すって、うちの悪い癖だな。

コンティニュー

ミディビにコンティニュー機能をつけました。
ただ単に保存しておいたバックアップファイルをアプレットに渡すだけなのでそう難しくはありませんでした。
lastをbreakと書き間違えることさえなければ。

受信

ミディビ、データ受け取りのところで受信データの種類判定にミスがあったので書き直してました。
なんかアプレットからデータ送信しても受信されないなとずいぶん頭をひねってました。
とりあえずeqと=を間違えていただけだったんで直してアップしました。
動作は変更されてませんが。

目撃者

突然ですがふにゃさんアップデートしました。
本当は1.01ができて割りとすぐに追加した機能だったんだけどそれだけでアップするにはあまりに小さな機能だったので今までアップしてませんでした。
だからといっていつまでもアップするに足る内容ができるのを待っていたらモチベーションが下がってしまっていつの間にか更新しなくなってしまうということがありそうだった(というよりふにゃふにゃのときに実際あった)ので、無理してアップしてみました。
どこが変わったって?
それなりにやりこんでる人なら即見つけるんじゃないかなぁ。

<前 次>