{
  "_sources": [
    {
      "type": "vendor-doc",
      "url": "https://www.nordkeyboards.com/sites/default/files/files/downloads/manuals/nord-modular-G2/Nord%20Modular%20G2%20English%20User%20Manual%20v1.4%20Edition%201.4x.pdf",
      "notes": "Clavia 'Nord Modular G2 English User Manual v1.4 Edition 1.4x' (no longer on the maker's site; copy archived on web.archive.org, 2014-10-20), chapter 12 MIDI implementation: global channel, preassigned MIDI CC#, G2 MIDI System Exclusive Specification and the MIDI Implementation Chart. Every route comes from it.",
      "firmware": "1.4",
      "imported_at": "2026-10-26"
    }
  ],
  "_limitations": "Source: Nord Modular G2 manual v1.4x, chapter 12. Apart from the preassigned controllers above, MIDI CC# 0-119 are assigned to module parameters by the user in each patch, so no patch parameter can be listed. Each slot (A-D) plays and takes Program Change (patch, banks via CC#32) on its own channel; on the Global MIDI channel (Off at the factory) notes play like the keyboard and Program Change loads a performance. Patch and performance dumps (20H/28H, split in blocks with a 7-bit sum) arrive as /sysex/raw; sending them back is not exposed (they are whole files). Untested on hardware.",
  "_coverage": {
    "entries_total": 22,
    "cc_entries": 15,
    "rpn_entries": 0,
    "nrpn_entries": 0,
    "sysex_commands": 5,
    "realtime_commands": 1,
    "channel_and_common_commands": 1,
    "note_triggers": 0,
    "replies": 0
  },
  "device": {
    "name": "Nord Modular G2",
    "vendor": "Clavia",
    "revision": "Nord Modular G2 User Manual v1.4x (chart: OS V1.1x, 2004-02-18)",
    "osc_prefix": "/nord_modular_g2",
    "manufacturer_id": [
      51
    ],
    "device_id": [
      10
    ]
  },
  "sysex": {
    "header": [],
    "footer": [],
    "_notes": "Empty on purpose: each command frame carries its complete message."
  },
  "midi_out": {
    "default_channel": 0,
    "note_offset": 0
  },
  "midi_in": {
    "note_on": "/note/on {note} {velocity} {channel}",
    "note_off": "/note/off {note} {velocity} {channel}",
    "cc": "/cc/{num} {value} {channel}",
    "program_change": "/program_change {program} {channel}"
  },
  "commands": [
    {
      "osc": "/transport/clock",
      "section": "Sync",
      "args": [],
      "_notes": "MIDI Clock (F8H): drives the Master Clock when it is set to external sync.",
      "frame": [
        248
      ]
    },
    {
      "osc": "/song/position",
      "section": "Sync",
      "args": [
        {
          "name": "beats",
          "type": "u14",
          "range": [
            0,
            16383
          ]
        }
      ],
      "_notes": "Song Position Pointer (F2H), in MIDI beats (sixteenth notes). Recognized when the Master Clock uses external sync (chart).",
      "frame": [
        242,
        "{beats:u14_lsb}",
        "{beats:u14_msb}"
      ]
    },
    {
      "osc": "/request/patch_by_slot",
      "section": "SysEx",
      "args": [
        {
          "name": "slot",
          "type": "enum",
          "values": {
            "A": 0,
            "B": 1,
            "C": 2,
            "D": 3,
            "active": 4
          },
          "range": [
            0,
            4
          ]
        }
      ],
      "_notes": "Patch Request by slot (message 30H): the G2 sends that slot's patch as a SysEx patch dump. Sent to device ID 7FH (all G2s respond); a G2 set to one MIDI SysEx ID (1-16) also answers its own ID 00-0F.",
      "frame": [
        240,
        51,
        127,
        10,
        48,
        "{slot}",
        0,
        247
      ]
    },
    {
      "osc": "/request/patch_by_index",
      "section": "SysEx",
      "args": [
        {
          "name": "bank",
          "type": "u7",
          "range": [
            0,
            31
          ]
        },
        {
          "name": "patch",
          "type": "u7",
          "range": [
            0,
            127
          ]
        }
      ],
      "_notes": "Patch Request by file index (31H): bank 0-31 = 1-32, patch 0-127 = 1-128. Sent to device ID 7FH (all G2s respond); a G2 set to one MIDI SysEx ID (1-16) also answers its own ID 00-0F.",
      "frame": [
        240,
        51,
        127,
        10,
        49,
        "{bank}",
        "{patch}",
        247
      ]
    },
    {
      "osc": "/request/performance",
      "section": "SysEx",
      "args": [],
      "_notes": "Request for the loaded performance (38H): answered with a SysEx performance dump. Sent to device ID 7FH (all G2s respond); a G2 set to one MIDI SysEx ID (1-16) also answers its own ID 00-0F.",
      "frame": [
        240,
        51,
        127,
        10,
        56,
        0,
        0,
        247
      ]
    },
    {
      "osc": "/request/performance_by_index",
      "section": "SysEx",
      "args": [
        {
          "name": "bank",
          "type": "u7",
          "range": [
            0,
            7
          ]
        },
        {
          "name": "performance",
          "type": "u7",
          "range": [
            0,
            127
          ]
        }
      ],
      "_notes": "Performance Request by file index (39H): bank 0-7 = 1-8, performance 0-127 = 1-128. Sent to device ID 7FH (all G2s respond); a G2 set to one MIDI SysEx ID (1-16) also answers its own ID 00-0F.",
      "frame": [
        240,
        51,
        127,
        10,
        57,
        "{bank}",
        "{performance}",
        247
      ]
    },
    {
      "osc": "/request/all_controllers",
      "section": "SysEx",
      "args": [
        {
          "name": "slot",
          "type": "enum",
          "values": {
            "A": 0,
            "B": 1,
            "C": 2,
            "D": 3,
            "active": 4
          },
          "range": [
            0,
            4
          ]
        }
      ],
      "_notes": "All Controllers Request (40H): the G2 sends every current MIDI CC# value of that slot. Sent to device ID 7FH (all G2s respond); a G2 set to one MIDI SysEx ID (1-16) also answers its own ID 00-0F.",
      "frame": [
        240,
        51,
        127,
        10,
        64,
        "{slot}",
        247
      ]
    }
  ],
  "cc_params": {
    "channel": 0,
    "_source": "G2 manual 12, MIDI Controllers: the preassigned CC# (all other CC# 0-119 are assigned per patch by the user).",
    "entries": [
      {
        "osc": "/bank/select_msb",
        "cc": 0,
        "range": [
          0,
          127
        ],
        "expects": "discrete",
        "section": "Preassigned controllers",
        "_usage": "Bank Select MSB."
      },
      {
        "osc": "/modwheel",
        "cc": 1,
        "range": [
          0,
          127
        ],
        "section": "Preassigned controllers",
        "_usage": "Modwheel."
      },
      {
        "osc": "/patch_volume",
        "cc": 7,
        "range": [
          0,
          127
        ],
        "section": "Preassigned controllers",
        "_usage": "Patch Volume (hardwired to the Patch Gain knobs)."
      },
      {
        "osc": "/expression",
        "cc": 11,
        "range": [
          0,
          127
        ],
        "section": "Preassigned controllers",
        "_usage": "Expression pedal."
      },
      {
        "osc": "/octave_shift",
        "cc": 17,
        "range": [
          0,
          127
        ],
        "expects": "discrete",
        "section": "Preassigned controllers",
        "_usage": "Octave Shift."
      },
      {
        "osc": "/keyboard_hold",
        "cc": 18,
        "range": [
          0,
          127
        ],
        "expects": "switch",
        "section": "Preassigned controllers",
        "_usage": "Keyboard Hold."
      },
      {
        "osc": "/performance_patch_mode",
        "cc": 19,
        "range": [
          0,
          127
        ],
        "expects": "switch",
        "section": "Preassigned controllers",
        "_usage": "Performance/Patch Mode Select: preassigned on the Global MIDI channel only."
      },
      {
        "osc": "/bank/select_lsb",
        "cc": 32,
        "range": [
          0,
          31
        ],
        "expects": "discrete",
        "section": "Preassigned controllers",
        "_usage": "Bank Select LSB: bank 0-31 (chart)."
      },
      {
        "osc": "/sustain",
        "cc": 64,
        "range": [
          0,
          127
        ],
        "expects": "switch",
        "section": "Preassigned controllers",
        "_usage": "Sustain pedal."
      },
      {
        "osc": "/variation",
        "cc": 70,
        "range": [
          0,
          127
        ],
        "expects": "discrete",
        "section": "Preassigned controllers",
        "_usage": "Sound Variation."
      },
      {
        "osc": "/master_clock_run",
        "cc": 80,
        "range": [
          0,
          127
        ],
        "expects": "switch",
        "section": "Preassigned controllers",
        "_usage": "G2 Master Clock / MIDI clock Stop/Run (0 = stop, 127 = run), emulating the front-panel Run/Stop button: preassigned on the Global MIDI channel only; MIDI START/STOP are then relayed to MIDI OUT."
      },
      {
        "osc": "/global_modwheel1",
        "cc": 96,
        "range": [
          0,
          127
        ],
        "section": "Preassigned controllers",
        "_usage": "G2X Global Modwheel 1 (Morph Group 8)."
      },
      {
        "osc": "/global_modwheel2",
        "cc": 97,
        "range": [
          0,
          127
        ],
        "section": "Preassigned controllers",
        "_usage": "G2X Global Modwheel 2 (Morph Group 5)."
      },
      {
        "osc": "/reset_all_controllers",
        "cc": 121,
        "range": [
          0,
          0
        ],
        "expects": "trigger",
        "section": "Channel mode",
        "_usage": "Reset All Controllers."
      },
      {
        "osc": "/all_notes_off",
        "cc": 123,
        "range": [
          0,
          0
        ],
        "expects": "trigger",
        "section": "Channel mode",
        "_usage": "All Notes Off."
      }
    ]
  }
}
