Skip to content

Instantly share code, notes, and snippets.

@atsushieno
Last active December 23, 2023 17:28
Show Gist options
  • Save atsushieno/defb88a7cbe26d7d730824511f92a349 to your computer and use it in GitHub Desktop.
Save atsushieno/defb88a7cbe26d7d730824511f92a349 to your computer and use it in GitHub Desktop.

UMP June 2023 Updates

  • 複数のグループやチャンネルをまとめてひとつの送受信対象として認識するFunction Blocksのコンセプトが追加された(MIDI-CI仕様のほうも併せ読むべき)
  • message type 0xFn: (groupless channel-less) UMP stream messagesの追加 [F form] [status] [14-bytes data]
    • 先頭バイトの下位4ビットはSysEx/SysEx8/MDSの分割指定と同じ (0: one packet, 1: start 2: cont. 3: end)
    • サイズは先頭パケットの解析時に知ることが出来るので、SysExやMDSとは異なりデータサイズに関する情報は含まれない
    • Fn00: Endpoint Discovery
    • Fn01: Endpoint Info Notification
    • Fn02: Device Identity Notification
    • Fn03: Endpoint Name Notification
    • Fn04: Product Instance Id Notification
    • Fn05: Stream Configuration Request
    • Fn06: Stream Configuration Notification
    • Fn10: Function Block Discovery
    • Fn11: Function Block Info Notification
    • Fn12: Function Block Name Notification
    • Fn20: Start of Clip -> SMF2で活用
    • Fn21: End of Clip -> SMF2で活用
  • MIDI-CI Protocol NegotiationはStream Configuration Request/Notificationで代替されてdeprecatedになった
  • message type 0x0にDelta Clockstampsが追加された
    • 0003: DeltaClockstamp Ticks Per Quarter Note (DCTPQ) -> SMF2で活用
    • 0004: Delta Clockstamp (DC): Ticks Since Last Event -> SMF2で活用
    • JR Timestampのほうに追加されたFigure 32のtimestamp dataのデータ幅が間違っている(20bitもあることになっている)
  • message type 0x4 (MIDI 2.0 Channel Voice Messages)にいくつか特殊ルールが追加された
    • CC 84 Portamentoは32bit dataの先頭7bitをsource note numberとして使い、後はundefined (無視する)
    • CC 126 Omni-Off/Monoも同様
    • Registered Controllers (RPN)の定義が追加された? (MIDI 1.0 RPNとの関係を要検証)
      • RPN 0x0000: Pitch Bend Sensitivity
      • RPN 0x0002: Coarse Tuning
      • RPN 0x0003: Tuning Program Change
      • RPN 0x0004: Tuning Bank Select
      • RPN 0x0006: MPE MCM
    • Per Note Pitch Bend Sensitivityが追加された(status = 2ことPer Note Register Controllersで送信可)
  • message type 0xDにFlex Dataが追加された
    • [D-g f-a-ch sb status, 24 bytes data - g=group, f=format, a=address, sb=status bank]
    • format = パケットの分割方法はUMP Streamメッセージと同じ
      • テキストは可変長だが、00hが終端パケット(format 0 or 3)で出現したらそこで終わることがわかるので、データサイズ指定は不要(00hの扱いは後述)
    • address: 0 = チャンネル, 1 = グループ(channelは無視される), 2 & 3 = reserved
    • channel: address = 0以外のときは0固定 = reserved
    • status bank: 0 = セットアップおよび演奏イベント(テキストを含まない), 1 = メタデータテキスト 2 = 演奏テキストイベント(歌詞など), 3-FF: reserved
    • 一つのFlex Dataの一連のパケットの間に挟み込めるのはシステムリアルタイムメッセージとJR Clockのみとすべき ("should")
    • 個別のメッセージ
      • バイナリ?メッセージ (bank=0)
        • Set Tempo (Dg-0-1-00-00 10-nanoseconds-unit-per-Quarter-Note reserved reserved)
          • 実際のテンポの精度はシーケンサー実装依存
        • Set Time Signature (Dg-0-1-00-01 numerator-denominator-#of32notes-reserevd reserved reserved)
          • MIDI 1.0と同じセマンティクス
        • Set Metronome (Dg-0-1-chan-00-02 #clocksPerPrimaryClick-BarAccentPt1-Pt2-Pt3 #SubdivisionClicks1-Clicks2-reserved-reserved reserved)
        • Set Key Signature (Dg-0-a-chan-00-05 sharps/flats-TonicNote-reservedx3 reserved reserved
        • Set Chord Name (Dg-1-a-chan-00-06 ...)
          • SMF 1.0には無かったもの
          • 値フィールドが細かく規定されている
          • UMP仕様ではform = 1の部分しか説明されていない(form = 3の部分があるはず。ただ内容は推測できる)form = 1となっているが、form = 0の誤り
      • テキストメッセージ共通 (bank = 1 or 2: Dg-f-a-chan bank stat)
        • status bankとstatusで識別する
          • 01-00: 未知のテキストイベント
          • 01-01: プロジェクト名
          • 01-02: 曲名 (composition name, song name)
          • 01-03: MIDIクリップ名
            • addressは1とする ("shall")
          • 01-04: 著作権表記
          • 01-05: 作曲者名
          • 01-06: 作詞者名
          • 01-07: 編曲者名
          • 01-08: publisher name(発行者名、出版社名)
          • 01-09: 主要演奏者名 (primary performer name)
          • 01-0A: 並奏者名 (accompanying performer name)
          • 01-0B: 録音/演奏日 (recording/concert date)
          • 01-0C: 録音/演奏場所 (location)
          • 02-00: 未知の演奏テキストイベント
          • 02-01: 歌詞
            • ひとつのメッセージが0x20 (空白)で終わらない場合は、ひとつの単語が完結していないまま次の演奏命令に移っていることを示す
            • 0x0Dは改行を、その後の0x0Aは段落の終わりを示すものとされる
            • 0x00はパケットの終端(format = 0 or 3)ではデータの終端を示すが、継続パケット(format = 2)では"melisma"を意味する(直前のsyllableが歌い続けられる)
              • 単一パケットでmelismaが出現する歌詞が完結する場合についての仕様の検証が足りていない気がする
            • 仕様書のこの辺の説明ではContinue (Form = 0x1) というのがちょくちょく出てくるが、0x2の誤り
          • 02-02: 歌詞の言語 (BCP 47準拠)
          • 02-03: ルビ。歌詞と同様のtokenizationが想定されている
          • 02-04: ルビの言語(歌詞の言語と同様)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment