音屋FES【踊-Odori-】で使用したMIDI-譜面作成用アプリ「MidTimeConv」です。
Contents
機能概要
「MidTimeConv」とは
「MidTimeConv」はMIDIファイルを読み込んで、データ先頭から発音するまでの時間(ミリ秒)とそのキーを返します。
音屋FES【踊-Odori-】用に作成したものをMFCを使って、ダイアログで操作できるようにしたものです。
読み込んだMIDIファイルのノートオンタイミングを取得し、その一部を削除したものをテキストファイルに書き出します。
ダイアログの使い方
- 読み込みボタンで任意のMIDIファイルを読み込みます。
- 変換ボタンでMIDIファイルのデータ解析を行います。
- 書き出しボタンでMIDIのタイミングとキーのファイルを書き出します(2回ファイル保存ダイアログが起動します)。
出力データのイメージ。Timing.txtは抽出した音階の発音までの時間(ミリ秒)、Key.txtはドは0、ド#は1、・・・という形で表現します。
Timing.txtとKey.txtを組み合わせることで、音ゲー用の譜面データとなります。
たとえば、上図ならば、最初の音はドで、発音までの時間は387ミリ秒、次はレで、発音までの時間は870ミリ秒・・・という具合。
iniファイルの使い方
現状、ダイアログでのパラメータ設定が一切出来ないので、付属のiniファイルでいくつかパラメータを設定します。
- AdjustTime(-2147483648~2147483647) 取得した発音タイミングを一括でずらします。MP3との再生ずれの調整用です。
- GetNum(0~20000) MIDI譜面全体のイベント取得数です。全イベントが数値を超えた場合は、それ以後のデータ取得はしません。実際にはここから、さらに内部的にデータが削除されるので、出力されるイベント数はこの値よりも少なくなります。
- Mode(0~1) ハードモードが0、イージーモードが1です。モードの違いは後述します。
- LowVelocity(0~127) ここで設定した値以下のベロシティの音は読み込みません。ゴーストノート回避用です。
- LowKey(0~) ここで設定した値より低音側の音は読み込みません。ベロシティスイッチ回避用です。
ハードモード/イージーモード
イージーモードは取得音階がド~ミ(Key.txtで言うと0~5)までに制限されます。
ファ(Key.txtで言うと6)以上の音はド~ミに丸め込まれる形になります。
また、イージーモードはアプリ内部で削除するデータの数が多くなります。
現状、ユーザー側でどのようにデータを削除するかを設定できる機能を一切有していないため、ここは将来的に対応させることになるかと思います。
想定する使い方
- 同一曲のMP3ファイルとMIDIファイルを用意します。
- MidTimeConvを使って、MIDIファイルからノートオンの絶対時間を算出します。
- 算出した絶対時間とMP3ファイルの再生が同期されるように調整します。
- もし、算出した絶対時間とMP3ファイルの再生がずれるようならば、AdjustTimeを調整し、再出力します。
- タイミングが一致したらOKです。その絶対時間をゲームなどにお使いください。
ダウンロード
動作環境
Windows Vista以降 32bit/64bit
※開発環境の都合上、XP以前の環境では使えません。
開発環境
Visual Studio 2012 C++
インストール手順
インストールの必要はありません。フォルダを解凍して、exeをダブルクリックすればすぐに使用できます。レジストリも使用しませんので、不要になったらフォルダごとゴミ箱に棄ててください。
ダウンロード
使用上の注意点
留意点
シングルスレッドで動作しますので、MIDI解析中はダイアログの操作が出来なくなります。
複雑なMIDIファイルほど時間が長くなりますが、経験的に1分以上かかるようであれば、タスクマネージャから終了させてください。
その他、フリーウェアですので、自己責任でお使いください。
既知のバグ
- 同じタイミング、キーの音が重複して出力される場合があります
- 意図的に、マイナスの値、もしくはキーのファイルで13の値が出力される場合があります
- 内部のバッファは20000までしか確保していない為、20000音符以上のMIDIファイルを読み込むと解析中にアクセスバイオレーションが発生します
- データをカットするアルゴリズムは適当なものなので、MIDIの音符数が多くなると、どうしても出力されるデータ数も多くなります
コメント