6

私はしばらくの間、この件について調査しましたが、まだ理解していません。midas3 ライブラリ (Midi-actionscript3) を使用して、midi をフラッシュにインポートします。タイムライン上の各メモ項目を取得します。分割値 (192) を取得し、すべての「GET-TEMPO」要素は 81 に等しくなります。

MIDI の実際の時間を取得するために多くの組み合わせを試しましたが、まだうまくいきません (タイムライン * 192/60 など)。

実際の時間と同期していないことがわかっている理由は、メモをフラッシュで単純な長方形として視覚化するときに、mp3 ファイルが再生するものとまったく同じように表示されるかどうかを確認するためです (単純な変換を使用して、midi ファイルをこの mp3 に変換しました)。プログラム)

私はすべてがどのように計算されるかについて多くのことを読みましたが、それを正しくするために使用する必要がある数をまだ把握していません (タイムライン * MysteriusConstant = ReaTIME、MysteriusConstant の値は何ですか? それは本当に定数ですか? そうでない場合はどのようにどのように変化するかを計算しますか?)

ありがとうアロン

4

1 に答える 1

8

私があなたの質問を正しく理解していれば、基本的に各 MIDI ノートのティックをミリ秒の値に変換して、タイムラインに沿ってノートを視覚的に表示できるようにする必要があります。

したがって、最初に、分割とテンポを使用して個々のティックの値を決定する必要があります。その変換は基本的に次のようになります。

 [  1 min    60 sec   1 beat     Z clocks ]
 | ------- * ------ * -------- * -------- | = seconds
 [ X beats   1 min    Y clocks       1    ]

したがって、上記の変換でXは、 はテンポ、Yは分割、Zは着信イベントからのクロック数です。すべての単位が相殺され、秒単位の値が得られることがわかります。したがって、その変換の要約版は次のとおりです。

(60 * clocks) / (tempo * division) = seconds

ここで指定された値は、シーケンスの開始からではなく、のMIDI イベントsecondsからの秒数であることに注意してください。一貫したシーケンスを構築するには、この値の現在の合計を保持する必要があります。

于 2011-03-14T10:14:41.310 に答える