無題
NeoMupl最新版アップしました。
適当に思いついた項目を、表示が一部おかしいのはそのままにして、とりあえず増やしてみました。
NeoMupl最新版アップしました。
適当に思いついた項目を、表示が一部おかしいのはそのままにして、とりあえず増やしてみました。
NeoMuplのステータスバーの編集に対応しました。
まだ前後の入れ替えはできませんが、項目のON/OFFを切り替えて設定適用すると、OFFにした項目が後ろに下がるのでそれを利用すれば入れ替えることができます。
項目の種類を増やしたら公開しようと思います。
う~む、NeoMuplでDirectMusicの初期化に失敗したときにいろいろエラーが立て続けに出るのがうっとうしいですね…。
リリース版でそうなったときはすぐ終了して再起動すればいいのですが、こういうエラーにもなんとか対処したいものです。
やっぱりアンマネージドのコードから直接的にマネージドのコードを呼び出すことはできないようです。
DirectMusic自体が元々アンマネージなのでどこかでアンマネージとマネージの橋渡しをしてやらなければいけないのですが難しそうな感じです。
ソースの分割ほぼできてきました。
いよいよツールの実装に取り掛かれそうです。
DirectMusicツールのプログラムを作成中です。
とりあえずコード量が増えてきたので適当なところで分割中。
NeoMuplのステータスのカスタマイズ画面を作ってます。
とりあえずセーブとロードはできてます。
NeoMuplのステータスバーカスタマイズシステムの実装を進めていました。
今後ステータスバーの項目はたくさん増やすつもりなのでこのあたりをあらかじめしっかりしておきたいのです。
NeoMupl、MIDI関連のことはひとまず置いといて、前々からやろうと思っていたステータスバーのカスタマイズ機能の実装を始めました。
第一歩は表示・非表示の切り替えから。
実はもうすでにこの時点でカスタマイズ機能も内部的には実装できていて、ステータスバーの項目表示にはこの機能を使っています。
カスタマイズするための画面を作って、ステータス項目を充実させればカスタマイズ機能として本当の出来上がりとなるわけです。
で、表示切替ができるようになったので、現在の最新版をアップしました。
リセット命令はできた(はず)なので、今度はDirectMusicツールをC#で使えるように作っています。
このあたりはどうやったらうまくいくのかわかっていないのでいろいろ試行錯誤していきます。
急に思いついてNeoMuplに使っているDLLに機能追加しています。
MIDIリセット命令を送る機能なので、その実態となるシステムエクスクルーシブメッセージを送信する機能を作っています。
ログ機能が中途半端ですがNeoMuplアップしてみました。
爆ボン動画もアップロード中です。
サムネイルが選べない問題自体は解決したのですが、今度はサムネイル出力が恐ろしく遅くなっていました。
NeoMuplの時の重みの計算方法を変更しました。
というか、元々計算方法が間違っていて、0でなければ常に時の重み全開となっていました。
というのも、再生確率の重み付けをするときに、1.0の固定の重みパラメータに、ナノ秒単位(1秒で10億)の重みを時の重み分だけ倍率をかけて足していたのです。
新しい計算方法では、再生確率の重み付けをするときに、全体の重みのうち何%を時の重みとして使うかという使い方になっています。
今度の計算方法ではちゃんと指定された割合に収まるように計算されます。
こうして計算された重みの数値に、更にスキップ率から計算される重みを掛け合わせて最終的な重みとなるわけです。
爆ボン動画のエンコードがうまくいかないのでいろいろ調整中です。
NeoMuplの時の重みの計算方法を変更しようかと思っています。
今のところ、固定値の何倍の時の重みをかけるか、というパラメータになっているので、0から1にした時点でかなり強く時の重みがかかってしまうのです。
その一方で、固定値を0にすることもできないので、使いづらい部分があるのです。
NeoMuplには古い曲を再生しやすいように補正する「時の重み」というパラメータがある。しかし時の重みはスキップ率の抑制因子としても働くのだ。そもそも時の重みというのは、再生順のランダム性を保ちながら最近再生されていない曲を出しやすくするためのランダム再生用のパラメータなのである。一方で、スキップ率は特定の曲を選ばれにくくするためのパラメータである。すると、スキップ率によって再生確率が下がった曲は、長い間再生されないことになる。こうなると、時の重みにより、再生確率がじわじわ上がってくる。結果として、時の重みが大きいときは、スキップ率が数値ほど効果を示さないのだ。
NeoMuplのランダム再生のときのスキップ率の利き方がどうもおかしい気がしたので、とりあえず統計を取るためにログ機能をつけました。
エラー発生時にも役に立つかもしれません。
とりあえず今は再生しようとしたときにのみ記録するようにしています。
このあたりをオプションで細かく設定できるようにしたらいろいろと役に立つログが取れるようになるかもしれません。
NeoMuplでMIDIが時々無音になる症状はいまだ改善されていません。
ポートの開きなおしじゃやっぱりResetの代わりにならないようですね。
VC++とVC#の両方でそれぞれプログラムを組まなければいけないのでDirectMusicを直接いじるようなことはしたくないのですが、そうも言ってられないようです。
めんどくさい。
ふにゃさんの設定画面作り始めました。
とりあえず左右でカテゴリを選んで上下で設定項目を選んで、決定ボタンで設定内容の変更、と、そんな感じですかね。
ふとNeoMuplでファイルの一部をフォルダに分けて入れているときにフォルダ直下にあるファイルとサブフォルダ内にあるファイルがごっちゃに表示されるのが気になって全体のファイル名よりもディレクトリ名のほうを優先してソートするような並び替え方法を実装してみました。
せっかくなのでNeoMuplもうちょっと改良することにしました。
前からMIDIが聞こえないということがよくあったので、それに対してある程度の対策を取ろうと思いまして。
うまく再生されない理由としては以下の2つが考えられます。
1.以前の不適切な演奏状態を引き継いでしまう(一部の音が消える)
2.すぐに演奏開始されず一部のMIDIメッセージが無視される
これらを解消するため、MIDIリセットを入れたり、準備時間の後再生開始する方法を作ることにしています。
NeoMuplの起動時に例外が起きることがある問題を対策していました。
例外をキャッチしたらメッセージを表示して問題のクラスを何もしないクラスに差し替えるだけですが、ちょっとは不安感が払拭されるものと思います。
でもこの問題自体不定期に起こるので、このバージョンの公開はしばらく先になると思われます。