質問
私は推測を持っているため、かなり簡単な質問は、私はどこにも決定的な答えを見つけることができません。
背景:私は最初のトラックでのTEMPO・コントロールとのマルチトラックMIDIファイルを持っています。私は(MIDIファイルの先頭からのオフセット秒の小数)他のトラックへの「秒」でABSOLUTE_TICK数を変換する必要があります。
Iテンポ(四分音符あたりMS)へのファイルのPulsePerQuarterNote(PPQN)に基づいて秒にABSOLUTE_TICKを関連付ける式を有する。
質問です:最初のトラック(トラック0)でのTEMPOの変更は、他のすべてのトラックに適用されます。
?もしそうなら、私は他のトラック(私が興味を持ってNOTE_ONとNOTE_OFFメッセージがあり、例えばトラック4、)の解析だが、その後、私はパラレルにトラック0でTEMPOの変化を指して指を維持する必要があります。その権利はありますか?
おかげで、
マーク
解決
要するに、はい。最初のトラックを使用すると、同じの絶対の時間で各トラックのためにこれらのメッセージを適用するので、全体の配置に適用されるタイミング情報が含まれています。すべてのイベントがティックにオフセットを使用するためには、最初に、テンポ・チェンジ・メッセージを抽出し、絶対時間に変換し、あなたが他のトラックに読んでいるよう、あなたはそのタイムラインに基づいて、これらのメッセージを適用する必要があります。
0フォーマットファイルでは、テンポの変更は、一つMTRKに散在しています。それは「テンポマップ」を生成することが可能ないくつかのデバイスで読み取ることができるようにフォーマット1において、一番最初MTRKイベントのみテンポ(および拍子)から成るべきです。それは、このMTRKでMIDIイベントを配置するのが最善ではありません。フォーマット2において、各MTRKは、少なくとも一つの最初のテンポ(および拍子)イベントで始まる必要があります。
これは標準が、この点ではそれほど具体的ではないので、いくつかのシーケンサは、このルールを破ると情報のタイミングと一緒に最初のトラックの実際のMIDIイベントを置けばいい、と述べました。この方法でフォーマットされている野生のMIDIファイルが発生する可能性があるので、あなたのプログラムは、両方のケースに対処する必要があります。