{
  "id": "midi_in_chop",
  "name": "MIDI In CHOP",
  "displayName": "MIDI In CHOP",
  "category": "CHOP",
  "subcategory": "MIDI",
  "version": "",
  "lastUpdated": "2025-08-07T07:50:04.055Z",
  "sourceFile": "C:\\Program Files\\Derivative\\TouchDesigner\\Samples\\Learn\\OfflineHelp\\https.docs.derivative.ca\\MIDI_In_CHOP.htm",
  "url": "",
  "description": "The MIDI In CHOP reads Note events, Controller events, Program Change events, System Exclusive messages and Timing events from both MIDI devices and files. See also MIDI In Map CHOP.",
  "summary": "The MIDI In CHOP reads Note events, Controller events, Program Change events, System Exclusive messages and Timing events from both MIDI devices and files. See also MIDI In Map CHOP.",
  "details": "",
  "usage": "",
  "tips": [],
  "warnings": [],
  "parameters": [
    {
      "id": null,
      "name": "Active",
      "label": "Active",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "From Derivative\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tJump to navigation\n\t\tJump to search\n\t\t\nThe MIDI In  reads Note events, Controller events, Program Change events, System Exclusive messages and Timing events from both MIDI devices and files. See also MIDI In Map CHOP.\t\t\nThe MIDI In  receives MIDI events from MIDI devices connected to the serial port, reads MIDI events internal to the workstation (i.e. the built-in software synth), and interprets musical scores in MIDI files. Supported MIDI events are:\t\t\t\n\nNote On, Note Off\nPolyphonic Aftertouch\nChannel Pressure\nProgram Change\nControl Change (MIDI controller devices)\nPitch Wheel\nTimer Events including beat pulses\nBar Messages\nStart, Stop, Continue\nSong Position Pointer\nSystem Exclusive MessagesMIDI events arriving on separate MIDI channels may be recorded on separate  channels. Also, any number of MIDI CHOPs can read from the same or different sources. TouchDesigner can be configured such that MIDI Start, Stop, or Continue events can control the Timeline and Beat Dialog.\t\t\t\nThe 'Simplified Output' option creates a channel for every type of MIDI event received, so number of channels expands while the devices is being used. No need to specify name, channel and index patterns.\t\t\t\nNote: The values of the MIDI inputs are saved into the TouchDesigner  file, and are restored when the file is reloaded. The physical controllers may be in a different position when the  is restarted, causing the values to jump when the controllers are moved. This is unavoidable. \t\t\t\nSee also the MIDI In DAT, MIDI Event DAT, MIDI In Map CHOP, MIDI Out CHOP.\nmidiinCHOP_Class\n\nContents\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n  active - Enable or disable the MIDI In .\n\n\n\n  source -  - Get MIDI input from a device or a file.\n\n device - The MIDI events come live from a device. file - The MIDI events come from an existing file.\n\n  device -  to the MIDI device Table DAT\n\n\n\n  id - Specify the id of which device to use.\n\n\n\n  file - If MIDI file is selected as the MIDI source use this field to specify the name of the MIDI file to read. The file can be read in from disk or from the web. Use http:// when specifying a URL.\n\n\n\n  entire - If enabled, the entire MIDI file is read. Otherwise, the Start and End parameters on the Channel page determine the segment of the file to read.\n\n\n\n  resetchannels - Deletes all channels when set to On, new channels will not be added until Reset Channels is turned Off.\n\n\n\t\t\n  resetchannelspulse - Instantly deletes all channels.\n\n\n\n  resetvalues - Resets all channel values to 0 when On, channel values will not be updated until Reset Values is turned Off.\n\n\n\t\t\n  resetchannelspulse - Instantly resets all channels to 0.\n\n\n\t\n  simplified - When this is on channels are automatically created when MIDI signal is detected from the selected MIDI device.\n\n\n\n  preservepulses - When on, quick value transitions (pulses) are spaced out over consecutive output samples. Use this option when pulse frequencies approach or exceed the timeline rate, otherwise they risk overlapping each other and being lost.\n\n\n\n  onebased - Make the index 1 based instead of the default 0 based.\n\n\n\n  channel - The  may read from any number of MIDI channels, numbered 1-16. Ranges and multiple entries are supported (i.e. \"1 4 6\", \"1-7 12\", \"1-5:2\").\t\nIf Channel Prefix is left blank, then the input streams from multiple MIDI channels will be combined into one set of  channels (i.e., a \"note 64 on\" event on channel 12 followed by a \"note 64 off\" event on channel 8 appears in the note 64  channel as a single note).\n\n\n  prefix - When recording from multiple MIDI channels, putting a string like \"ch\" in this parameter causes the MIDI channel to be split into separate  channels per MIDI channel. Otherwise the MIDI channels are all merged into one set of  channels.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  recordtype -  - Determine what to record.\n\n single - This only outputs the current value of notes, controllers, etc. It does not retain prior values. It creates a  at frame 1 always, so the  causes cooking only when MIDI events come in. current - Same as \"Single \", but the  frame is always at the current frame, so the  changes every frame, causing other CHOPs to recook every frame. ind - The  frame is always at the current Time Slice. timeline - The entire length of the timeline is recorded.\n\n  record - This parameter is used as a button to start and stop recording into the  channels.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  notename - Put an \"n\" in here to generate channels for note events. It is the base name of the  channel used to record notes. If blank, notes are ignored. If the Note Output parameter is set to Separate Channels, then  channels will be created for each note in the Note , of the form: notename\n\n\n\n  notescope - The scope of notes to record. Multiple ranges and notes can be recorded (i.e., \"50-60\", \"64 65 66 70-80\").\n\n\n\n  notemeth -  - Describes how multiple notes are handled. (As one channel, or individual).\n\n mult - One  channel per MIDI channel is used for all notes. The value in the note channel is the number of the note currently playing (in the case of multiple notes playing, the most recent note is selected). sep - Each note number gets its own  channel.\n\n  velocity -  - Describes how multiple velocity events are recorded. (Separate channels or combined in one channel as separate samples).\n\n veloff - Velocity is not recorded. velencode - The velocity is recorded as the amplitude of the note. Only valid when Note Output is set to Separate Channels. velsep - Velocity is recorded in separate  channels. Each note channel will have a corresponding velocity channel.\n\n  velname - When Velocity is set to Separate Channels, this parameter is the base name of the Velocity  channel (try \"v\"). If blank, no velocity channels will be recorded.\n\n\n\n  aftername - The base name of the polyphonic Aftertouch  channels. One aftertouch channel is created for each note in the Note . If blank, no aftertouch channels will be created.\n\n\n\n  pressname - The name of the Channel Pressure channel. If multiple channels are being recorded, all channel pressure changes of interest will be recording on this  channel. If blank, this channel will not be created.\n\n\n\n  notenorm -  - Note values can be normalized for convenience:\n\n off - When Normalize is Off, 7 bit controllers will return values in the range 0-127 and 14 bit controllers will return values in the range 0-16383. 0to1 - These values are normalized to lie in the range 0 to 1.\n\n  pitchname - The name of the Pitch Wheel  channel. Pitch wheel values range from -1 to +1. If blank, this channel will not be created. Put \"p\" in here to generate a channel.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  controlname - The base name of the Control Change  channels. The channel names are appended with the controller index (0-127). If blank, control changes will not be recorded. It typically contains \"c\".\n\n\n\n  controltype -  - There are 128 different controllers available. By choosing By Index Only, you can specify any number of controllers in the Control Index parameter. Otherwise, you can select a controller from the list from this menu. Some controllers have multiple instances, such as Sound Controllers 1-10. Selecting a controller with multiple instances allows you to use the Control Index parameter to select which instances you want. Any invalid control indices will be ignored.\n\n index - Specify the controller by its index, as opposed to specifying a specific type below. n0 - n1 - n2 - n3 - n4 - n5 - n6 - n7 - n8 - n9 - n10 - n11 - n12 - n13 - n14 - n15 - n16 - n17 - n18 - n19 - n20 - n21 - n22 - n23 -\n\n  controlind - Used to select controllers by number, or multiple controllers by ranges. When in By Index Only Controller Type mode, you can select up to the full 128 controllers or sub-ranges thereof (i.e. \"1-10\", \"2 34 70\", \"1-32 70-80:2\").\n\n\n\n  format -  - Some controllers can be paired together to form 14 bit controllers, rather than the normal 7 bit controllers (controller indices 0-31, 98 and 100). Selecting 14 bit Controllers interprets a pair as one 14 bit controller. Otherwise, they are interpreted as separate 7 bit Controllers.\n\n 7bit - Controllers are assumed to be regular 7 bit value messages. 14bit - Controllers are received as two 7 bit value messages.\n\n  norm -  - Controller values can be normalized for convenience:\n\n off - When Normalize is Off, 7 bit controllers will return values in the range 0-127 and 14 bit controllers will return values in the range 0-16383. 0to1 - These values are normalized to lie in the range 0 to 1. -1to1 - These values are normalized to lie in the range -1 to +1. onoff - Several of the controllers are simply on/off states. When Convert to On/Off is enabled, values greater than or equal to 64 will be interpreted as \"1\" and all values less than 64 will be interpreted as \"0\".\n\n  unwrap - When on, values do not jump between min and max, but are modified to be continuous ramps. Use with knob controllers for examples.\n\n\n\n  progname - The name of the Program Change  channel. All program change messages will be recorded onto this channel. If blank, this channel will not be created.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  pulsename - Record timer pulse messages.\n\n\n\n  rampname - Record timer ramp messages.\n\n\n\n  timerperiod - Record timer period messages.\n\n\n\n  timerstart - Record timer start messages.\n\n\n\n  ticks - Specify the expected ticks per beat. This will influence the timer and bar output values.\n\n\n\n  barname - Output the current bar position.\n\n\n\n  barperiod - Output the current bar period events.\n\n\n\n  barstart - Output when a bar starts.\n\n\n\n  barmsg - Capture bar messages. Place a V in the message to specify which value the channel should have.\n\n\n\n  songpos - Capture song position messages.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  sysex - Sequence of system exclusive message handlers\n\n\n\n  sysex0name - Name of a specific exclusive message to be captured.\n\n\n\n  sysex0msg - Contents of the exclusive message. Place a V in the message to specify which value the channel should have.\n\n\n\n\n\n\nThis is similar to other generators' Channel page. However, there are a few points to consider on how they affect the Midi In .\n\n  start - Defines where recording begins. In \"Tie to Time Line\" mode, any events received before the start time will be ignored. In \"Time Line Independent\" mode, recording will start at this point and continue on (not looping back). If reading from a MIDI File, Start/End will determine the start of the segment to read. \nStart and end of the interval, expressed in Units (seconds, frames or samples). The parameters are expressed in the Units found on the Common page. To set the  to be 100 samples long, Set Units to Samples, Single  Off and Start / End to 0 and 99.\n\n\n\n  startunit -  - Select the units to use for this parameter, Samples, Frames, or Seconds.\n\n samples - Use samples. frames - Use frames. seconds - Use seconds.\n\n  end - Defines the end of the segment to read for MIDI Files.\n\n\n\n  endunit -  - Select the units to use for this parameter, Samples, Frames, or Seconds.\n\n samples - Use samples. frames - Use frames. seconds - Use seconds.\n\n  rate - Defines the sample rate of this , in samples per second. If the sample rate is too low, a rapidly changing input may be misrepresented.\t\nNote: If the sample rate is too low, you may miss MIDI events. A note event may set a sample value to 1, and then the next note event less than 1/30 second later can set it to 0 on the same sample in the  channel. So the event will be missed. Make the sample rate higher, like 600, to catch these events, or make sure that your on-off events coming in are a minimum time separation, as can be achieved through Opcode's MAX.\n\n\n\n  left -  - The left extend conditions (before range).\n\n hold - Hold the current value of the channel. slope - Continue the slope before the start of the channel. cycle - Cycle the channel repeatedly. mirror - Cycle the channel repeatedly, mirroring every other cycle. default - Use the constant value specified in the Default Value parameter.\n\n  right -  - The right extend conditions (after range).\n\n hold - Hold the current value of the channel. slope - Continue the slope after the end of the channel. cycle - Cycle the channel repeatedly. mirror - Cycle the channel repeatedly, mirroring every other cycle. default - Use the constant value specified in the Default Value parameter.\n\n  defval - The value used for the Default Value extend condition.\n\n\n\n\n\n  timeslice - Turning this on forces the channels to be \"Time Sliced\".  A  is the time between the last cook frame and the current cook frame.\n\n\n\n  scope - To determine which channels get affected, some CHOPs use a  string on the Common page.\n\n\n\n  srselect -  - Handle cases where multiple input CHOPs' sample rates are different. When Resampling occurs, the curves are interpolated according to the Interpolation Method Option, or \"Linear\" if the Interpolate Options are not available.\n\n first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.\n\n  exportmethod -  - This will determine how to connect the  channel to the parameter. Refer to the Export article for more information.\n\n datindex - Uses the docked  table and references the channel via the index of the channel in the . datname - Uses the docked  table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.\n\n  autoexportroot - This path points to the root node where all of the paths that exporting by Channel Name is : are relative to.\n\n\n\n  exporttable - The  used to hold the export information when using the  Table  Methods (See above).\n\n\n\n\n\nExtra Information for the MIDI In  can be accessed via an Info CHOP.\n\n\n\n - Start of the  interval in samples. - Number of samples in the . - The samplerate of the channels in frames per second. - Number of channels in the . - 1 if  is  enabled, 0 otherwise. - A count of how often the export connections have been updated.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\nwikieditorwikieditorwikieditor2021.100002020.236802020.200002018.28070before 2018.28070\nCHOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nTOuch Environment file, the file type used by TouchDesigner to save your entire project.\n\n\n\nThe location of an operator within the TouchDesigner environment, for example, /geo1/circle1, a node called circle1 in a component called geo1. The path / is called Root. This path is displayed at the top of every Pane, showing which Component's network you are currently in. To refer instead to a filesystem folder, directory, disk file or http: address, see Folder.\n\n\n\nTo \"pulse\" a parameter is to send it a signal from (1) an exported CHOP channel or (2) a python command or (3) a mouse click that causes a new action to occur immediately. A pulse via python is via the .pulse() function on a pulse-type parameter, such as Reset parameter in a Speed CHOP. A pulse from a CHOP is typically a 0 to 1 to 0 signal in an exported channel.\n\n\n\nThe term \"Frame\" is a measurement of time used (1) in the Timeline, (2) as a time-unit in CHOPs, and (3) as a time unit in movie files that are read into TOPs and written out from TOPs. The frame rate is the frames per second (FPS).\n\n\n\nA Time Slice is the time from the last cook frame to the current cook frame. In CHOPs it is the set of short channels that contain the CHOP channels' samples between the last and the current cook frame.\n\n\n\nA parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator. TOPs have Channel Mask, a similar feature.\n\n\n\nA CHOP outputs one or more channels, where a channel is simply a sequence of numbers (Samples), representing motion, audio, etc. Channels are passed between CHOPs in TouchDesigner networks. Channels can be Exported to Parameters.\n\n\n\nA text string that contains data (string, float, list, boolean, etc.) and operators (+ * < etc) that are evaluated by the node's language (python or Tscript) and returns a string, float list or boolean, etc. Expressions are used in parameters, DATs and in scripts.\n\n\n\nEvery operator in TouchDesigner has a set of control Parameters that can be integer or floating point numbers, menus, binary toggles, text strings or operator paths, which determine the output of the operator.\n\n\n\nsamples-per-second of a CHOP. Each CHOP in your network has a sample rate. In contrast, the overall timeline has a Frame Rate, which is the number of frames to cook and display per second, generally your monitor display frequency, default 60.\n\n\n\nExporting is the connection of CHOP channels to parameters of operators. The output of each exporting CHOP is one or more channels, active only while the CHOP Viewer is on. The current value of a channel can be exported to a parameter of any operator, overriding that parameter's value. See Parameter.\n\n\n\nAn Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a python Script or GLSL Shader, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.\n\n\n\nTouchDesigner is a hierarchy of components. \"root\" is the top-most network in the hierarchy. The Network Path or Path for root is simply /. A typical path is /project1/moviein1.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=MIDI_In_CHOP&oldid=32288\"\n\t\tCategory: CHOPs",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.044Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Active",
      "label": "Active",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "From Derivative\n\t\t\n\t\t\n\t\t\n\t\t\n\t\tJump to navigation\n\t\tJump to search\n\t\t\nThe MIDI In  reads Note events, Controller events, Program Change events, System Exclusive messages and Timing events from both MIDI devices and files. See also MIDI In Map CHOP.\t\t\nThe MIDI In  receives MIDI events from MIDI devices connected to the serial port, reads MIDI events internal to the workstation (i.e. the built-in software synth), and interprets musical scores in MIDI files. Supported MIDI events are:\t\t\t\n\nNote On, Note Off\nPolyphonic Aftertouch\nChannel Pressure\nProgram Change\nControl Change (MIDI controller devices)\nPitch Wheel\nTimer Events including beat pulses\nBar Messages\nStart, Stop, Continue\nSong Position Pointer\nSystem Exclusive MessagesMIDI events arriving on separate MIDI channels may be recorded on separate  channels. Also, any number of MIDI CHOPs can read from the same or different sources. TouchDesigner can be configured such that MIDI Start, Stop, or Continue events can control the Timeline and Beat Dialog.\t\t\t\nThe 'Simplified Output' option creates a channel for every type of MIDI event received, so number of channels expands while the devices is being used. No need to specify name, channel and index patterns.\t\t\t\nNote: The values of the MIDI inputs are saved into the TouchDesigner  file, and are restored when the file is reloaded. The physical controllers may be in a different position when the  is restarted, causing the values to jump when the controllers are moved. This is unavoidable. \t\t\t\nSee also the MIDI In DAT, MIDI Event DAT, MIDI In Map CHOP, MIDI Out CHOP.\nmidiinCHOP_Class\n\nContents\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n  active - Enable or disable the MIDI In .\n\n\n\n  source -  - Get MIDI input from a device or a file.\n\n device - The MIDI events come live from a device. file - The MIDI events come from an existing file.\n\n  device -  to the MIDI device Table DAT\n\n\n\n  id - Specify the id of which device to use.\n\n\n\n  file - If MIDI file is selected as the MIDI source use this field to specify the name of the MIDI file to read. The file can be read in from disk or from the web. Use http:// when specifying a URL.\n\n\n\n  entire - If enabled, the entire MIDI file is read. Otherwise, the Start and End parameters on the Channel page determine the segment of the file to read.\n\n\n\n  resetchannels - Deletes all channels when set to On, new channels will not be added until Reset Channels is turned Off.\n\n\n\t\t\n  resetchannelspulse - Instantly deletes all channels.\n\n\n\n  resetvalues - Resets all channel values to 0 when On, channel values will not be updated until Reset Values is turned Off.\n\n\n\t\t\n  resetchannelspulse - Instantly resets all channels to 0.\n\n\n\t\n  simplified - When this is on channels are automatically created when MIDI signal is detected from the selected MIDI device.\n\n\n\n  preservepulses - When on, quick value transitions (pulses) are spaced out over consecutive output samples. Use this option when pulse frequencies approach or exceed the timeline rate, otherwise they risk overlapping each other and being lost.\n\n\n\n  onebased - Make the index 1 based instead of the default 0 based.\n\n\n\n  channel - The  may read from any number of MIDI channels, numbered 1-16. Ranges and multiple entries are supported (i.e. \"1 4 6\", \"1-7 12\", \"1-5:2\").\t\nIf Channel Prefix is left blank, then the input streams from multiple MIDI channels will be combined into one set of  channels (i.e., a \"note 64 on\" event on channel 12 followed by a \"note 64 off\" event on channel 8 appears in the note 64  channel as a single note).\n\n\n  prefix - When recording from multiple MIDI channels, putting a string like \"ch\" in this parameter causes the MIDI channel to be split into separate  channels per MIDI channel. Otherwise the MIDI channels are all merged into one set of  channels.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  recordtype -  - Determine what to record.\n\n single - This only outputs the current value of notes, controllers, etc. It does not retain prior values. It creates a  at frame 1 always, so the  causes cooking only when MIDI events come in. current - Same as \"Single \", but the  frame is always at the current frame, so the  changes every frame, causing other CHOPs to recook every frame. ind - The  frame is always at the current Time Slice. timeline - The entire length of the timeline is recorded.\n\n  record - This parameter is used as a button to start and stop recording into the  channels.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  notename - Put an \"n\" in here to generate channels for note events. It is the base name of the  channel used to record notes. If blank, notes are ignored. If the Note Output parameter is set to Separate Channels, then  channels will be created for each note in the Note , of the form: notename\n\n\n\n  notescope - The scope of notes to record. Multiple ranges and notes can be recorded (i.e., \"50-60\", \"64 65 66 70-80\").\n\n\n\n  notemeth -  - Describes how multiple notes are handled. (As one channel, or individual).\n\n mult - One  channel per MIDI channel is used for all notes. The value in the note channel is the number of the note currently playing (in the case of multiple notes playing, the most recent note is selected). sep - Each note number gets its own  channel.\n\n  velocity -  - Describes how multiple velocity events are recorded. (Separate channels or combined in one channel as separate samples).\n\n veloff - Velocity is not recorded. velencode - The velocity is recorded as the amplitude of the note. Only valid when Note Output is set to Separate Channels. velsep - Velocity is recorded in separate  channels. Each note channel will have a corresponding velocity channel.\n\n  velname - When Velocity is set to Separate Channels, this parameter is the base name of the Velocity  channel (try \"v\"). If blank, no velocity channels will be recorded.\n\n\n\n  aftername - The base name of the polyphonic Aftertouch  channels. One aftertouch channel is created for each note in the Note . If blank, no aftertouch channels will be created.\n\n\n\n  pressname - The name of the Channel Pressure channel. If multiple channels are being recorded, all channel pressure changes of interest will be recording on this  channel. If blank, this channel will not be created.\n\n\n\n  notenorm -  - Note values can be normalized for convenience:\n\n off - When Normalize is Off, 7 bit controllers will return values in the range 0-127 and 14 bit controllers will return values in the range 0-16383. 0to1 - These values are normalized to lie in the range 0 to 1.\n\n  pitchname - The name of the Pitch Wheel  channel. Pitch wheel values range from -1 to +1. If blank, this channel will not be created. Put \"p\" in here to generate a channel.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  controlname - The base name of the Control Change  channels. The channel names are appended with the controller index (0-127). If blank, control changes will not be recorded. It typically contains \"c\".\n\n\n\n  controltype -  - There are 128 different controllers available. By choosing By Index Only, you can specify any number of controllers in the Control Index parameter. Otherwise, you can select a controller from the list from this menu. Some controllers have multiple instances, such as Sound Controllers 1-10. Selecting a controller with multiple instances allows you to use the Control Index parameter to select which instances you want. Any invalid control indices will be ignored.\n\n index - Specify the controller by its index, as opposed to specifying a specific type below. n0 - n1 - n2 - n3 - n4 - n5 - n6 - n7 - n8 - n9 - n10 - n11 - n12 - n13 - n14 - n15 - n16 - n17 - n18 - n19 - n20 - n21 - n22 - n23 -\n\n  controlind - Used to select controllers by number, or multiple controllers by ranges. When in By Index Only Controller Type mode, you can select up to the full 128 controllers or sub-ranges thereof (i.e. \"1-10\", \"2 34 70\", \"1-32 70-80:2\").\n\n\n\n  format -  - Some controllers can be paired together to form 14 bit controllers, rather than the normal 7 bit controllers (controller indices 0-31, 98 and 100). Selecting 14 bit Controllers interprets a pair as one 14 bit controller. Otherwise, they are interpreted as separate 7 bit Controllers.\n\n 7bit - Controllers are assumed to be regular 7 bit value messages. 14bit - Controllers are received as two 7 bit value messages.\n\n  norm -  - Controller values can be normalized for convenience:\n\n off - When Normalize is Off, 7 bit controllers will return values in the range 0-127 and 14 bit controllers will return values in the range 0-16383. 0to1 - These values are normalized to lie in the range 0 to 1. -1to1 - These values are normalized to lie in the range -1 to +1. onoff - Several of the controllers are simply on/off states. When Convert to On/Off is enabled, values greater than or equal to 64 will be interpreted as \"1\" and all values less than 64 will be interpreted as \"0\".\n\n  unwrap - When on, values do not jump between min and max, but are modified to be continuous ramps. Use with knob controllers for examples.\n\n\n\n  progname - The name of the Program Change  channel. All program change messages will be recorded onto this channel. If blank, this channel will not be created.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  pulsename - Record timer pulse messages.\n\n\n\n  rampname - Record timer ramp messages.\n\n\n\n  timerperiod - Record timer period messages.\n\n\n\n  timerstart - Record timer start messages.\n\n\n\n  ticks - Specify the expected ticks per beat. This will influence the timer and bar output values.\n\n\n\n  barname - Output the current bar position.\n\n\n\n  barperiod - Output the current bar period events.\n\n\n\n  barstart - Output when a bar starts.\n\n\n\n  barmsg - Capture bar messages. Place a V in the message to specify which value the channel should have.\n\n\n\n  songpos - Capture song position messages.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  sysex - Sequence of system exclusive message handlers\n\n\n\n  sysex0name - Name of a specific exclusive message to be captured.\n\n\n\n  sysex0msg - Contents of the exclusive message. Place a V in the message to specify which value the channel should have.\n\n\n\n\n\n\nThis is similar to other generators' Channel page. However, there are a few points to consider on how they affect the Midi In .\n\n  start - Defines where recording begins. In \"Tie to Time Line\" mode, any events received before the start time will be ignored. In \"Time Line Independent\" mode, recording will start at this point and continue on (not looping back). If reading from a MIDI File, Start/End will determine the start of the segment to read. \nStart and end of the interval, expressed in Units (seconds, frames or samples). The parameters are expressed in the Units found on the Common page. To set the  to be 100 samples long, Set Units to Samples, Single  Off and Start / End to 0 and 99.\n\n\n\n  startunit -  - Select the units to use for this parameter, Samples, Frames, or Seconds.\n\n samples - Use samples. frames - Use frames. seconds - Use seconds.\n\n  end - Defines the end of the segment to read for MIDI Files.\n\n\n\n  endunit -  - Select the units to use for this parameter, Samples, Frames, or Seconds.\n\n samples - Use samples. frames - Use frames. seconds - Use seconds.\n\n  rate - Defines the sample rate of this , in samples per second. If the sample rate is too low, a rapidly changing input may be misrepresented.\t\nNote: If the sample rate is too low, you may miss MIDI events. A note event may set a sample value to 1, and then the next note event less than 1/30 second later can set it to 0 on the same sample in the  channel. So the event will be missed. Make the sample rate higher, like 600, to catch these events, or make sure that your on-off events coming in are a minimum time separation, as can be achieved through Opcode's MAX.\n\n\n\n  left -  - The left extend conditions (before range).\n\n hold - Hold the current value of the channel. slope - Continue the slope before the start of the channel. cycle - Cycle the channel repeatedly. mirror - Cycle the channel repeatedly, mirroring every other cycle. default - Use the constant value specified in the Default Value parameter.\n\n  right -  - The right extend conditions (after range).\n\n hold - Hold the current value of the channel. slope - Continue the slope after the end of the channel. cycle - Cycle the channel repeatedly. mirror - Cycle the channel repeatedly, mirroring every other cycle. default - Use the constant value specified in the Default Value parameter.\n\n  defval - The value used for the Default Value extend condition.\n\n\n\n\n\n  timeslice - Turning this on forces the channels to be \"Time Sliced\".  A  is the time between the last cook frame and the current cook frame.\n\n\n\n  scope - To determine which channels get affected, some CHOPs use a  string on the Common page.\n\n\n\n  srselect -  - Handle cases where multiple input CHOPs' sample rates are different. When Resampling occurs, the curves are interpolated according to the Interpolation Method Option, or \"Linear\" if the Interpolate Options are not available.\n\n first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.\n\n  exportmethod -  - This will determine how to connect the  channel to the parameter. Refer to the Export article for more information.\n\n datindex - Uses the docked  table and references the channel via the index of the channel in the . datname - Uses the docked  table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.\n\n  autoexportroot - This path points to the root node where all of the paths that exporting by Channel Name is : are relative to.\n\n\n\n  exporttable - The  used to hold the export information when using the  Table  Methods (See above).\n\n\n\n\n\nExtra Information for the MIDI In  can be accessed via an Info CHOP.\n\n\n\n - Start of the  interval in samples. - Number of samples in the . - The samplerate of the channels in frames per second. - Number of channels in the . - 1 if  is  enabled, 0 otherwise. - A count of how often the export connections have been updated.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\nwikieditorwikieditorwikieditor2021.100002020.236802020.200002018.28070before 2018.28070\nCHOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nTOuch Environment file, the file type used by TouchDesigner to save your entire project.\n\n\n\nThe location of an operator within the TouchDesigner environment, for example, /geo1/circle1, a node called circle1 in a component called geo1. The path / is called Root. This path is displayed at the top of every Pane, showing which Component's network you are currently in. To refer instead to a filesystem folder, directory, disk file or http: address, see Folder.\n\n\n\nTo \"pulse\" a parameter is to send it a signal from (1) an exported CHOP channel or (2) a python command or (3) a mouse click that causes a new action to occur immediately. A pulse via python is via the .pulse() function on a pulse-type parameter, such as Reset parameter in a Speed CHOP. A pulse from a CHOP is typically a 0 to 1 to 0 signal in an exported channel.\n\n\n\nThe term \"Frame\" is a measurement of time used (1) in the Timeline, (2) as a time-unit in CHOPs, and (3) as a time unit in movie files that are read into TOPs and written out from TOPs. The frame rate is the frames per second (FPS).\n\n\n\nA Time Slice is the time from the last cook frame to the current cook frame. In CHOPs it is the set of short channels that contain the CHOP channels' samples between the last and the current cook frame.\n\n\n\nA parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator. TOPs have Channel Mask, a similar feature.\n\n\n\nA CHOP outputs one or more channels, where a channel is simply a sequence of numbers (Samples), representing motion, audio, etc. Channels are passed between CHOPs in TouchDesigner networks. Channels can be Exported to Parameters.\n\n\n\nA text string that contains data (string, float, list, boolean, etc.) and operators (+ * < etc) that are evaluated by the node's language (python or Tscript) and returns a string, float list or boolean, etc. Expressions are used in parameters, DATs and in scripts.\n\n\n\nEvery operator in TouchDesigner has a set of control Parameters that can be integer or floating point numbers, menus, binary toggles, text strings or operator paths, which determine the output of the operator.\n\n\n\nsamples-per-second of a CHOP. Each CHOP in your network has a sample rate. In contrast, the overall timeline has a Frame Rate, which is the number of frames to cook and display per second, generally your monitor display frequency, default 60.\n\n\n\nExporting is the connection of CHOP channels to parameters of operators. The output of each exporting CHOP is one or more channels, active only while the CHOP Viewer is on. The current value of a channel can be exported to a parameter of any operator, overriding that parameter's value. See Parameter.\n\n\n\nAn Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a python Script or GLSL Shader, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.\n\n\n\nTouchDesigner is a hierarchy of components. \"root\" is the top-most network in the hierarchy. The Network Path or Path for root is simply /. A typical path is /project1/moviein1.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=MIDI_In_CHOP&oldid=32288\"\n\t\tCategory: CHOPs",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.048Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Active",
      "label": "Active",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "The MIDI In  reads Note events, Controller events, Program Change events, System Exclusive messages and Timing events from both MIDI devices and files. See also MIDI In Map CHOP.\t\t\nThe MIDI In  receives MIDI events from MIDI devices connected to the serial port, reads MIDI events internal to the workstation (i.e. the built-in software synth), and interprets musical scores in MIDI files. Supported MIDI events are:\t\t\t\n\nNote On, Note Off\nPolyphonic Aftertouch\nChannel Pressure\nProgram Change\nControl Change (MIDI controller devices)\nPitch Wheel\nTimer Events including beat pulses\nBar Messages\nStart, Stop, Continue\nSong Position Pointer\nSystem Exclusive MessagesMIDI events arriving on separate MIDI channels may be recorded on separate  channels. Also, any number of MIDI CHOPs can read from the same or different sources. TouchDesigner can be configured such that MIDI Start, Stop, or Continue events can control the Timeline and Beat Dialog.\t\t\t\nThe 'Simplified Output' option creates a channel for every type of MIDI event received, so number of channels expands while the devices is being used. No need to specify name, channel and index patterns.\t\t\t\nNote: The values of the MIDI inputs are saved into the TouchDesigner  file, and are restored when the file is reloaded. The physical controllers may be in a different position when the  is restarted, causing the values to jump when the controllers are moved. This is unavoidable. \t\t\t\nSee also the MIDI In DAT, MIDI Event DAT, MIDI In Map CHOP, MIDI Out CHOP.\nmidiinCHOP_Class\n\nContents\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n  active - Enable or disable the MIDI In .\n\n\n\n  source -  - Get MIDI input from a device or a file.\n\n device - The MIDI events come live from a device. file - The MIDI events come from an existing file.\n\n  device -  to the MIDI device Table DAT\n\n\n\n  id - Specify the id of which device to use.\n\n\n\n  file - If MIDI file is selected as the MIDI source use this field to specify the name of the MIDI file to read. The file can be read in from disk or from the web. Use http:// when specifying a URL.\n\n\n\n  entire - If enabled, the entire MIDI file is read. Otherwise, the Start and End parameters on the Channel page determine the segment of the file to read.\n\n\n\n  resetchannels - Deletes all channels when set to On, new channels will not be added until Reset Channels is turned Off.\n\n\n\t\t\n  resetchannelspulse - Instantly deletes all channels.\n\n\n\n  resetvalues - Resets all channel values to 0 when On, channel values will not be updated until Reset Values is turned Off.\n\n\n\t\t\n  resetchannelspulse - Instantly resets all channels to 0.\n\n\n\t\n  simplified - When this is on channels are automatically created when MIDI signal is detected from the selected MIDI device.\n\n\n\n  preservepulses - When on, quick value transitions (pulses) are spaced out over consecutive output samples. Use this option when pulse frequencies approach or exceed the timeline rate, otherwise they risk overlapping each other and being lost.\n\n\n\n  onebased - Make the index 1 based instead of the default 0 based.\n\n\n\n  channel - The  may read from any number of MIDI channels, numbered 1-16. Ranges and multiple entries are supported (i.e. \"1 4 6\", \"1-7 12\", \"1-5:2\").\t\nIf Channel Prefix is left blank, then the input streams from multiple MIDI channels will be combined into one set of  channels (i.e., a \"note 64 on\" event on channel 12 followed by a \"note 64 off\" event on channel 8 appears in the note 64  channel as a single note).\n\n\n  prefix - When recording from multiple MIDI channels, putting a string like \"ch\" in this parameter causes the MIDI channel to be split into separate  channels per MIDI channel. Otherwise the MIDI channels are all merged into one set of  channels.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  recordtype -  - Determine what to record.\n\n single - This only outputs the current value of notes, controllers, etc. It does not retain prior values. It creates a  at frame 1 always, so the  causes cooking only when MIDI events come in. current - Same as \"Single \", but the  frame is always at the current frame, so the  changes every frame, causing other CHOPs to recook every frame. ind - The  frame is always at the current Time Slice. timeline - The entire length of the timeline is recorded.\n\n  record - This parameter is used as a button to start and stop recording into the  channels.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  notename - Put an \"n\" in here to generate channels for note events. It is the base name of the  channel used to record notes. If blank, notes are ignored. If the Note Output parameter is set to Separate Channels, then  channels will be created for each note in the Note , of the form: notename\n\n\n\n  notescope - The scope of notes to record. Multiple ranges and notes can be recorded (i.e., \"50-60\", \"64 65 66 70-80\").\n\n\n\n  notemeth -  - Describes how multiple notes are handled. (As one channel, or individual).\n\n mult - One  channel per MIDI channel is used for all notes. The value in the note channel is the number of the note currently playing (in the case of multiple notes playing, the most recent note is selected). sep - Each note number gets its own  channel.\n\n  velocity -  - Describes how multiple velocity events are recorded. (Separate channels or combined in one channel as separate samples).\n\n veloff - Velocity is not recorded. velencode - The velocity is recorded as the amplitude of the note. Only valid when Note Output is set to Separate Channels. velsep - Velocity is recorded in separate  channels. Each note channel will have a corresponding velocity channel.\n\n  velname - When Velocity is set to Separate Channels, this parameter is the base name of the Velocity  channel (try \"v\"). If blank, no velocity channels will be recorded.\n\n\n\n  aftername - The base name of the polyphonic Aftertouch  channels. One aftertouch channel is created for each note in the Note . If blank, no aftertouch channels will be created.\n\n\n\n  pressname - The name of the Channel Pressure channel. If multiple channels are being recorded, all channel pressure changes of interest will be recording on this  channel. If blank, this channel will not be created.\n\n\n\n  notenorm -  - Note values can be normalized for convenience:\n\n off - When Normalize is Off, 7 bit controllers will return values in the range 0-127 and 14 bit controllers will return values in the range 0-16383. 0to1 - These values are normalized to lie in the range 0 to 1.\n\n  pitchname - The name of the Pitch Wheel  channel. Pitch wheel values range from -1 to +1. If blank, this channel will not be created. Put \"p\" in here to generate a channel.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  controlname - The base name of the Control Change  channels. The channel names are appended with the controller index (0-127). If blank, control changes will not be recorded. It typically contains \"c\".\n\n\n\n  controltype -  - There are 128 different controllers available. By choosing By Index Only, you can specify any number of controllers in the Control Index parameter. Otherwise, you can select a controller from the list from this menu. Some controllers have multiple instances, such as Sound Controllers 1-10. Selecting a controller with multiple instances allows you to use the Control Index parameter to select which instances you want. Any invalid control indices will be ignored.\n\n index - Specify the controller by its index, as opposed to specifying a specific type below. n0 - n1 - n2 - n3 - n4 - n5 - n6 - n7 - n8 - n9 - n10 - n11 - n12 - n13 - n14 - n15 - n16 - n17 - n18 - n19 - n20 - n21 - n22 - n23 -\n\n  controlind - Used to select controllers by number, or multiple controllers by ranges. When in By Index Only Controller Type mode, you can select up to the full 128 controllers or sub-ranges thereof (i.e. \"1-10\", \"2 34 70\", \"1-32 70-80:2\").\n\n\n\n  format -  - Some controllers can be paired together to form 14 bit controllers, rather than the normal 7 bit controllers (controller indices 0-31, 98 and 100). Selecting 14 bit Controllers interprets a pair as one 14 bit controller. Otherwise, they are interpreted as separate 7 bit Controllers.\n\n 7bit - Controllers are assumed to be regular 7 bit value messages. 14bit - Controllers are received as two 7 bit value messages.\n\n  norm -  - Controller values can be normalized for convenience:\n\n off - When Normalize is Off, 7 bit controllers will return values in the range 0-127 and 14 bit controllers will return values in the range 0-16383. 0to1 - These values are normalized to lie in the range 0 to 1. -1to1 - These values are normalized to lie in the range -1 to +1. onoff - Several of the controllers are simply on/off states. When Convert to On/Off is enabled, values greater than or equal to 64 will be interpreted as \"1\" and all values less than 64 will be interpreted as \"0\".\n\n  unwrap - When on, values do not jump between min and max, but are modified to be continuous ramps. Use with knob controllers for examples.\n\n\n\n  progname - The name of the Program Change  channel. All program change messages will be recorded onto this channel. If blank, this channel will not be created.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  pulsename - Record timer pulse messages.\n\n\n\n  rampname - Record timer ramp messages.\n\n\n\n  timerperiod - Record timer period messages.\n\n\n\n  timerstart - Record timer start messages.\n\n\n\n  ticks - Specify the expected ticks per beat. This will influence the timer and bar output values.\n\n\n\n  barname - Output the current bar position.\n\n\n\n  barperiod - Output the current bar period events.\n\n\n\n  barstart - Output when a bar starts.\n\n\n\n  barmsg - Capture bar messages. Place a V in the message to specify which value the channel should have.\n\n\n\n  songpos - Capture song position messages.\n\n\n\n\n\nThe parameters here are only enabled when 'Simplied Output' on the Source Page is Off.\n\n  sysex - Sequence of system exclusive message handlers\n\n\n\n  sysex0name - Name of a specific exclusive message to be captured.\n\n\n\n  sysex0msg - Contents of the exclusive message. Place a V in the message to specify which value the channel should have.\n\n\n\n\n\n\nThis is similar to other generators' Channel page. However, there are a few points to consider on how they affect the Midi In .\n\n  start - Defines where recording begins. In \"Tie to Time Line\" mode, any events received before the start time will be ignored. In \"Time Line Independent\" mode, recording will start at this point and continue on (not looping back). If reading from a MIDI File, Start/End will determine the start of the segment to read. \nStart and end of the interval, expressed in Units (seconds, frames or samples). The parameters are expressed in the Units found on the Common page. To set the  to be 100 samples long, Set Units to Samples, Single  Off and Start / End to 0 and 99.\n\n\n\n  startunit -  - Select the units to use for this parameter, Samples, Frames, or Seconds.\n\n samples - Use samples. frames - Use frames. seconds - Use seconds.\n\n  end - Defines the end of the segment to read for MIDI Files.\n\n\n\n  endunit -  - Select the units to use for this parameter, Samples, Frames, or Seconds.\n\n samples - Use samples. frames - Use frames. seconds - Use seconds.\n\n  rate - Defines the sample rate of this , in samples per second. If the sample rate is too low, a rapidly changing input may be misrepresented.\t\nNote: If the sample rate is too low, you may miss MIDI events. A note event may set a sample value to 1, and then the next note event less than 1/30 second later can set it to 0 on the same sample in the  channel. So the event will be missed. Make the sample rate higher, like 600, to catch these events, or make sure that your on-off events coming in are a minimum time separation, as can be achieved through Opcode's MAX.\n\n\n\n  left -  - The left extend conditions (before range).\n\n hold - Hold the current value of the channel. slope - Continue the slope before the start of the channel. cycle - Cycle the channel repeatedly. mirror - Cycle the channel repeatedly, mirroring every other cycle. default - Use the constant value specified in the Default Value parameter.\n\n  right -  - The right extend conditions (after range).\n\n hold - Hold the current value of the channel. slope - Continue the slope after the end of the channel. cycle - Cycle the channel repeatedly. mirror - Cycle the channel repeatedly, mirroring every other cycle. default - Use the constant value specified in the Default Value parameter.\n\n  defval - The value used for the Default Value extend condition.\n\n\n\n\n\n  timeslice - Turning this on forces the channels to be \"Time Sliced\".  A  is the time between the last cook frame and the current cook frame.\n\n\n\n  scope - To determine which channels get affected, some CHOPs use a  string on the Common page.\n\n\n\n  srselect -  - Handle cases where multiple input CHOPs' sample rates are different. When Resampling occurs, the curves are interpolated according to the Interpolation Method Option, or \"Linear\" if the Interpolate Options are not available.\n\n first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.\n\n  exportmethod -  - This will determine how to connect the  channel to the parameter. Refer to the Export article for more information.\n\n datindex - Uses the docked  table and references the channel via the index of the channel in the . datname - Uses the docked  table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.\n\n  autoexportroot - This path points to the root node where all of the paths that exporting by Channel Name is : are relative to.\n\n\n\n  exporttable - The  used to hold the export information when using the  Table  Methods (See above).\n\n\n\n\n\nExtra Information for the MIDI In  can be accessed via an Info CHOP.\n\n\n\n - Start of the  interval in samples. - Number of samples in the . - The samplerate of the channels in frames per second. - Number of channels in the . - 1 if  is  enabled, 0 otherwise. - A count of how often the export connections have been updated.\n - Number of times the operator has cooked since the process started. - Duration of the last cook in milliseconds. - Frame number when this operator was last cooked relative to the component timeline. - Frame number when this operator was last cooked relative to the absolute time. - Time in milliseconds at which the operator started cooking in the frame it was cooked. - Time in milliseconds at which the operator finished cooking in the frame it was cooked. - 1 if operator was cooked this frame. - Number of warnings in this operator if any. - Number of errors in this operator if any.\nTouchDesigner Build: Latest\\nwikieditorwikieditorwikieditor2021.100002020.236802020.200002018.28070before 2018.28070\nCHOPs\n• • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • \n\nAn Operator Family which operate on Channels (a sequence of numbers (Samples)) which are used for animation, audio, mathematics, simulation, logic, UI construction, and data streamed from/to devices and protocols.\n\n\n\nTOuch Environment file, the file type used by TouchDesigner to save your entire project.\n\n\n\nThe location of an operator within the TouchDesigner environment, for example, /geo1/circle1, a node called circle1 in a component called geo1. The path / is called Root. This path is displayed at the top of every Pane, showing which Component's network you are currently in. To refer instead to a filesystem folder, directory, disk file or http: address, see Folder.\n\n\n\nTo \"pulse\" a parameter is to send it a signal from (1) an exported CHOP channel or (2) a python command or (3) a mouse click that causes a new action to occur immediately. A pulse via python is via the .pulse() function on a pulse-type parameter, such as Reset parameter in a Speed CHOP. A pulse from a CHOP is typically a 0 to 1 to 0 signal in an exported channel.\n\n\n\nThe term \"Frame\" is a measurement of time used (1) in the Timeline, (2) as a time-unit in CHOPs, and (3) as a time unit in movie files that are read into TOPs and written out from TOPs. The frame rate is the frames per second (FPS).\n\n\n\nA Time Slice is the time from the last cook frame to the current cook frame. In CHOPs it is the set of short channels that contain the CHOP channels' samples between the last and the current cook frame.\n\n\n\nA parameter in most CHOPs that restricts which channels of that CHOP will be affected. Normally all channels of a CHOP are affected by the operator. TOPs have Channel Mask, a similar feature.\n\n\n\nA CHOP outputs one or more channels, where a channel is simply a sequence of numbers (Samples), representing motion, audio, etc. Channels are passed between CHOPs in TouchDesigner networks. Channels can be Exported to Parameters.\n\n\n\nA text string that contains data (string, float, list, boolean, etc.) and operators (+ * < etc) that are evaluated by the node's language (python or Tscript) and returns a string, float list or boolean, etc. Expressions are used in parameters, DATs and in scripts.\n\n\n\nEvery operator in TouchDesigner has a set of control Parameters that can be integer or floating point numbers, menus, binary toggles, text strings or operator paths, which determine the output of the operator.\n\n\n\nsamples-per-second of a CHOP. Each CHOP in your network has a sample rate. In contrast, the overall timeline has a Frame Rate, which is the number of frames to cook and display per second, generally your monitor display frequency, default 60.\n\n\n\nExporting is the connection of CHOP channels to parameters of operators. The output of each exporting CHOP is one or more channels, active only while the CHOP Viewer is on. The current value of a channel can be exported to a parameter of any operator, overriding that parameter's value. See Parameter.\n\n\n\nAn Operator Family that manipulates text strings: multi-line text or tables. Multi-line text is often a python Script or GLSL Shader, but can be any multi-line text. Tables are rows and columns of cells, each containing a text string.\n\n\n\nTouchDesigner is a hierarchy of components. \"root\" is the top-most network in the hierarchy. The Network Path or Path for root is simply /. A typical path is /project1/moviein1.\n\n\n\n\n\n\n\n\nRetrieved from \"https://docs.derivative.ca/index.php?title=MIDI_In_CHOP&oldid=32288\"",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Active",
      "label": "Active",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "active - Enable or disable the MIDI In .",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "MIDI Source",
      "label": "MIDI Source",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "source -  - Get MIDI input from a device or a file.\n\n device - The MIDI events come live from a device. file - The MIDI events come from an existing file.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Device",
      "label": "Device",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "device - The MIDI events come live from a device. file - The MIDI events come from an existing file.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Device Table",
      "label": "Device Table",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "device -  to the MIDI device Table DAT",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Device ID",
      "label": "Device ID",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "id - Specify the id of which device to use.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "MIDI File",
      "label": "MIDI File",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "file - If MIDI file is selected as the MIDI source use this field to specify the name of the MIDI file to read. The file can be read in from disk or from the web. Use http:// when specifying a URL.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Read Entire MIDI File",
      "label": "Read Entire MIDI File",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "entire - If enabled, the entire MIDI file is read. Otherwise, the Start and End parameters on the Channel page determine the segment of the file to read.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Reset\tChannels",
      "label": "Reset\tChannels",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "resetchannels - Deletes all channels when set to On, new channels will not be added until Reset Channels is turned Off.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Reset Channels Pulse",
      "label": "Reset Channels Pulse",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "resetchannelspulse - Instantly deletes all channels.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Reset\tValues",
      "label": "Reset\tValues",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "resetvalues - Resets all channel values to 0 when On, channel values will not be updated until Reset Values is turned Off.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Reset Channels Pulse",
      "label": "Reset Channels Pulse",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "resetchannelspulse - Instantly resets all channels to 0.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Simplified Output",
      "label": "Simplified Output",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "simplified - When this is on channels are automatically created when MIDI signal is detected from the selected MIDI device.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Preserve Pulses",
      "label": "Preserve Pulses",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "preservepulses - When on, quick value transitions (pulses) are spaced out over consecutive output samples. Use this option when pulse frequencies approach or exceed the timeline rate, otherwise they risk overlapping each other and being lost.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "1 Based Index",
      "label": "1 Based Index",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "onebased - Make the index 1 based instead of the default 0 based.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.051Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "MIDI Channels",
      "label": "MIDI Channels",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "channel - The  may read from any number of MIDI channels, numbered 1-16. Ranges and multiple entries are supported (i.e. \"1 4 6\", \"1-7 12\", \"1-5:2\").\t\nIf Channel Prefix is left blank, then the input streams from multiple MIDI channels will be combined into one set of  channels (i.e., a \"note 64 on\" event on channel 12 followed by a \"note 64 off\" event on channel 8 appears in the note 64  channel as a single note).",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Channel Prefix",
      "label": "Channel Prefix",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "prefix - When recording from multiple MIDI channels, putting a string like \"ch\" in this parameter causes the MIDI channel to be split into separate  channels per MIDI channel. Otherwise the MIDI channels are all merged into one set of  channels.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Record Method",
      "label": "Record Method",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "recordtype -  - Determine what to record.\n\n single - This only outputs the current value of notes, controllers, etc. It does not retain prior values. It creates a  at frame 1 always, so the  causes cooking only when MIDI events come in. current - Same as \"Single \", but the  frame is always at the current frame, so the  changes every frame, causing other CHOPs to recook every frame. ind - The  frame is always at the current Time Slice. timeline - The entire length of the timeline is recorded.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Single Frame",
      "label": "Single Frame",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "single - This only outputs the current value of notes, controllers, etc. It does not retain prior values. It creates a  at frame 1 always, so the  causes cooking only when MIDI events come in. current - Same as \"Single \", but the  frame is always at the current frame, so the  changes every frame, causing other CHOPs to recook every frame. ind - The  frame is always at the current Time Slice. timeline - The entire length of the timeline is recorded.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Record",
      "label": "Record",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "record - This parameter is used as a button to start and stop recording into the  channels.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Note Name",
      "label": "Note Name",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "notename - Put an \"n\" in here to generate channels for note events. It is the base name of the  channel used to record notes. If blank, notes are ignored. If the Note Output parameter is set to Separate Channels, then  channels will be created for each note in the Note , of the form: notename",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Note Scope",
      "label": "Note Scope",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "notescope - The scope of notes to record. Multiple ranges and notes can be recorded (i.e., \"50-60\", \"64 65 66 70-80\").",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Note Output",
      "label": "Note Output",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "notemeth -  - Describes how multiple notes are handled. (As one channel, or individual).\n\n mult - One  channel per MIDI channel is used for all notes. The value in the note channel is the number of the note currently playing (in the case of multiple notes playing, the most recent note is selected). sep - Each note number gets its own  channel.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "One Multiplexed Channel",
      "label": "One Multiplexed Channel",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "mult - One  channel per MIDI channel is used for all notes. The value in the note channel is the number of the note currently playing (in the case of multiple notes playing, the most recent note is selected). sep - Each note number gets its own  channel.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Velocity",
      "label": "Velocity",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "velocity -  - Describes how multiple velocity events are recorded. (Separate channels or combined in one channel as separate samples).\n\n veloff - Velocity is not recorded. velencode - The velocity is recorded as the amplitude of the note. Only valid when Note Output is set to Separate Channels. velsep - Velocity is recorded in separate  channels. Each note channel will have a corresponding velocity channel.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Off",
      "label": "Off",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "veloff - Velocity is not recorded. velencode - The velocity is recorded as the amplitude of the note. Only valid when Note Output is set to Separate Channels. velsep - Velocity is recorded in separate  channels. Each note channel will have a corresponding velocity channel.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Velocity Name",
      "label": "Velocity Name",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "velname - When Velocity is set to Separate Channels, this parameter is the base name of the Velocity  channel (try \"v\"). If blank, no velocity channels will be recorded.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Aftertouch Name",
      "label": "Aftertouch Name",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "aftername - The base name of the polyphonic Aftertouch  channels. One aftertouch channel is created for each note in the Note . If blank, no aftertouch channels will be created.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Pressure Name",
      "label": "Pressure Name",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "pressname - The name of the Channel Pressure channel. If multiple channels are being recorded, all channel pressure changes of interest will be recording on this  channel. If blank, this channel will not be created.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Normalize",
      "label": "Normalize",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "notenorm -  - Note values can be normalized for convenience:\n\n off - When Normalize is Off, 7 bit controllers will return values in the range 0-127 and 14 bit controllers will return values in the range 0-16383. 0to1 - These values are normalized to lie in the range 0 to 1.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "None",
      "label": "None",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "off - When Normalize is Off, 7 bit controllers will return values in the range 0-127 and 14 bit controllers will return values in the range 0-16383. 0to1 - These values are normalized to lie in the range 0 to 1.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Pitch Wheel Name",
      "label": "Pitch Wheel Name",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "pitchname - The name of the Pitch Wheel  channel. Pitch wheel values range from -1 to +1. If blank, this channel will not be created. Put \"p\" in here to generate a channel.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Controller Name",
      "label": "Controller Name",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "controlname - The base name of the Control Change  channels. The channel names are appended with the controller index (0-127). If blank, control changes will not be recorded. It typically contains \"c\".",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.052Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Controller Type",
      "label": "Controller Type",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "controltype -  - There are 128 different controllers available. By choosing By Index Only, you can specify any number of controllers in the Control Index parameter. Otherwise, you can select a controller from the list from this menu. Some controllers have multiple instances, such as Sound Controllers 1-10. Selecting a controller with multiple instances allows you to use the Control Index parameter to select which instances you want. Any invalid control indices will be ignored.\n\n index - Specify the controller by its index, as opposed to specifying a specific type below. n0 - n1 - n2 - n3 - n4 - n5 - n6 - n7 - n8 - n9 - n10 - n11 - n12 - n13 - n14 - n15 - n16 - n17 - n18 - n19 - n20 - n21 - n22 - n23 -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "By Index Only",
      "label": "By Index Only",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "index - Specify the controller by its index, as opposed to specifying a specific type below. n0 - n1 - n2 - n3 - n4 - n5 - n6 - n7 - n8 - n9 - n10 - n11 - n12 - n13 - n14 - n15 - n16 - n17 - n18 - n19 - n20 - n21 - n22 - n23 -",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Controller Index",
      "label": "Controller Index",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "controlind - Used to select controllers by number, or multiple controllers by ranges. When in By Index Only Controller Type mode, you can select up to the full 128 controllers or sub-ranges thereof (i.e. \"1-10\", \"2 34 70\", \"1-32 70-80:2\").",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Controller Format",
      "label": "Controller Format",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "format -  - Some controllers can be paired together to form 14 bit controllers, rather than the normal 7 bit controllers (controller indices 0-31, 98 and 100). Selecting 14 bit Controllers interprets a pair as one 14 bit controller. Otherwise, they are interpreted as separate 7 bit Controllers.\n\n 7bit - Controllers are assumed to be regular 7 bit value messages. 14bit - Controllers are received as two 7 bit value messages.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "7 bit Controllers",
      "label": "7 bit Controllers",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "7bit - Controllers are assumed to be regular 7 bit value messages. 14bit - Controllers are received as two 7 bit value messages.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Normalize",
      "label": "Normalize",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "norm -  - Controller values can be normalized for convenience:\n\n off - When Normalize is Off, 7 bit controllers will return values in the range 0-127 and 14 bit controllers will return values in the range 0-16383. 0to1 - These values are normalized to lie in the range 0 to 1. -1to1 - These values are normalized to lie in the range -1 to +1. onoff - Several of the controllers are simply on/off states. When Convert to On/Off is enabled, values greater than or equal to 64 will be interpreted as \"1\" and all values less than 64 will be interpreted as \"0\".",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "None",
      "label": "None",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "off - When Normalize is Off, 7 bit controllers will return values in the range 0-127 and 14 bit controllers will return values in the range 0-16383. 0to1 - These values are normalized to lie in the range 0 to 1. -1to1 - These values are normalized to lie in the range -1 to +1. onoff - Several of the controllers are simply on/off states. When Convert to On/Off is enabled, values greater than or equal to 64 will be interpreted as \"1\" and all values less than 64 will be interpreted as \"0\".",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Unwrap",
      "label": "Unwrap",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "unwrap - When on, values do not jump between min and max, but are modified to be continuous ramps. Use with knob controllers for examples.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Program Change",
      "label": "Program Change",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "progname - The name of the Program Change  channel. All program change messages will be recorded onto this channel. If blank, this channel will not be created.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Timer Pulse Name",
      "label": "Timer Pulse Name",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "pulsename - Record timer pulse messages.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Timer Ramp Name",
      "label": "Timer Ramp Name",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "rampname - Record timer ramp messages.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Timer Period",
      "label": "Timer Period",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "timerperiod - Record timer period messages.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Timer Start",
      "label": "Timer Start",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "timerstart - Record timer start messages.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Ticks per Beat",
      "label": "Ticks per Beat",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "ticks - Specify the expected ticks per beat. This will influence the timer and bar output values.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Bar Ramp Name",
      "label": "Bar Ramp Name",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "barname - Output the current bar position.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Bar Period",
      "label": "Bar Period",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "barperiod - Output the current bar period events.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Bar Start",
      "label": "Bar Start",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "barstart - Output when a bar starts.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Bar Message",
      "label": "Bar Message",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "barmsg - Capture bar messages. Place a V in the message to specify which value the channel should have.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Song Pos Name",
      "label": "Song Pos Name",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "songpos - Capture song position messages.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "System Exclusive",
      "label": "System Exclusive",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "sysex - Sequence of system exclusive message handlers\n\n\n\n  sysex0name - Name of a specific exclusive message to be captured.\n\n\n\n  sysex0msg - Contents of the exclusive message. Place a V in the message to specify which value the channel should have.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Channel Name",
      "label": "Channel Name",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "sysex0name - Name of a specific exclusive message to be captured.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.053Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Message",
      "label": "Message",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "sysex0msg - Contents of the exclusive message. Place a V in the message to specify which value the channel should have.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Start",
      "label": "Start",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "start - Defines where recording begins. In \"Tie to Time Line\" mode, any events received before the start time will be ignored. In \"Time Line Independent\" mode, recording will start at this point and continue on (not looping back). If reading from a MIDI File, Start/End will determine the start of the segment to read. \nStart and end of the interval, expressed in Units (seconds, frames or samples). The parameters are expressed in the Units found on the Common page. To set the  to be 100 samples long, Set Units to Samples, Single  Off and Start / End to 0 and 99.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Start Unit",
      "label": "Start Unit",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "startunit -  - Select the units to use for this parameter, Samples, Frames, or Seconds.\n\n samples - Use samples. frames - Use frames. seconds - Use seconds.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "I",
      "label": "I",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "samples - Use samples. frames - Use frames. seconds - Use seconds.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "End",
      "label": "End",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "end - Defines the end of the segment to read for MIDI Files.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "End Unit",
      "label": "End Unit",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "endunit -  - Select the units to use for this parameter, Samples, Frames, or Seconds.\n\n samples - Use samples. frames - Use frames. seconds - Use seconds.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "I",
      "label": "I",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "samples - Use samples. frames - Use frames. seconds - Use seconds.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Sample Rate",
      "label": "Sample Rate",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "rate - Defines the sample rate of this , in samples per second. If the sample rate is too low, a rapidly changing input may be misrepresented.\t\nNote: If the sample rate is too low, you may miss MIDI events. A note event may set a sample value to 1, and then the next note event less than 1/30 second later can set it to 0 on the same sample in the  channel. So the event will be missed. Make the sample rate higher, like 600, to catch these events, or make sure that your on-off events coming in are a minimum time separation, as can be achieved through Opcode's MAX.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Extend Left",
      "label": "Extend Left",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "left -  - The left extend conditions (before range).\n\n hold - Hold the current value of the channel. slope - Continue the slope before the start of the channel. cycle - Cycle the channel repeatedly. mirror - Cycle the channel repeatedly, mirroring every other cycle. default - Use the constant value specified in the Default Value parameter.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Hold",
      "label": "Hold",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "hold - Hold the current value of the channel. slope - Continue the slope before the start of the channel. cycle - Cycle the channel repeatedly. mirror - Cycle the channel repeatedly, mirroring every other cycle. default - Use the constant value specified in the Default Value parameter.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Extend Right",
      "label": "Extend Right",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "right -  - The right extend conditions (after range).\n\n hold - Hold the current value of the channel. slope - Continue the slope after the end of the channel. cycle - Cycle the channel repeatedly. mirror - Cycle the channel repeatedly, mirroring every other cycle. default - Use the constant value specified in the Default Value parameter.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Hold",
      "label": "Hold",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "hold - Hold the current value of the channel. slope - Continue the slope after the end of the channel. cycle - Cycle the channel repeatedly. mirror - Cycle the channel repeatedly, mirroring every other cycle. default - Use the constant value specified in the Default Value parameter.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Default Value",
      "label": "Default Value",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "defval - The value used for the Default Value extend condition.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Time Slice",
      "label": "Time Slice",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "timeslice - Turning this on forces the channels to be \"Time Sliced\".  A  is the time between the last cook frame and the current cook frame.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Scope",
      "label": "Scope",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "scope - To determine which channels get affected, some CHOPs use a  string on the Common page.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Sample Rate Match",
      "label": "Sample Rate Match",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "srselect -  - Handle cases where multiple input CHOPs' sample rates are different. When Resampling occurs, the curves are interpolated according to the Interpolation Method Option, or \"Linear\" if the Interpolate Options are not available.\n\n first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Resample At First Input's Rate",
      "label": "Resample At First Input's Rate",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "first - Use rate of first input to resample others. max - Resample to the highest sample rate. min - Resample to the lowest sample rate. err - Doesn't accept conflicting sample rates.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Export Method",
      "label": "Export Method",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "exportmethod -  - This will determine how to connect the  channel to the parameter. Refer to the Export article for more information.\n\n datindex - Uses the docked  table and references the channel via the index of the channel in the . datname - Uses the docked  table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "DAT Table by Index",
      "label": "DAT Table by Index",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "datindex - Uses the docked  table and references the channel via the index of the channel in the . datname - Uses the docked  table and references the channel via the name of the channel in the . autoname - The channel is the full destination of where to export to, such has geo1/transform1:tx.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.054Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Export Root",
      "label": "Export Root",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "autoexportroot - This path points to the root node where all of the paths that exporting by Channel Name is : are relative to.",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.055Z",
      "rawData": {},
      "sourceElement": null
    },
    {
      "id": null,
      "name": "Export Table",
      "label": "Export Table",
      "group": "General",
      "page": "",
      "type": "float",
      "dataType": "number",
      "style": "",
      "defaultValue": null,
      "minValue": null,
      "maxValue": null,
      "step": null,
      "menuItems": [],
      "menuLabels": [],
      "allowCustom": false,
      "maxLength": null,
      "pattern": null,
      "isArray": false,
      "arraySize": 1,
      "dimensions": 1,
      "description": "exporttable - The  used to hold the export information when using the  Table  Methods (See above).",
      "tooltip": "",
      "help": "",
      "units": "",
      "examples": [],
      "isReadOnly": false,
      "isAdvanced": false,
      "isHidden": false,
      "isAnimatable": true,
      "isExpression": false,
      "isPython": false,
      "dependsOn": [],
      "affects": [],
      "linkedTo": [],
      "expressionLanguage": "",
      "defaultExpression": "",
      "commonExpressions": [],
      "order": 0,
      "isVisible": true,
      "conditionalDisplay": null,
      "isValid": true,
      "validationErrors": [],
      "lastUpdated": "2025-08-07T07:50:04.055Z",
      "rawData": {},
      "sourceElement": null
    }
  ],
  "parameterGroups": {},
  "codeExamples": [],
  "pythonExamples": [],
  "expressions": [],
  "commonInputs": [],
  "commonOutputs": [],
  "relatedOperators": [],
  "workflowPatterns": [],
  "images": [],
  "videos": [],
  "assets": [],
  "keywords": [
    "midi",
    "in",
    "chop",
    "reads",
    "note",
    "events,",
    "controller",
    "program",
    "change"
  ],
  "tags": [
    "CHOP",
    "TouchDesigner",
    "MIDI In CHOP"
  ],
  "searchWeight": 1,
  "contentHash": "",
  "processingDate": "2025-08-07T07:50:04.055Z",
  "processingVersion": "1.0.0",
  "isValid": true,
  "validationErrors": []
}