MIDI Clip File specificationについて

先月MIDI 2.0 June 2023 UpdatesがリリースされてすぐUMP仕様についてのアップデートをまとめましたが、今回は仕様に新しく追加されたSMF2とも呼ばれているMIDI Clip File specificationについて説明します。

想定していた通り、今回の内容は前回と比べたら短いものですし、内容もそもそも先月仕様書が出た直後にgistでまとめてMastodonで公開した内容のとおりなので、まあ見逃していた人向けという感じです。

SMF2 = MIDI Clip File (finalized) + MIDI Container File (unpublished, draft)

MIDI 2.0仕様は、単一の仕様ドキュメントではなく、複数の仕様がまとまって規定されているものです。仕様書のグループはいくつか存在しており、今回追加されたMIDI Clip File仕様は、その中でもMIDI 2.0 Core Specification Collectionと呼ばれる6件の仕様書のひとつに含まれているので、MIDI 2.0の中心的な仕様の1つと考えてよいでしょう。

MIDI Clip Fileは、拡張子.midi2が使われるべきである(should)とされ、midi.orgを中心にSMF2と呼ばれていますが、MIDI Clip Fileにはあくまで単一トラックのUMPシーケンスしか含まれないので、Format 0のSMFの代替にしかなりません。楽曲をエクスポートする場合のSMFの一般的なフォーマットは複数トラックを含めるFormat 1であり、MMAではこのFormat 1に相当するMIDI Container Fileが実現するまでは、SMFの代替は存在しないことになります。

MIDI Container Fileは、Sequence Project, Notation File, Other Data Files (audio, video, sequencer specific data…といった内容が含まれたzipアーカイブのようなファイルになると考えられますが、MIDI 2.0 WGの代表が「1年以内には完成しないだろう」と書いているので、まだ当てに出来ない仕様と考えたほうがよいでしょう。

この方面では、MMAはほぼ同様の目的でXMF File Formatというコンテナ・フォーマットを規定して、ほぼどのDAWでも採用されなかったという実績を残しているので、MIDI Container Fileが説得力のあるフォーマットとして幅広く使われるかどうかも、正直判断できないところです。

デルタタイム指定

UMPがJune 2023 Updatesで大きく変わったのは、DCS (Delta Clockstamps)というクロック単位の時間データが利用可能になったことです。UMP updatesの解説でも書きましたが、DCTPQ (Delta Clockstamp Ticks Per Quarter Note)とテンポがあって初めて秒単位の時刻に変換できます。この時間単位が無いと、音楽的な譜面の表現は現実的に不可能であり、SMF1にもSMF HeaderにこのDCTPQに相当する数値の指定がありました。

MIDI Clip Fileは、ファイルの先頭にあるSMF2CLIPという8バイトの識別子を除いて、全てUMPであり、Clip File Headerの最初のごく一部のUMPを除いて、全てにDelta Clockstampsが指定されることになります。これはSMF1におけるMIDIイベントの先頭にデルタタイム指定が7-bit encoded lengthとして付いていたのと同じです。

MIDI Clip Fileの構造

Clip Configuration HeaderとClip Sequence Dataの区別

MIDI Clip Fileは、Clip Configuration HeaderとClip Sequence Dataの2部で構成されています。先頭のSMF2CLIPを除いて全てがUMPなので、ヘッダー部分とシーケンス本体の部分の境目は曖昧であるようにも見えますが、UMPに新しく追加されたStart of Clipメッセージによって識別できます。このメッセージ「から」Clip Sequence Dataが始まると言えるかというと、その直前には前述のとおりDCSが付いていてこのDCSも単独で有効なUMPなので、定義上の説明としてはより明確な区別が求められるでしょう(「MIDI 2.0検定」みたいなやつを想定したコメント)。

Clip Configuration Header

Clip Configuration Header部分には以下のものが含まれ得ると想定されています:

  • Clip Configuration: MIDI 2.0 Profile Configurationを、MIDI-CIのSet Profiles Onのトランザクションとして記述します(複数)。これらにDCSは付きません
  • DCTPQ: ここでDCSのマスタークロックが指定されることになります。このDCTPQにはクロック値が0のDCSが付加されなければならず、またこれ以降のUMPには前述の通りDCSが必ず付いて回ることになります。DCSの値が0であることは求められていません(その値に待機の意味はなく、大抵は0になると思われますが)。
  • Flex DataのSet Tempoは1度だけ出現してもよい(may)ことになっています
  • Flex DataのSet Time SignatureはSet Tempoの後に1度だけ出現してもよい(may)ことになっています

なお、MIDI Clip Fileに含まれるSet Profile Onメッセージは、MIDI-CI仕様としては応答を想定するメッセージですが、MIDI Clip Fileはそれ自体が応答を処理することがあり得ないので、そのメッセージの応答の処理はシーケンサー次第です。また、指定したProfilesが全て有効になるとは限りません。Profileには複雑なものもあって、そこまで対応するかどうかもシーケンサー次第です(と仕様書で規定されています)。

それと、Set Profile OnのMIDI-CIメッセージで設定すべき各項目については仕様書をみてください(destination device IDはチャンネル、グループ、機能ブロックを適切に指定する必要があり、sender MUIDとdestination MUIDはBroadcastにする、など)。

Clip Configuration Headerにはその他のUMPメッセージが含まれることがあり得ますが、Property ExchangeについてはMIDI Container Fileに含まれるべきものであり、MIDI Clip Fileに含めてはならない(shall)と規定されています。

Clip Sequence Body

シーケンス本体側について説明することはあまりありません(SMF1でもそうでした)。いくつか注意事項があるので書いておきます。

  • Clipの先頭にはSet TempoとSet Time Signatureがあるべき(should)とされています。
  • 先頭以外でのSet TempoはMIDI Clockが出現しうるタイミングでのみ出現すべきとされています。これは要するにSysEx UMPパケットのシーケンスの途中などに含まれるべきではない、ということでしょう。
  • Set Time Signatureは小節線のあるところでのみ出現できる(shall)とされています。
  • 残りのUMPはProperty Exchange以外であれば何でも可能とされていますが、MIDI-CIなどの双方向メッセージングが求められるものは無視されるかもしれません
  • クリップの最後にはEnd of Clipを置きます。SMF1におけるEnd of Trackに相当すると考えてよいでしょう。