「NeoMupl」に関する日記(6)

<前 次>

無題

のんびりナマライザの、フィルタを全部実装しなおしました。
前々から今までのフィルタは無駄が多くて非効率的だと思っていたのですよ。
例えて言うならば、工具の中からプラスドライバーがたくさんほしいのにもらえるのは工具一式の入った工具箱ひとつずつのような、そんなイメージです。
そして、それに伴って使いにくかったフィルタ編集画面も一から作り直しています。
こちらのほうはまだ作りかけで、すでにあるフィルタをツリー表示できるだけの状態です。

そういえば、しばらくNeoMuplをMCI設定で使っていたのですが、以前にも増して不安定になったようです。
DirectMusicだとMIDIを鳴らしていたらその時点で落ちたのですが、MCIだと法則性の分からないところで強制終了になってしまいます。

1235919425.png

無題

NeoMuplをいい加減開発中のところから格上げしました。
というわけで0.24公開です。
とはいえ新規機能のMCI再生は現在DirectMusicとあまり変わらず不安定なので、使うのは控えたほうがいいかもしれません。
エラー処理とかタイトル付け規則入力に関しては本当に強化しているのでいいと思いますよ。

ナマライザのほうもいい感じにできてきています。
今日作ったのは、文字列項目の読み込み容量制限。
要するに、使わない項目まで読み込んでいるとメモリの無駄なわけです。
特にユーザーエージェントとかリファラなんかは長くなりがちなんで、不必要なときは長さ0で読み込まないとかなりの割合が無駄になるんですよ。
もっとも、私が一番気になるのはリファラなんでリファラはめいっぱい読み込むんですが。
後やりたいこととしては、フィルタ編集画面の抜本的な改善とか、検索語フィルタとか、ひとつの項目だけに反応するフィルタとか、フィルタ関連を強化していきたいところです。

無題

NeoMuplのMCIによる再生を実装完了しました。
たまにエラーが起こるようですが、このあたりも、エラーの詳細表示機能を作れば原因究明できそうです。

P/Invoke

NeoMuplのMCI再生を作り始めました。
最悪DirectMusicでエラーが起こるものはMCIでなんとかなるかと。
ならなきゃもうどうしようもありません。

ナマライザは読み込みの高速化はひとまず置いといて、機能強化のほうに着手しました。
前々から欲しいと思っていた、そして前身の簡易アクセス解析にはあった、検索語レポート機能です。
統計画面につけているところですが、そろそろ統計画面が重くなってきたので、まず機能追加で重くなりにくいような対策からはじめることになりそうです。

エラーログ

NeoMuplにエラーログ機能をつけました。
このあたりのログ機能全体を統一的に扱うために、ログ機能専用クラスを作りました。
エラー表示機能もここに統合して、設定でエラー表示ありにしてある場合は表示と同時にエラーログも書き込むようになります。
あと、タイトル付け規則の簡易入力フォームも作りました。

無題

久々に爆ボンのページを更新しました。
レッドマウンテン3面のあの重ね木箱です。
適当に図を描いてみました。

NeoMuplのログ設定で、ファイルダイアログを使ってログファイルを開けるようにしました。

無題

Attributesとかよくわからんかったのでまたリフレクションを使ってみました。
ログ関係は項目が増えまくる予定なので、大量追加に対応したプログラムとして作ってみました。

無題

NeoMuplのログ関係の設定項目を更に増やしていました。
今度は「属性」とやらを使って何かできないかなーと考えてます。

無題

自動設定セーブができたので、NeoMuplの設定項目増やしてみました。
とりあえず最近よく落ちるので診断のためのログデータに関する設定をつけました。
いつぞやのバージョンでiniファイルをいじれと書いてたやつです。

無題

浮き沈みランチャー最新版アップしました。
んで、そのままの勢いでNeoMuplのほうの開発も進めてみました。
IDEから編集できるSettingsにどうも納得がいかないので結局自前でセーブとロードを実装しました。
原則リフレクションを使って自動的にプロパティの値を取得・設定しているのですが、例外的に一部のプロパティがセーブ時の項目名とプロパティ名が食い違うのでそのあたりにも対応しました。

無題

NeoMuplの設定項目をプロジェクトデザイナで作れるProperties.Settingsに置き換え始めたのですが、楽には違いなさそうだけど、それほど思っていた通りの内容でもないようです。

無題

NeoMuplのログ機能を本格的に作り始めています。
そろそろ設定項目が増えて大変になってきたので何らかの形で整理してまとめてみようと思います。

無題

…条件式間違えて入れ替えが起こらないようになっていただけでした。
というわけでステータスバーの項目入れ替えが実装できたので最新版アップしておきました。

無題

ツールのことはひとまず置いといて、項目の前後入れ替えを作り始めたのですが、単に項目の内容を入れ替えるという実装ではうまく動いてくれないようです。

無題

さて、肝心のツールの使い方を忘れていたのであります。
単純な実装をしようにも、そうするとグラフやらパフォーマンスやらの生のポインタがDirectMusic側から送られてくるわけで、それをどう扱うかがまた問題となるわけです。

無題

とりあえずツールを使う準備段階までできました。
アンマネージドなクラスはマネージドクラスのハンドルを持つことができないのですが、実は静的関数を呼び出すことはできるのです。
なので、マネージドなツールへのハンドルの代わりにそれらを識別するための数値を使って、マネージドな静的関数を使って間接的にマネージドなツールの関数を呼び出すのです。

無題

う~ん、やっぱりリセットを入れても鳴らないときは鳴らないようです。
それはそうと、以前無理だといっていたツールの件、もしかしたらうまくいくかもしれない方法を思いつきました。
もしこれがうまくいけばC#からいろいろいじれそう…といいたいところなのですが、ツールはDirectMusicの挙動をプログラミングできる一方で、その分いろいろな部分に影響を与え、受けるので、単純にツールひとつが実装できたからといってすぐツールが使えるようになるとは限らないようです。

無題

とりあえず、MIDIリセットを入れたらおおむねよさそうな感じです。
欲を言えば項目ごとにリセットの種類を変えられたらいいのですが、UIとかセーブデータの設計が面倒なんですよね…。

無題

というわけで、とりあえずDLL上でだけは実装していたMIDIリセットを、NeoMuplでも使うようにしてみました。
今回はとりあえずということでGMリセットのみ。
リセットの種類を選べるようにしたら最新版として公開したいと思っています。

無題

相変わらずMIDIの再生は不安定です。
あるときは普通に再生されたMIDIが、あるときはソフトごと落ちたり。
このためにデバッグ関連機能を強化してみたりMIDIリセットを入れてみたり…しようと思います。

<前 次>