1

私の目標は、スタンダードMIDIファイルから正確なノートのオン/オフのタイミングを取得することです。ファイルはタイプ1(複数のトラックがあります)で、タイミングモードは四半期ごとのティックです。

私のアプローチ:

  1. すべてのトラックでsetTempo-Eventsを検索し、それらをすべてリストに入れます。また、後続のsetTempo-Events間のティック数をリストに保存します。

  2. 次に、各イベントのすべてのdeltaTimeを合計し、各イベントのティックゼロを基準にしたティックの絶対数​​を取得します。

  3. 最後に、ティックの絶対数​​とテンポを含むリストから時間を秒単位で計算します

これは、MIDIファイルからノートオンセットを取得するための正しい方法ですか、それとも拍子記号も考慮する必要がありますか?-setTempo-eventマイクロ秒/クォーターまたはマイクロ秒/ビートからのデータですか?

別の質問:2つのトラックを持つファイルを取得したと仮定します。トラック2には、ファイルの最後に1つのイベントしかありません。たとえば、deltatime=1000の場合です。トラック1には2つのsetTempo-Eventがあり、1つはdeltatime = 0で、もう1つはdeltatime=500です。

トラック2で1000ティックを待機するために使用されるテンポはどれですか?最初のテンポ、2番目、またはその両方ですか?

4

1 に答える 1

2

私が使用した一般的な戦略は次のとおりです。

  1. すべてのテンポ変更をリストに記録します。
  2. テンポ変更ごとに、前のテンポとそのリアルタイムを使用して、そのテンポ変更のリアルタイムを計算します。これにより、ティック単位の開始時間と秒単位の開始時間を持つテンポ「間隔」のリストが作成されます
  3. 各イベントについて、どのテンポ区間に該当するかを判断し、テンポ区間の開始からの実際の時間を計算します

一度にすべての処理を順番どおりに実行している場合、音符がどの間隔に収まるかを判断することは、間隔が構築された後であればかなり簡単です。

2 番目の質問については、以前のすべてのテンポがイベントのリアルタイムに影響します。上記の戦略は、そのすべてを説明します。

于 2012-12-20T19:03:58.273 に答える