Fountain Coach Gitowner-controlled · read only

midi2.git · midi2.full.closed.schema.json

midi2.git / midi2.full.closed.schema.json

revision 232640897843394f9848cc5ef45b809e559120f5 · bounded preview

{
  "$defs": {
    "Uint4": {
      "type": "integer",
      "minimum": 0,
      "maximum": 15,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP field widths and numeric ranges",
          "requirement": "ump-field-widths-uint4"
        }
      ],
      "x-verification": [
        {
          "kind": "schema-verifier",
          "id": "Scripts/verify_spec_provenance.py::schema-constraint-validation"
        }
      ]
    },
    "Uint7": {
      "type": "integer",
      "minimum": 0,
      "maximum": 127,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP field widths and numeric ranges",
          "requirement": "ump-field-widths-uint7"
        }
      ],
      "x-verification": [
        {
          "kind": "schema-verifier",
          "id": "Scripts/verify_spec_provenance.py::schema-constraint-validation"
        }
      ]
    },
    "Uint8": {
      "type": "integer",
      "minimum": 0,
      "maximum": 255,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP field widths and numeric ranges",
          "requirement": "ump-field-widths-uint8"
        }
      ],
      "x-verification": [
        {
          "kind": "schema-verifier",
          "id": "Scripts/verify_spec_provenance.py::schema-constraint-validation"
        }
      ]
    },
    "Uint14": {
      "type": "integer",
      "minimum": 0,
      "maximum": 16383,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP field widths and numeric ranges",
          "requirement": "ump-field-widths-uint14"
        }
      ],
      "x-verification": [
        {
          "kind": "schema-verifier",
          "id": "Scripts/verify_spec_provenance.py::schema-constraint-validation"
        }
      ]
    },
    "Uint16": {
      "type": "integer",
      "minimum": 0,
      "maximum": 65535,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP field widths and numeric ranges",
          "requirement": "ump-field-widths-uint16"
        }
      ],
      "x-verification": [
        {
          "kind": "schema-verifier",
          "id": "Scripts/verify_spec_provenance.py::schema-constraint-validation"
        }
      ]
    },
    "Uint21": {
      "type": "integer",
      "minimum": 0,
      "maximum": 2097151,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP field widths and numeric ranges",
          "requirement": "ump-field-widths-uint21"
        }
      ],
      "x-verification": [
        {
          "kind": "schema-verifier",
          "id": "Scripts/verify_spec_provenance.py::schema-constraint-validation"
        }
      ]
    },
    "Uint28": {
      "type": "integer",
      "minimum": 0,
      "maximum": 268435455,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP field widths and numeric ranges",
          "requirement": "ump-field-widths-uint28"
        }
      ],
      "x-verification": [
        {
          "kind": "schema-verifier",
          "id": "Scripts/verify_spec_provenance.py::schema-constraint-validation"
        }
      ]
    },
    "Uint32": {
      "type": "integer",
      "minimum": 0,
      "maximum": 4294967295,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP field widths and numeric ranges",
          "requirement": "ump-field-widths-uint32"
        }
      ],
      "x-verification": [
        {
          "kind": "schema-verifier",
          "id": "Scripts/verify_spec_provenance.py::schema-constraint-validation"
        }
      ]
    },
    "Int32": {
      "type": "integer",
      "minimum": -2147483648,
      "maximum": 2147483647,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP field widths and numeric ranges",
          "requirement": "ump-field-widths-int32"
        }
      ],
      "x-verification": [
        {
          "kind": "schema-verifier",
          "id": "Scripts/verify_spec_provenance.py::schema-constraint-validation"
        }
      ]
    },
    "ByteArray": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Uint8"
      },
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP field widths and numeric ranges",
          "requirement": "ump-field-widths-bytearray"
        }
      ],
      "x-verification": [
        {
          "kind": "schema-verifier",
          "id": "Scripts/verify_spec_provenance.py::schema-constraint-validation"
        }
      ]
    },
    "UmpMessageType": {
      "type": "integer",
      "enum": [
        0,
        1,
        2,
        3,
        4,
        5,
        13,
        15
      ],
      "description": "UMP Message Type nibble: 0=Utility,1=System,2=MIDI1 Ch Voice,3=SysEx7,4=MIDI2 Ch Voice,5=SysEx8/MDS,13=Flex,15=Stream.",
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP message types and packet sizes",
          "requirement": "ump-packet-structure-umpmessagetype"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/UmpPacketsTests.swift"
        }
      ]
    },
    "Group": {
      "$ref": "#/$defs/Uint4",
      "description": "MIDI Group (0-15). Utility (0x0) and Stream (0xF) are groupless in v1.1+; set 0.",
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 37,
          "section": "Figures 18-23 and stream messages",
          "requirement": "ump-stream-structure-group"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/StreamMappingTests.swift"
        }
      ]
    },
    "UmpHeader32": {
      "type": "object",
      "required": [
        "messageType"
      ],
      "properties": {
        "messageType": {
          "enum": [
            0,
            1,
            2,
            3,
            15
          ]
        },
        "group": {
          "$ref": "#/$defs/Group"
        }
      },
      "description": "Common 32-bit UMP header (messageType + optional group).",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 37,
          "section": "Figures 18-23 and stream messages",
          "requirement": "ump-stream-structure-umpheader32"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/StreamMappingTests.swift"
        }
      ]
    },
    "UmpHeader64": {
      "type": "object",
      "required": [
        "messageType",
        "group",
        "statusNibble",
        "channel"
      ],
      "properties": {
        "messageType": {
          "const": 4
        },
        "group": {
          "$ref": "#/$defs/Group"
        },
        "statusNibble": {
          "type": "integer",
          "minimum": 8,
          "maximum": 15
        },
        "channel": {
          "$ref": "#/$defs/Uint4"
        }
      },
      "description": "64-bit UMP header for MIDI 2.0 Channel Voice.",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 37,
          "section": "Figures 18-23 and stream messages",
          "requirement": "ump-stream-structure-umpheader64"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/StreamMappingTests.swift"
        }
      ]
    },
    "UmpHeader128": {
      "type": "object",
      "required": [
        "messageType"
      ],
      "properties": {
        "messageType": {
          "enum": [
            5,
            13
          ]
        },
        "group": {
          "$ref": "#/$defs/Group"
        }
      },
      "description": "128-bit UMP header for Data (SysEx8/MDS) and Flex Data.",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 37,
          "section": "Figures 18-23 and stream messages",
          "requirement": "ump-stream-structure-umpheader128"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/StreamMappingTests.swift"
        }
      ]
    },
    "UtilityOpcode": {
      "type": "integer",
      "enum": [
        0,
        1,
        2
      ],
      "description": "0=NOOP,1=JR Clock,2=JR Timestamp",
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 44,
          "section": "Utility and System messages",
          "requirement": "utility-system-structure-utilityopcode"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/UtilityBodyTests.swift"
        }
      ]
    },
    "UtilityBody": {
      "type": "object",
      "required": [
        "opcode"
      ],
      "properties": {
        "opcode": {
          "$ref": "#/$defs/UtilityOpcode"
        },
        "jrClock": {
          "type": "object",
          "required": [
            "timestamp32"
          ],
          "properties": {
            "timestamp32": {
              "$ref": "#/$defs/Uint32"
            }
          },
          "description": "Present when opcode=1",
          "additionalProperties": false
        },
        "jrTimestamp": {
          "type": "object",
          "required": [
            "time15"
          ],
          "properties": {
            "time15": {
              "type": "integer",
              "minimum": 0,
              "maximum": 32767
            }
          },
          "description": "Present when opcode=2",
          "additionalProperties": false
        }
      },
      "description": "UMP Type 0x0 Utility messages (groupless).",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 44,
          "section": "Utility and System messages",
          "requirement": "utility-system-structure-utilitybody"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/UtilityBodyTests.swift"
        }
      ]
    },
    "SystemStatus": {
      "type": "integer",
      "enum": [
        241,
        242,
        243,
        246,
        248,
        250,
        251,
        252,
        254,
        255
      ],
      "description": "MIDI System Common/Real-Time per UMP.",
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 44,
          "section": "Utility and System messages",
          "requirement": "utility-system-structure-systemstatus"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/UtilityBodyTests.swift"
        }
      ]
    },
    "SystemCommonRealtimeBody": {
      "type": "object",
      "required": [
        "status"
      ],
      "properties": {
        "status": {
          "$ref": "#/$defs/SystemStatus"
        },
        "data1": {
          "$ref": "#/$defs/Uint8"
        },
        "data2": {
          "$ref": "#/$defs/Uint8"
        }
      },
      "description": "UMP 0x1 System Common & Real-Time.",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 44,
          "section": "Utility and System messages",
          "requirement": "utility-system-structure-systemcommonrealtimebody"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/UtilityBodyTests.swift"
        }
      ]
    },
    "Midi1StatusNibble": {
      "type": "integer",
      "enum": [
        8,
        9,
        10,
        11,
        12,
        13,
        14
      ],
      "description": "0x8..0xE",
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 52,
          "section": "MIDI 1.0 Channel Voice messages",
          "requirement": "midi1-channel-voice-midi1statusnibble"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi1ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "Midi1ChannelVoiceBody": {
      "type": "object",
      "required": [
        "statusNibble",
        "channel"
      ],
      "properties": {
        "statusNibble": {
          "$ref": "#/$defs/Midi1StatusNibble"
        },
        "channel": {
          "$ref": "#/$defs/Uint4"
        },
        "noteNumber": {
          "$ref": "#/$defs/Uint7"
        },
        "velocity7": {
          "$ref": "#/$defs/Uint7"
        },
        "pressure7": {
          "$ref": "#/$defs/Uint7"
        },
        "control": {
          "$ref": "#/$defs/Uint7"
        },
        "value7": {
          "$ref": "#/$defs/Uint7"
        },
        "program": {
          "$ref": "#/$defs/Uint7"
        },
        "pitchBend14": {
          "$ref": "#/$defs/Uint14"
        }
      },
      "description": "Messages share this body, with relevant fields set based on status.",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 52,
          "section": "MIDI 1.0 Channel Voice messages",
          "requirement": "midi1-channel-voice-midi1channelvoicebody"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi1ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "SysEx7Packet": {
      "type": "object",
      "required": [
        "streamStatus",
        "payload"
      ],
      "properties": {
        "streamStatus": {
          "type": "string",
          "enum": [
            "single",
            "start",
            "continue",
            "end"
          ]
        },
        "payload": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Uint8"
          },
          "maxItems": 6,
          "minItems": 0
        }
      },
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 50,
          "section": "SysEx and data messages",
          "requirement": "data-message-structure-sysex7packet"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/DataMessageBodyTests.swift"
        }
      ]
    },
    "SysEx7Body": {
      "type": "object",
      "required": [
        "manufacturerId",
        "packets"
      ],
      "properties": {
        "manufacturerId": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Uint8"
              },
              "minItems": 1,
              "maxItems": 1
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Uint8"
              },
              "minItems": 3,
              "maxItems": 3
            }
          ]
        },
        "packets": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/SysEx7Packet"
          },
          "minItems": 1
        }
      },
      "description": "7-bit clean stream framed in 32-bit UMP words (up to 6 bytes per word).",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 50,
          "section": "SysEx and data messages",
          "requirement": "data-message-structure-sysex7body"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/DataMessageBodyTests.swift"
        }
      ]
    },
    "Midi2StatusNibble": {
      "type": "integer",
      "enum": [
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15
      ],
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 56,
          "section": "MIDI 2.0 Channel Voice messages",
          "requirement": "midi2-channel-voice-midi2statusnibble"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi2ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "NoteAttributeType": {
      "type": "integer",
      "minimum": 0,
      "maximum": 255,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 56,
          "section": "MIDI 2.0 Channel Voice messages",
          "requirement": "midi2-channel-voice-noteattributetype"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi2ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "Midi2ChannelVoiceBody": {
      "type": "object",
      "required": [
        "statusNibble",
        "channel"
      ],
      "properties": {
        "statusNibble": {
          "$ref": "#/$defs/Midi2StatusNibble"
        },
        "channel": {
          "$ref": "#/$defs/Uint4"
        },
        "noteNumber": {
          "$ref": "#/$defs/Uint7"
        },
        "velocity16": {
          "$ref": "#/$defs/Uint16"
        },
        "attributeType": {
          "$ref": "#/$defs/NoteAttributeType"
        },
        "attributeData16": {
          "$ref": "#/$defs/Uint16"
        },
        "polyPressure32": {
          "$ref": "#/$defs/Uint32"
        },
        "control": {
          "$ref": "#/$defs/Uint7"
        },
        "controlValue32": {
          "$ref": "#/$defs/Uint32"
        },
        "program": {
          "$ref": "#/$defs/Uint7"
        },
        "bankMsb": {
          "$ref": "#/$defs/Uint7"
        },
        "bankLsb": {
          "$ref": "#/$defs/Uint7"
        },
        "bankValid": {
          "type": "boolean"
        },
        "channelPressure32": {
          "$ref": "#/$defs/Uint32"
        },
        "pitchBend32": {
          "$ref": "#/$defs/Uint32"
        },
        "rpnIndexMsb": {
          "$ref": "#/$defs/Uint7"
        },
        "rpnIndexLsb": {
          "$ref": "#/$defs/Uint7"
        },
        "rpnData32": {
          "$ref": "#/$defs/Uint32"
        },
        "nrpnIndexMsb": {
          "$ref": "#/$defs/Uint7"
        },
        "nrpnIndexLsb": {
          "$ref": "#/$defs/Uint7"
        },
        "nrpnData32": {
          "$ref": "#/$defs/Uint32"
        },
        "rpnDelta32": {
          "$ref": "#/$defs/Int32"
        },
        "nrpnDelta32": {
          "$ref": "#/$defs/Int32"
        },
        "perNoteMgmt": {
          "type": "object",
          "properties": {
            "noteNumber": {
              "$ref": "#/$defs/Uint7"
            },
            "detach": {
              "type": "boolean",
              "description": "D bit"
            },
            "reset": {
              "type": "boolean",
              "description": "S bit"
            }
          },
          "additionalProperties": false
        },
        "regPerNoteCtrlIndex": {
          "$ref": "#/$defs/Uint8"
        },
        "regPerNoteCtrlValue32": {
          "$ref": "#/$defs/Uint32"
        },
        "assignPerNoteCtrlIndex": {
          "$ref": "#/$defs/Uint8"
        },
        "assignPerNoteCtrlValue32": {
          "$ref": "#/$defs/Uint32"
        }
      },
      "description": "Only fields relevant to the specific status are present.",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 56,
          "section": "MIDI 2.0 Channel Voice messages",
          "requirement": "midi2-channel-voice-midi2channelvoicebody"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi2ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "DataMessageKind": {
      "type": "string",
      "enum": [
        "sysex8",
        "mds"
      ],
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 50,
          "section": "SysEx and data messages",
          "requirement": "data-message-structure-datamessagekind"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/DataMessageBodyTests.swift"
        }
      ]
    },
    "DataMessageBody": {
      "type": "object",
      "required": [
        "kind"
      ],
      "properties": {
        "kind": {
          "$ref": "#/$defs/DataMessageKind"
        },
        "sysex8": {
          "type": "object",
          "required": [
            "manufacturerId",
            "length",
            "data"
          ],
          "properties": {
            "manufacturerId": {
              "oneOf": [
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Uint8"
                  },
                  "minItems": 1,
                  "maxItems": 1
                },
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Uint8"
                  },
                  "minItems": 3,
                  "maxItems": 3
                }
              ]
            },
            "length": {
              "$ref": "#/$defs/Uint28"
            },
            "data": {
              "$ref": "#/$defs/ByteArray"
            }
          },
          "description": "8-bit clean SysEx8 payload",
          "additionalProperties": false
        },
        "mds": {
          "type": "object",
          "required": [
            "messageId",
            "totalChunks",
            "chunks"
          ],
          "properties": {
            "messageId": {
              "$ref": "#/$defs/Uint16"
            },
            "totalChunks": {
              "$ref": "#/$defs/Uint16"
            },
            "chunks": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "index",
                  "validByteCount",
                  "payload"
                ],
                "properties": {
                  "index": {
                    "$ref": "#/$defs/Uint16"
                  },
                  "validByteCount": {
                    "$ref": "#/$defs/Uint8"
                  },
                  "payload": {
                    "type": "array",
                    "items": {
                      "$ref": "#/$defs/Uint8"
                    },
                    "maxItems": 14
                  }
                },
                "additionalProperties": false
              }
            }
          },
          "description": "Mixed Data Set chunking for large transfers",
          "additionalProperties": false
        }
      },
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 50,
          "section": "SysEx and data messages",
          "requirement": "data-message-structure-datamessagebody"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/DataMessageBodyTests.swift"
        }
      ]
    },
    "FlexDataBody": {
      "oneOf": [
        {
          "$ref": "#/$defs/Flex.Tempo"
        },
        {
          "$ref": "#/$defs/Flex.TimeSignature"
        },
        {
          "$ref": "#/$defs/Flex.Metronome"
        },
        {
          "$ref": "#/$defs/Flex.KeySignature"
        },
        {
          "$ref": "#/$defs/Flex.ChordName"
        },
        {
          "$ref": "#/$defs/Flex.Text"
        },
        {
          "$ref": "#/$defs/Flex.Lyric"
        },
        {
          "$ref": "#/$defs/Flex.Ruby"
        }
      ],
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 89,
          "section": "Flex Data messages",
          "requirement": "flex-data-structure-flexdatabody"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/FlexDataBodyTests.swift"
        }
      ]
    },
    "StreamOpcode": {
      "type": "integer",
      "enum": [
        0,
        1,
        2,
        3,
        4,
        5,
        6,
        16,
        17,
        18,
        32,
        33
      ],
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 37,
          "section": "Figures 18-23 and stream messages",
          "requirement": "ump-stream-structure-streamopcode"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/StreamMappingTests.swift"
        }
      ]
    },
    "StreamBody": {
      "type": "object",
      "required": [
        "opcode"
      ],
      "properties": {
        "opcode": {
          "$ref": "#/$defs/StreamOpcode"
        },
        "endpointDiscovery": {
          "type": "object",
          "properties": {
            "majorVersion": {
              "$ref": "#/$defs/Uint8"
            },
            "minorVersion": {
              "$ref": "#/$defs/Uint8"
            },
            "maxGroups": {
              "$ref": "#/$defs/Uint4"
            },
            "filter": {
              "type": "object",
              "description": "Filter bitmap (Figure 12, M2-104-UM v1.1.2 p.33)",
              "properties": {
                "endpointInfo": {
                  "type": "boolean",
                  "description": "Request Endpoint Info Notification"
                },
                "deviceIdentity": {
                  "type": "boolean",
                  "description": "Request Device Identity Notification"
                },
                "endpointName": {
                  "type": "boolean",
                  "description": "Request Endpoint Name Notification"
                },
                "productInstanceId": {
                  "type": "boolean",
                  "description": "Request Product Instance ID Notification"
                },
                "streamConfig": {
                  "type": "boolean",
                  "description": "Request Stream Configuration Notification"
                }
              },
              "additionalProperties": false
            }
          },
          "additionalProperties": false
        },
        "endpointInfoNotification": {
          "type": "object",
          "properties": {
            "staticFunctionBlocks": {
              "type": "boolean",
              "description": "S bit; when true Function Blocks are static and do not change after discovery (Figure 13, M2-104-UM v1.1.2 p.33)"
            },
            "numberOfFunctionBlocks": {
              "type": "integer",
              "minimum": 0,
              "maximum": 32,
              "description": "Number of Function Blocks (0x00 = none, 0x01\u20130x20 = count, 0x21\u20130x7F reserved) (Figure 13, p.33)"
            },
            "umpVersionMajor": {
              "$ref": "#/$defs/Uint8"
            },
            "umpVersionMinor": {
              "$ref": "#/$defs/Uint8"
            },
            "midi2Supported": {
              "type": "boolean",
              "description": "M2 capability flag"
            },
            "midi1Supported": {
              "type": "boolean",
              "description": "M1 capability flag"
            },
            "jrTimestampsRx": {
              "type": "boolean",
              "description": "RXJR capability flag"
            },
            "jrTimestampsTx": {
              "type": "boolean",
              "description": "TXJR capability flag"
            }
          },
          "additionalProperties": false
        },
        "deviceIdentityNotification": {
          "type": "object",
          "properties": {
            "manufacturerId": {
              "oneOf": [
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Uint8"
                  },
                  "minItems": 1,
                  "maxItems": 1
                },
                {
                  "type": "array",
                  "items": {
                    "$ref": "#/$defs/Uint8"
                  },
                  "minItems": 3,
                  "maxItems": 3
                }
              ],
              "description": "SysEx manufacturer ID (1-byte or 3-byte, pad with zeros when 1-byte) (Figure 14, M2-104-UM v1.1.2 p.34)"
            },
            "deviceFamily": {
              "$ref": "#/$defs/Uint16",
              "description": "Device family (SysEx Device Inquiry)"
            },
            "deviceModel": {
              "$ref": "#/$defs/Uint16",
              "description": "Device family model number"
            },
            "softwareRevision": {
              "$ref": "#/$defs/Uint32",
              "description": "Software revision level"
            }
          },
          "additionalProperties": false
        },
        "endpointNameNotification": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 98,
              "description": "UTF-8 endpoint name; up to 98 bytes across Complete/Start/Continue/End forms (Figure 15, M2-104-UM v1.1.2 p.35)"
            }
          },
          "required": [
            "name"
          ],
          "additionalProperties": false
        },
        "productInstanceIdNotification": {
          "type": "object",
          "properties": {
            "productInstanceId": {
              "type": "string",
              "maxLength": 42,
              "description": "ASCII 0x20\u20130x7E Product Instance Id, up to 42 bytes across Complete/Start/Continue/End forms (Figure 16, M2-104-UM v1.1.2 p.35)"
            }
          },
          "required": [
            "productInstanceId"
          ],
          "additionalProperties": false
        },
        "streamConfigRequest": {
          "type": "object",
          "properties": {
            "protocol": {
              "type": "string",
              "enum": [
                "midi1",
                "midi2"
              ]
            },
            "jrTimestampsTx": {
              "type": "boolean",
              "description": "JR Transmit requested; if unsupported, receiver should send Stream Config Notification to switch protocol without JR (Section 7.2.2.3)"
            },
            "jrTimestampsRx": {
              "type": "boolean",
              "description": "JR Receive requested; if unsupported, receiver should send Stream Config Notification to switch protocol without JR (Section 7.2.2.3)"
            }
          },
          "additionalProperties": false
        },
        "streamConfigNotification": {
          "type": "object",
          "properties": {
            "protocol": {
              "type": "string",
              "enum": [
                "midi1",
                "midi2"
              ]
            },
            "jrTimestampsTx": {
              "type": "boolean"
            },
            "jrTimestampsRx": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        },
        "functionBlockDiscovery": {
          "type": "object",
          "properties": {
            "filterBitmap": {
              "$ref": "#/$defs/Uint32"
            }
          },
          "additionalProperties": false
        },
        "functionBlockInfo": {
          "type": "object",
          "properties": {
            "index": {
              "$ref": "#/$defs/Uint8"
            },
            "firstGroup": {
              "$ref": "#/$defs/Uint4"
            },
            "groupCount": {
              "$ref": "#/$defs/Uint4"
            },
            "active": {
              "type": "boolean",
              "description": "Function Block active flag (Figure 22, M2-104-UM v1.1.2 p.40)"
            },
            "direction": {
              "type": "integer",
              "enum": [
                0,
                1,
                2,
                3
              ],
              "description": "0=reserved, 1=input only, 2=output only, 3=bidirectional (Figure 22, p.40)"
            },
            "midi1Bandwidth": {
              "type": "integer",
              "enum": [
                0,
                1,
                2
              ],
              "description": "MIDI 1.0 bandwidth: 0=not MIDI1, 1=do not restrict, 2=restrict to 31.25 kbps (Figure 22, p.40)"
            }
          },
          "additionalProperties": false
        },
        "processInquiry": {
          "type": "object",
          "properties": {
            "functionBlock": {
              "$ref": "#/$defs/Uint7"
            },
            "part": {
              "$ref": "#/$defs/Uint4"
            }
          },
          "additionalProperties": false
        },
        "processInquiryReply": {
          "type": "object",
          "properties": {
            "functionBlock": {
              "$ref": "#/$defs/Uint7"
            },
            "part": {
              "$ref": "#/$defs/Uint4"
            }
          },
          "additionalProperties": false
        }
      },
      "description": "Endpoint discovery, protocol selection, and FB info.",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 37,
          "section": "Figures 18-23 and stream messages",
          "requirement": "ump-stream-structure-streambody"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/StreamMappingTests.swift"
        }
      ]
    },
    "DeltaClockstampConfig": {
      "type": "object",
      "properties": {
        "dctpq": {
          "$ref": "#/$defs/Uint16",
          "description": "Ticks per quarter note"
        },
        "initialTempoMicrosecPerQN": {
          "$ref": "#/$defs/Uint32"
        },
        "timeSignature": {
          "type": "object",
          "properties": {
            "numerator": {
              "type": "integer",
              "minimum": 1
            },
            "denominatorPow2": {
              "type": "integer",
              "minimum": 0
            }
          },
          "additionalProperties": false
        }
      },
      "description": "Clip configuration timing as used in MIDI Clip Files.",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 44,
          "section": "Utility and System messages",
          "requirement": "utility-system-structure-deltaclockstampconfig"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/UtilityBodyTests.swift"
        }
      ]
    },
    "ClipEnvelope": {
      "type": "object",
      "properties": {
        "startOfClip": {
          "type": "boolean"
        },
        "endOfClip": {
          "type": "boolean"
        },
        "pickupBars": {
          "type": "number"
        }
      },
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-116-U",
          "version": "1.0",
          "page": 12,
          "section": "MIDI Clip message envelope",
          "requirement": "clip-envelope-clipenvelope"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/ClipEnvelopeTests.swift"
        }
      ]
    },
    "MidiCiEnvelope": {
      "type": "object",
      "required": [
        "scope",
        "subId1",
        "subId2",
        "version",
        "body"
      ],
      "properties": {
        "scope": {
          "type": "string",
          "enum": [
            "nonRealtime",
            "realtime"
          ],
          "description": "0x7E or 0x7F"
        },
        "subId1": {
          "const": 13
        },
        "subId2": {
          "type": "integer",
          "minimum": 0,
          "maximum": 255
        },
        "version": {
          "$ref": "#/$defs/Uint8"
        },
        "body": {
          "oneOf": [
            {
              "$ref": "#/$defs/MidiCiDiscoveryBody"
            },
            {
              "$ref": "#/$defs/MidiCiProfilesBody"
            },
            {
              "$ref": "#/$defs/MidiCiPropertyExchangeBody"
            },
            {
              "$ref": "#/$defs/MidiCiProcessInquiryBody"
            },
            {
              "$ref": "#/$defs/MidiCiAckNakBody"
            }
          ]
        }
      },
      "description": "SysEx(7/8) payload for MIDI-CI transactions.",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-101-UM",
          "version": "1.2",
          "page": 45,
          "section": "MIDI-CI message envelopes",
          "requirement": "midi-ci-envelope-midicienvelope"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/MidiCiEnvelopeTests.swift"
        }
      ]
    },
    "MidiCiDiscoveryBody": {
      "type": "object",
      "properties": {
        "muid": {
          "$ref": "#/$defs/Uint32"
        },
        "manufacturerId": {
          "oneOf": [
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Uint8"
              },
              "minItems": 1,
              "maxItems": 1
            },
            {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Uint8"
              },
              "minItems": 3,
              "maxItems": 3
            }
          ]
        },
        "deviceFamily": {
          "$ref": "#/$defs/Uint16"
        },
        "deviceModel": {
          "$ref": "#/$defs/Uint16"
        },
        "softwareRev": {
          "$ref": "#/$defs/Uint32"
        },
        "categories": {
          "type": "object",
          "properties": {
            "profiles": {
              "type": "boolean"
            },
            "propertyExchange": {
              "type": "boolean"
            },
            "processInquiry": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        },
        "maxSysEx": {
          "$ref": "#/$defs/Uint32"
        }
      },
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-101-UM",
          "version": "1.2",
          "page": 45,
          "section": "MIDI-CI message envelopes",
          "requirement": "midi-ci-envelope-midicidiscoverybody"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/MidiCiEnvelopeTests.swift"
        }
      ]
    },
    "MidiCiAckNakBody": {
      "type": "object",
      "properties": {
        "ack": {
          "type": "boolean"
        },
        "statusCode": {
          "$ref": "#/$defs/Uint8"
        },
        "message": {
          "type": "string"
        }
      },
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-101-UM",
          "version": "1.2",
          "page": 45,
          "section": "MIDI-CI message envelopes",
          "requirement": "midi-ci-envelope-midiciacknakbody"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/MidiCiEnvelopeTests.swift"
        }
      ]
    },
    "MidiCiProfilesBody": {
      "type": "object",
      "properties": {
        "command": {
          "type": "string",
          "enum": [
            "inquiry",
            "reply",
            "addedReport",
            "removedReport",
            "setOn",
            "setOff",
            "enabledReport",
            "disabledReport",
            "detailsInquiry",
            "detailsReply",
            "profileSpecificData"
          ]
        },
        "profileId": {
          "type": "string",
          "description": "As per MA/AMEI allocation"
        },
        "target": {
          "type": "string",
          "enum": [
            "channel",
            "group",
            "functionBlock"
          ]
        },
        "channels": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Uint4"
          }
        },
        "details": {
          "type": "object",
          "description": "Profile Details / Reports (e.g., channel mask bits cmL/cmH, ok flags)",
          "additionalProperties": false
        }
      },
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-102-U",
          "version": "1.1",
          "page": 15,
          "section": "Table 6",
          "requirement": "profiles-structure-midiciprofilesbody"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/MidiCiProfilesBodyTests.swift"
        }
      ]
    },
    "MidiCiPropertyExchangeBody": {
      "type": "object",
      "properties": {
        "command": {
          "type": "string",
          "enum": [
            "capInquiry",
            "capReply",
            "get",
            "getReply",
            "set",
            "setReply",
            "subscribe",
            "subscribeReply",
            "notify",
            "terminate"
          ]
        },
        "subscriptionId": {
          "type": "string",
          "maxLength": 64,
          "description": "Subscription identifier used in PE subscription flows (e.g., sub3221)"
        },
        "requestId": {
          "$ref": "#/$defs/Uint32"
        },
        "encoding": {
          "type": "string",
          "enum": [
            "json",
            "binary",
            "json+zlib",
            "binary+zlib",
            "mcoded7"
          ]
        },
        "header": {
          "type": "object",
          "properties": {
            "resource": {
              "type": "string",
              "maxLength": 36,
              "description": "Targeted resource (ASCII alphanumeric)"
            },
            "resId": {
              "$ref": "#/$defs/Uint32"
            },
            "encoding": {
              "type": "string",
              "enum": [
                "json",
                "binary",
                "json+zlib",
                "binary+zlib",
                "mcoded7"
              ]
            },
            "flowControl": {
              "type": "boolean",
              "description": "Flow Control flag for Inquiry: Get Property Data (Table 13, M2-103-UM v1.2 p.28)"
            },
            "status": {
              "type": "integer",
              "minimum": 100,
              "maximum": 999,
              "description": "Reply status (HTTP-like codes per Table 15, M2-103-UM v1.2 p.29)"
            },
            "message": {
              "type": "string",
              "maxLength": 512,
              "description": "Optional explanatory message in reply"
            },
            "cacheTime": {
              "type": "integer",
              "minimum": 0,
              "description": "Seconds the document may be cached"
            },
            "mediaType": {
              "type": "string",
              "maxLength": 75,
              "description": "MIME type for non-JSON Property Data (Table 16, M2-103-UM v1.2 p.31)"
            }
          },
          "additionalProperties": false
        },
        "data": {
          "description": "JSON or encoded non-JSON; when JSON, schema may be referenced via header.schema",
          "oneOf": [
            {
              "type": "object",
              "additionalProperties": false
            },
            {
              "$ref": "#/$defs/ByteArray"
            }
          ]
        },
        "statusCodes": {
          "type": "array",
          "description": "Property Exchange reply status codes (Table 15) or notify-only codes (Table 16 timeout wait via ACK)",
          "items": {
            "type": "integer",
            "minimum": 100,
            "maximum": 599,
            "enum": [
              200,
              201,
              341,
              342,
              343,
              400,
              403,
              404,
              405,
              406,
              407,
              413,
              415,
              445,
              500
            ]
          }
        },
        "timeoutStatus": {
          "type": "integer",
          "description": "Deprecated Notify timeout status codes (100, 408) for backward compatibility per M2-103-UM v1.2 p.49",
          "enum": [
            100,
            408
          ]
        },
        "flowControlError": {
          "type": "integer",
          "description": "Status to return when flowControl is requested but unsupported (406/407 per M2-103-UM v1.2 p.69\u201371)",
          "enum": [
            406,
            407
          ]
        },
        "deltaClockstampTicksPerQuarterNote": {
          "type": "integer",
          "minimum": 0,
          "maximum": 65535,
          "description": "DCTPQ for Delta Clockstamp timing (0 reserved; Figure 33, M2-104-UM v1.1.2 p.45)"
        },
        "cacheTime": {
          "type": "integer",
          "minimum": 0,
          "description": "Seconds the Property Data may be cached (Section 7.4.3, M2-103-UM v1.2 p.30\u201331)"
        },
        "flowControlAck": {
          "type": "object",
          "description": "MIDI-CI ACK flow control message (Table 94, M2-103-UM v1.2 p.69)",
          "properties": {
            "requestId": {
              "$ref": "#/$defs/Uint8",
              "description": "PE Request Id (Table 94)"
            },
            "chunkNumber": {
              "$ref": "#/$defs/Uint16",
              "description": "Chunk number (LSB first) in flow-control ACK"
            },
            "messageLength": {
              "$ref": "#/$defs/Uint16",
              "description": "Length of the message (0 when no message; reserved otherwise)"
            },
            "status": {
              "type": "integer",
              "const": 17
            }
          },
          "additionalProperties": false
        },
        "flowControlNak": {
          "type": "object",
          "description": "MIDI-CI NAK flow control retransmit request (Table 97, M2-103-UM v1.2 p.72)",
          "properties": {
            "status": {
              "type": "integer",
              "const": 18
            },
            "chunkNumber": {
              "$ref": "#/$defs/Uint16",
              "description": "Chunk number to retransmit (LSB first)"
            }
          },
          "additionalProperties": false
        },
        "subscriptionCommand": {
          "type": "string",
          "enum": [
            "start",
            "partial",
            "full",
            "notify",
            "end"
          ],
          "description": "Subscription command values per M2-103-UM v1.2 subscription flows"
        }
      },
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-103-UM",
          "version": "1.2",
          "page": 28,
          "section": "Tables 13-16",
          "requirement": "property-exchange-structure-midicipropertyexchangebody"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/PropertyExchangeChunkingTests.swift"
        }
      ]
    },
    "MidiCiProcessInquiryBody": {
      "type": "object",
      "properties": {
        "command": {
          "type": "string",
          "enum": [
            "capInquiry",
            "capReply",
            "messageReport",
            "messageReportReply",
            "endReport"
          ]
        },
        "deviceId": {
          "type": "integer",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            126,
            127
          ],
          "description": "Device ID for message report scope: 0x00\u20130x0F channel 1\u201316, 0x7E group, 0x7F function block (Table 43/45, M2-101-UM v1.2 p.61\u201363)"
        },
        "messageDataControl": {
          "type": "integer",
          "enum": [
            0,
            1,
            127
          ],
          "description": "Message Data Control (Table 44, M2-101-UM v1.2 p.62): 0x00 begin/end only, 0x01 non-default/active only, 0x7F full report; 0x02\u20130x7E reserved."
        },
        "systemMessages": {
          "type": "object",
          "description": "Bitmap of requested System Messages (Table 43/45, M2-101-UM v1.2 p.61\u201363)",
          "properties": {
            "mtcQuarterFrame": {
              "type": "boolean"
            },
            "songPosition": {
              "type": "boolean"
            },
            "songSelect": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        },
        "channelControllerMessages": {
          "type": "object",
          "description": "Bitmap of requested Channel Controller Messages (Table 43/45, M2-101-UM v1.2 p.61\u201363)",
          "properties": {
            "pitchBend": {
              "type": "boolean"
            },
            "controlChange": {
              "type": "boolean"
            },
            "registeredController": {
              "type": "boolean"
            },
            "assignableController": {
              "type": "boolean"
            },
            "programChange": {
              "type": "boolean"
            },
            "channelPressure": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        },
        "noteDataMessages": {
          "type": "object",
          "description": "Bitmap of requested Note Data Messages (Table 43/45, M2-101-UM v1.2 p.61\u201363)",
          "properties": {
            "notes": {
              "type": "boolean"
            },
            "polyPressure": {
              "type": "boolean"
            },
            "perNotePitchBend": {
              "type": "boolean"
            },
            "registeredPerNoteController": {
              "type": "boolean"
            },
            "assignablePerNoteController": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        },
        "supportedFeatures": {
          "type": "object",
          "description": "Process Inquiry Supported Features bitmap (Table 42, M2-101-UM v1.2 p.60)",
          "properties": {
            "messageReport": {
              "type": "boolean"
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-101-UM",
          "version": "1.2",
          "page": 59,
          "section": "Tables 40-45",
          "requirement": "process-inquiry-structure-midiciprocessinquirybody"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/MidiCiProcessInquiryBodyTests.swift"
        }
      ]
    },
    "FunctionBlockNameNotification": {
      "type": "object",
      "properties": {
        "functionBlock": {
          "$ref": "#/$defs/Uint7"
        },
        "name": {
          "type": "string",
          "maxLength": 91,
          "description": "UTF-8 name bytes; may span multiple packets (start/continue/end per Figure 23, M2-104-UM v1.1.2 p.42)"
        }
      },
      "required": [
        "functionBlock",
        "name"
      ],
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 37,
          "section": "Figures 18-23 and stream messages",
          "requirement": "ump-stream-structure-functionblocknamenotification"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/StreamMappingTests.swift"
        }
      ]
    },
    "UmpPacket": {
      "oneOf": [
        {
          "$ref": "#/$defs/UmpPacket32"
        },
        {
          "$ref": "#/$defs/UmpPacket64"
        },
        {
          "$ref": "#/$defs/UmpPacket128"
        }
      ],
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP message types and packet sizes",
          "requirement": "ump-packet-structure-umppacket"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/UmpPacketsTests.swift"
        }
      ]
    },
    "UmpPacket32": {
      "type": "object",
      "required": [
        "messageType",
        "body"
      ],
      "properties": {
        "messageType": {
          "enum": [
            0,
            1,
            2,
            3,
            15
          ]
        },
        "group": {
          "$ref": "#/$defs/Group"
        },
        "body": {
          "oneOf": [
            {
              "$ref": "#/$defs/UtilityBody"
            },
            {
              "$ref": "#/$defs/SystemCommonRealtimeBody"
            },
            {
              "$ref": "#/$defs/Midi1ChannelVoiceBody"
            },
            {
              "$ref": "#/$defs/SysEx7Body"
            },
            {
              "$ref": "#/$defs/StreamBody"
            }
          ]
        }
      },
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP message types and packet sizes",
          "requirement": "ump-packet-structure-umppacket32"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/UmpPacketsTests.swift"
        }
      ]
    },
    "UmpPacket64": {
      "type": "object",
      "required": [
        "messageType",
        "group",
        "statusNibble",
        "channel",
        "body"
      ],
      "properties": {
        "messageType": {
          "const": 4
        },
        "group": {
          "$ref": "#/$defs/Group"
        },
        "statusNibble": {
          "$ref": "#/$defs/Midi2StatusNibble"
        },
        "channel": {
          "$ref": "#/$defs/Uint4"
        },
        "body": {
          "$ref": "#/$defs/Midi2ChannelVoiceVariants"
        }
      },
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP message types and packet sizes",
          "requirement": "ump-packet-structure-umppacket64"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/UmpPacketsTests.swift"
        }
      ]
    },
    "UmpPacket128": {
      "type": "object",
      "required": [
        "messageType",
        "body"
      ],
      "properties": {
        "messageType": {
          "enum": [
            5,
            13
          ]
        },
        "group": {
          "$ref": "#/$defs/Group"
        },
        "body": {
          "oneOf": [
            {
              "$ref": "#/$defs/DataMessageBody"
            },
            {
              "$ref": "#/$defs/FlexDataBody"
            }
          ]
        }
      },
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 20,
          "section": "UMP message types and packet sizes",
          "requirement": "ump-packet-structure-umppacket128"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/UmpPacketsTests.swift"
        }
      ]
    },
    "Midi2.NoteOff": {
      "type": "object",
      "required": [
        "noteNumber",
        "velocity16"
      ],
      "properties": {
        "noteNumber": {
          "$ref": "#/$defs/Uint7"
        },
        "velocity16": {
          "$ref": "#/$defs/Uint16"
        },
        "attributeType": {
          "$ref": "#/$defs/NoteAttributeType"
        },
        "attributeData16": {
          "$ref": "#/$defs/Uint16"
        }
      },
      "description": "Status 0x8 (Note Off).",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 56,
          "section": "MIDI 2.0 Channel Voice messages",
          "requirement": "midi2-channel-voice-midi2-noteoff"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi2ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "Midi2.NoteOn": {
      "type": "object",
      "required": [
        "noteNumber",
        "velocity16"
      ],
      "properties": {
        "noteNumber": {
          "$ref": "#/$defs/Uint7"
        },
        "velocity16": {
          "$ref": "#/$defs/Uint16"
        },
        "attributeType": {
          "$ref": "#/$defs/NoteAttributeType"
        },
        "attributeData16": {
          "$ref": "#/$defs/Uint16"
        }
      },
      "description": "Status 0x9 (Note On).",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 56,
          "section": "MIDI 2.0 Channel Voice messages",
          "requirement": "midi2-channel-voice-midi2-noteon"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi2ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "Midi2.PolyPressure": {
      "type": "object",
      "required": [
        "noteNumber",
        "polyPressure32"
      ],
      "properties": {
        "noteNumber": {
          "$ref": "#/$defs/Uint7"
        },
        "polyPressure32": {
          "$ref": "#/$defs/Uint32"
        }
      },
      "description": "Status 0xA (Polyphonic Key Pressure).",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 56,
          "section": "MIDI 2.0 Channel Voice messages",
          "requirement": "midi2-channel-voice-midi2-polypressure"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi2ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "Midi2.ControlChange": {
      "type": "object",
      "required": [
        "control",
        "controlValue32"
      ],
      "properties": {
        "control": {
          "$ref": "#/$defs/Uint7"
        },
        "controlValue32": {
          "$ref": "#/$defs/Uint32"
        }
      },
      "description": "Status 0xB (CC).",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 56,
          "section": "MIDI 2.0 Channel Voice messages",
          "requirement": "midi2-channel-voice-midi2-controlchange"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi2ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "Midi2.ProgramChange": {
      "type": "object",
      "required": [
        "program"
      ],
      "properties": {
        "program": {
          "$ref": "#/$defs/Uint7"
        },
        "bankMsb": {
          "$ref": "#/$defs/Uint7"
        },
        "bankLsb": {
          "$ref": "#/$defs/Uint7"
        },
        "bankValid": {
          "type": "boolean"
        }
      },
      "description": "Status 0xC (Program Change).",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 56,
          "section": "MIDI 2.0 Channel Voice messages",
          "requirement": "midi2-channel-voice-midi2-programchange"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi2ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "Midi2.ChannelPressure": {
      "type": "object",
      "required": [
        "channelPressure32"
      ],
      "properties": {
        "channelPressure32": {
          "$ref": "#/$defs/Uint32"
        }
      },
      "description": "Status 0xD (Channel Pressure).",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 56,
          "section": "MIDI 2.0 Channel Voice messages",
          "requirement": "midi2-channel-voice-midi2-channelpressure"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi2ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "Midi2.PitchBend": {
      "type": "object",
      "required": [
        "pitchBend32"
      ],
      "properties": {
        "pitchBend32": {
          "$ref": "#/$defs/Uint32"
        }
      },
      "description": "Status 0xE (Pitch Bend).",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 56,
          "section": "MIDI 2.0 Channel Voice messages",
          "requirement": "midi2-channel-voice-midi2-pitchbend"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi2ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "Midi2.RPN": {
      "type": "object",
      "required": [
        "rpnIndexMsb",
        "rpnIndexLsb",
        "rpnData32"
      ],
      "properties": {
        "rpnIndexMsb": {
          "$ref": "#/$defs/Uint7"
        },
        "rpnIndexLsb": {
          "$ref": "#/$defs/Uint7"
        },
        "rpnData32": {
          "$ref": "#/$defs/Uint32"
        }
      },
      "description": "Registered Controller (absolute).",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 56,
          "section": "MIDI 2.0 Channel Voice messages",
          "requirement": "midi2-channel-voice-midi2-rpn"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi2ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "Midi2.NRPN": {
      "type": "object",
      "required": [
        "nrpnIndexMsb",
        "nrpnIndexLsb",
        "nrpnData32"
      ],
      "properties": {
        "nrpnIndexMsb": {
          "$ref": "#/$defs/Uint7"
        },
        "nrpnIndexLsb": {
          "$ref": "#/$defs/Uint7"
        },
        "nrpnData32": {
          "$ref": "#/$defs/Uint32"
        }
      },
      "description": "Assignable Controller (absolute).",
      "additionalProperties": false,
      "x-midi-spec": [
        {
          "document": "M2-104-UM",
          "version": "1.1.2",
          "page": 56,
          "section": "MIDI 2.0 Channel Voice messages",
          "requirement": "midi2-channel-voice-midi2-nrpn"
        }
      ],
      "x-verification": [
        {
          "kind": "swift-test-file",
          "id": "Tests/MIDI2Tests/Midi2ChannelVoiceBodyTests.swift"
        }
      ]
    },
    "Midi2.RPNRelative": {
      "type": "object",