{
  "_sources": [
    {
      "type": "vendor-doc",
      "url": "https://static.roland.com/assets/media/pdf/TR-909_OM.pdf",
      "notes": "Roland TR-909 Rhythm Composer Owner's Manual (scanned): 'MIDI' (p. 38: channels, what is communicated), 'External Instrument Mode' (p. 37) and the 'TR-909 MIDI Implementation Chart'. Every route comes from these pages.",
      "firmware": "unknown",
      "imported_at": "2026-10-26"
    }
  ],
  "_limitations": "Source: the scanned TR-909 Owner's Manual; its MIDI section points to a separate 'What's MIDI' leaflet that is not part of it. The chart says notes 35-51 are recognized and 'assign to each rhythm voice', but this manual does not say which note plays which voice, so no per-voice trigger is listed; play notes 35-51 with /note/on and listen. Velocity is recognized; no Control Change, Program Change, pitch bend or aftertouch. Recognized channel: the chart prints default 10, the text says the receive channel is 0 (omni) at power-on; set it with SHUFFLE/FLAM + a main key. System Exclusive is listed 'for rhythm seq' without a format, so it is not mapped. The TR-909 transmits notes 36-51 (velocity 64-96) on channel 11 in External Instrument mode. Untested on hardware.",
  "_coverage": {
    "entries_total": 6,
    "cc_entries": 0,
    "rpn_entries": 0,
    "nrpn_entries": 0,
    "sysex_commands": 0,
    "realtime_commands": 4,
    "channel_and_common_commands": 2,
    "note_triggers": 0,
    "replies": 0
  },
  "device": {
    "name": "TR-909",
    "vendor": "Roland",
    "revision": "Owner's Manual MIDI Implementation Chart (1984); no firmware version",
    "osc_prefix": "/tr_909",
    "manufacturer_id": [
      65
    ],
    "device_id": []
  },
  "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": "Timing Clock (F8H): recognized in the MIDI tempo mode.",
      "frame": [
        248
      ]
    },
    {
      "osc": "/transport/start",
      "section": "Sync",
      "args": [],
      "_notes": "System Realtime Start (FAH) (chart: Commands recognized).",
      "frame": [
        250
      ]
    },
    {
      "osc": "/transport/continue",
      "section": "Sync",
      "args": [],
      "_notes": "System Realtime Continue (FBH) (chart: Commands recognized).",
      "frame": [
        251
      ]
    },
    {
      "osc": "/transport/stop",
      "section": "Sync",
      "args": [],
      "_notes": "System Realtime Stop (FCH) (chart: Commands recognized).",
      "frame": [
        252
      ]
    },
    {
      "osc": "/song/position",
      "section": "Sync",
      "args": [
        {
          "name": "beats",
          "type": "u14",
          "range": [
            0,
            16383
          ]
        }
      ],
      "_notes": "Song Position Pointer (F2H), in MIDI beats (sixteenth notes). Recognized (chart: Song Pos).",
      "frame": [
        242,
        "{beats:u14_lsb}",
        "{beats:u14_msb}"
      ]
    },
    {
      "osc": "/song/select",
      "section": "Sync",
      "args": [
        {
          "name": "song",
          "type": "u7",
          "range": [
            0,
            7
          ]
        }
      ],
      "_notes": "Song Select (F3H). Song Select 0-7 (chart: Song Sel (0-7)).",
      "frame": [
        243,
        "{song}"
      ]
    }
  ]
}
