MIDI-絶対時間換算アプリ「MidTimeConv」

音屋FES【踊-Odori-】で使用したMIDI-譜面作成用アプリ「MidTimeConv」です。

Contents

機能概要

「MidTimeConv」とは

「MidTimeConv」はMIDIファイルを読み込んで、データ先頭から発音するまでの時間(ミリ秒)とそのキーを返します。

音屋FES【踊-Odori-】用に作成したものをMFCを使って、ダイアログで操作できるようにしたものです。

読み込んだMIDIファイルのノートオンタイミングを取得し、その一部を削除したものをテキストファイルに書き出します。

ダイアログの使い方

  1. 読み込みボタンで任意のMIDIファイルを読み込みます。
  2. 変換ボタンでMIDIファイルのデータ解析を行います。
  3. 書き出しボタンでMIDIのタイミングとキーのファイルを書き出します(2回ファイル保存ダイアログが起動します)。

出力データのイメージ。Timing.txtは抽出した音階の発音までの時間(ミリ秒)、Key.txtはドは0、ド#は1、・・・という形で表現します。

Timing.txtとKey.txtを組み合わせることで、音ゲー用の譜面データとなります。

たとえば、上図ならば、最初の音はドで、発音までの時間は387ミリ秒、次はレで、発音までの時間は870ミリ秒・・・という具合。

iniファイルの使い方

現状、ダイアログでのパラメータ設定が一切出来ないので、付属のiniファイルでいくつかパラメータを設定します。

  1. AdjustTime(-2147483648~2147483647) 取得した発音タイミングを一括でずらします。MP3との再生ずれの調整用です。
  2. GetNum(0~20000) MIDI譜面全体のイベント取得数です。全イベントが数値を超えた場合は、それ以後のデータ取得はしません。実際にはここから、さらに内部的にデータが削除されるので、出力されるイベント数はこの値よりも少なくなります。
  3. Mode(0~1) ハードモードが0、イージーモードが1です。モードの違いは後述します。
  4. LowVelocity(0~127) ここで設定した値以下のベロシティの音は読み込みません。ゴーストノート回避用です。
  5. LowKey(0~) ここで設定した値より低音側の音は読み込みません。ベロシティスイッチ回避用です。

ハードモード/イージーモード

イージーモードは取得音階がド~ミ(Key.txtで言うと0~5)までに制限されます。

ファ(Key.txtで言うと6)以上の音はド~ミに丸め込まれる形になります。

また、イージーモードはアプリ内部で削除するデータの数が多くなります。

現状、ユーザー側でどのようにデータを削除するかを設定できる機能を一切有していないため、ここは将来的に対応させることになるかと思います。

想定する使い方

  1. 同一曲のMP3ファイルとMIDIファイルを用意します。
  2. MidTimeConvを使って、MIDIファイルからノートオンの絶対時間を算出します。
  3. 算出した絶対時間とMP3ファイルの再生が同期されるように調整します。
  4. もし、算出した絶対時間とMP3ファイルの再生がずれるようならば、AdjustTimeを調整し、再出力します。
  5. タイミングが一致したらOKです。その絶対時間をゲームなどにお使いください。

ダウンロード

動作環境

Windows Vista以降 32bit/64bit
※開発環境の都合上、XP以前の環境では使えません。

開発環境

Visual Studio 2012 C++

インストール手順

インストールの必要はありません。フォルダを解凍して、exeをダブルクリックすればすぐに使用できます。レジストリも使用しませんので、不要になったらフォルダごとゴミ箱に棄ててください。

ダウンロード

ver0.0.0.2ダウンロード

使用上の注意点

留意点

シングルスレッドで動作しますので、MIDI解析中はダイアログの操作が出来なくなります。

複雑なMIDIファイルほど時間が長くなりますが、経験的に1分以上かかるようであれば、タスクマネージャから終了させてください。

その他、フリーウェアですので、自己責任でお使いください。

既知のバグ

  1. 同じタイミング、キーの音が重複して出力される場合があります
  2. 意図的に、マイナスの値、もしくはキーのファイルで13の値が出力される場合があります
  3. 内部のバッファは20000までしか確保していない為、20000音符以上のMIDIファイルを読み込むと解析中にアクセスバイオレーションが発生します
  4. データをカットするアルゴリズムは適当なものなので、MIDIの音符数が多くなると、どうしても出力されるデータ数も多くなります

コメント

タイトルとURLをコピーしました