User Tools

Site Tools


openstagecontrol

OpenStageControl

Notes

update property

receive('/EDIT', 'text_1', {
  value: "abcd",
  widgets: []
});

GrandMa1/Dot2

Config

{"osc-port":8001,"midi":["sysex","gma_in:1,2","gma_out:0,1"],"force-gpu":true,"custom-module":"D:\\Documents\\perso\\dev\\openstagecontrol\\test-clones.js","load":"D:\\Documents\\perso\\dev\\openstagecontrol\\test-clones.json"}

Module

/*
sysex = f0 7f 70 02 01 01 31 2e 30 30 30 f7
univeral sysex = 127
device id = 112
msc = 2
command format = 1
command = 1
fader = 49
fader page = 46
fine value = 48
coarse value = 48

sysex = f0 7f 70 02 01 0a 30 2e 30 30 30 f7
univeral sysex = 127
device id = 112
msc = 2
command format = 1
command = 10
fader = 48
fader page = 46
fine value = 48
coarse value = 48

f0 7f usiversal sysex
70 device id
02 msc
01 command format (01 = general lighting)
0a command
30 2e 30 30 30 data
f7 end

=========== go 2.0 exec 2.1 ===========
0 f0 (240)
1 7f (127) universal sysex
2 7f (127) device id
3 02 (2) msc
4 01 (1) command format
5 01 (1) command
6 32 (50) ascii 2
7 2e (46) ascii .
8 30 (48) ascii 0
9 30 (48) ascii 0
10 30 (48) ascii 0
11 00 (0) ascii null
12 32 (50) ascii 2
13 2e (46) ascii .
14 31 (49) ascii 1
15 f7 (247)

=========== go 1.0 exec 2.1 ===========
0 f0 (240)
1 7f (127) universal sysex
2 7f (127) device id
3 02 (2) msc
4 01 (1) command format
5 01 (1) command (1 = goto)
6 31 (49) ascii 1
7 2e (46) ascii .
8 30 (48) ascii 0
9 30 (48) ascii 0
10 30 (48) ascii 0
11 00 (0) ascii null
12 32 (50) ascii 2
13 2e (46) ascii .
14 31 (49) ascii 1
15 f7 (247)

=========== goto 1.0 exec 2.1 ===========
0 f0 (240)
1 7f (127) universal sysex
2 7f (127) device id
3 02 (2) msc
4 01 (1) command format
5 01 (1) command (1 = goto)
6 31 (49) ascii 1
7 2e (46) .
8 30 (48) ascii 0
9 30 (48) ascii 0
10 30 (48) ascii 0
11 00 (0) ascii null
12 32 (50) ascii 2
13 2e (46) .
14 31 (49) ascii 1
15 f7 (247)

=========== off exec 2.1 ==============
0 f0 (240)
1 7f (127) universal sysex
2 7f (127) device id (127)
3 02 (2) msc
4 01 (1) command format (01 = general lighting)
5 0a (10) command (10)
6 30 (48) ascii 0
7 2e (46) .
8 30 (48) ascii 0
9 30 (48) ascii 0
10 30 (48) ascii 0
11 00 (0) ascii null
12 32 (50) ascii 2
13 2e (46) .
14 31 (49) ascii 1
15 f7 (247)

========= fader move ===============
0 f0
1 7f universal sysex
2 70 device id
3 02 msc
4 01 command format (01 = general lighting)
5 06 command (06 = set)
6 00 fader 1
7 01 page 1
8 7f 127 fine
9 7f 127 coarse
10 f7

fader value :
fader @45% =
45 * 1.28 = 57.6
coarse = 57
06 * 128 = 76.8
fine = 76
inverse =
Math.floor((new_fine_value + coarse_value) / 1.28)

osc address : /sysex
osc target : midi:gma_in
*/

INPUT_MIDI_DEVICE_NAME = 'gma_out';
OUTPUT_MIDI_DEVICE_NAME = 'gma_in';
DEBUG = false;

function faderToHex(fader_value) {
  var temp_coarse = fader_value * 1.28;
  var coarse = Math.floor(temp_coarse);
  var coarse_hex = coarse.toString(16);
  if (coarse < 16) coarse_hex = "0"+ coarse_hex;

  var coarse_decimals = (temp_coarse %1).toFixed(2);
  var temp_fine = coarse_decimals * 128;
  var fine = Math.floor(temp_fine);
  var fine_hex = fine.toString(16);
  if (fine < 16) fine_hex = "0"+ fine_hex;

  return {
    'coarse': coarse_hex,
    'fine': fine_hex
  }
}

function hexToFader(coarse, fine) {
  return Math.floor(((fine / 128) + coarse) / 1.28);
}

function moveOSCFader(host, port, address, args) {
  if (!(host === 'midi' && address === '/sysex' && port === INPUT_MIDI_DEVICE_NAME)) return;

  // hexadecimal string value
  
  var sysex_string = args[0].value
  if (DEBUG) console.log("sysex = " + sysex_string);

  // convert string to array of integers
  var ints = sysex_string.split(" ").map(x=>parseInt(x, 16))

  // parse items
  var [
    sysex_start,
    universal_sysex,
    device_id,
    msc,
    command_format,
    command,
    fader,
    fader_page,
    fine_value,
    coarse_value,
    sysex_end
  ] = ints;

  // if command = set
  if (command == 6) {
    var fader_percent = hexToFader(coarse_value, fine_value);
    if (DEBUG) console.log("fader percent = "+ fader_percent);
    receive("/fader_"+fader,fader,fader_percent);
  }
  return true;
}

function moveMaFader(host, port, address, args) {
  if (host !== 'midi' || port !== OUTPUT_MIDI_DEVICE_NAME || address === '/note') return;
  var fader_id = args[0].value,
      fader_value = Math.ceil(args[1].value),
      outArgs = [];

  var fader_id_hex = fader_id.toString(16);
  if (fader_id < 16) fader_id_hex = "0"+ fader_id_hex;

  var hex_values = faderToHex(fader_value);
  var sysex = 'f0 7f 70 02 01 06 '+ fader_id_hex+ ' 01 '+ hex_values.fine+ ' '+ hex_values.coarse+ ' f7';

  send('midi', OUTPUT_MIDI_DEVICE_NAME, '/sysex', sysex);
  return true;
}

module.exports = {

  oscInFilter: (data)=>{
    if (DEBUG) console.log("in data : "+ JSON.stringify(data, null, 2));
    var {host, port, address, args} = data;
    if (moveOSCFader(host, port, address, args)) return;
    return data
  },

  oscOutFilter: (data)=>{
    var {host, port, address, args} = data;
    //console.log("out data : "+ JSON.stringify(data, null, 2));return;
    if (moveMaFader(host, port, address, args)) return;
    return data;
  }

}

Session

{
  "createdWith": "Open Stage Control",
  "version": "1.22.0",
  "type": "session",
  "content": {
    "type": "root",
    "lock": false,
    "id": "root",
    "visible": true,
    "interaction": true,
    "comments": "",
    "width": "auto",
    "height": "auto",
    "colorText": "auto",
    "colorWidget": "auto",
    "alphaFillOn": "auto",
    "borderRadius": "auto",
    "padding": "auto",
    "html": "",
    "css": "",
    "colorBg": "auto",
    "layout": "default",
    "justify": "start",
    "gridTemplate": "",
    "contain": true,
    "scroll": true,
    "innerPadding": true,
    "verticalTabs": false,
    "hideMenu": false,
    "variables": "@{parent.variables}",
    "traversing": false,
    "value": "",
    "default": "",
    "linkId": "",
    "address": "auto",
    "preArgs": "",
    "typeTags": "",
    "decimals": 2,
    "target": "",
    "ignoreDefaults": false,
    "bypass": false,
    "onCreate": "",
    "onValue": "",
    "widgets": [],
    "tabs": [
      {
        "type": "tab",
        "lock": false,
        "id": "tab_1",
        "visible": true,
        "interaction": true,
        "comments": "",
        "colorText": "auto",
        "colorWidget": "auto",
        "colorFill": "auto",
        "borderRadius": "auto",
        "padding": "auto",
        "html": "",
        "css": "",
        "colorBg": "auto",
        "layout": "default",
        "justify": "start",
        "gridTemplate": "",
        "contain": true,
        "scroll": true,
        "innerPadding": true,
        "verticalTabs": false,
        "label": "Exec",
        "variables": "@{parent.variables}",
        "traversing": false,
        "value": "",
        "default": "",
        "linkId": "",
        "address": "auto",
        "preArgs": "",
        "typeTags": "",
        "decimals": 2,
        "target": "",
        "ignoreDefaults": false,
        "bypass": false,
        "onCreate": "",
        "onValue": "",
        "widgets": [
          {
            "type": "panel",
            "top": 10,
            "left": 20,
            "lock": false,
            "id": "panel_1",
            "visible": true,
            "interaction": true,
            "comments": "",
            "width": 1030,
            "height": 470,
            "expand": "false",
            "colorText": "auto",
            "colorWidget": "auto",
            "colorStroke": "#fdb06d",
            "colorFill": "#000000",
            "alphaStroke": "auto",
            "alphaFillOff": "auto",
            "alphaFillOn": "auto",
            "lineWidth": "auto",
            "borderRadius": 24,
            "padding": "auto",
            "html": "",
            "css": "",
            "value": "",
            "default": "",
            "linkId": "",
            "address": "auto",
            "preArgs": "",
            "typeTags": "",
            "decimals": 2,
            "target": "",
            "ignoreDefaults": false,
            "bypass": false,
            "onCreate": "",
            "onValue": "",
            "colorBg": "auto",
            "layout": "default",
            "justify": "start",
            "gridTemplate": "",
            "contain": true,
            "scroll": true,
            "innerPadding": true,
            "verticalTabs": false,
            "variables": {
              "id_start": 0
            },
            "traversing": false,
            "widgets": [
              {
                "type": "panel",
                "top": 10,
                "left": 10,
                "lock": false,
                "id": "exec_@{parent.variables.id_start}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "colorText": "auto",
                "colorWidget": "auto",
                "colorStroke": "auto",
                "colorFill": "auto",
                "alphaStroke": 0,
                "alphaFillOff": "auto",
                "alphaFillOn": "auto",
                "lineWidth": "auto",
                "borderRadius": "auto",
                "padding": "auto",
                "html": "<div>@{this.variables.name}</div>",
                "css": "",
                "colorBg": "auto",
                "layout": "default",
                "justify": "start",
                "gridTemplate": "",
                "contain": true,
                "scroll": true,
                "innerPadding": true,
                "verticalTabs": false,
                "variables": "{\n  \"button_index\": #{@{this.id}.slice(5)},\n  \"fader_index\": 0,\n  \"name\": \"Exec 0\",\n  \"button_1_label\": \"\",\n  \"button_2_label\": \"B2\",\n  \"button_3_label\": \"B3\"\n}",
                "traversing": false,
                "value": "",
                "default": "",
                "linkId": "",
                "address": "auto",
                "preArgs": "",
                "typeTags": "",
                "decimals": 2,
                "target": "",
                "ignoreDefaults": false,
                "bypass": false,
                "onCreate": "",
                "onValue": "",
                "widgets": [
                  {
                    "type": "button",
                    "top": 0,
                    "left": 0,
                    "lock": false,
                    "id": "button_3-#{@{parent.variables.button_index}+2}",
                    "visible": true,
                    "interaction": true,
                    "comments": "",
                    "width": "100%",
                    "height": "auto",
                    "expand": "false",
                    "colorText": "auto",
                    "colorWidget": "auto",
                    "colorStroke": "#fdb06d",
                    "colorFill": "#000000",
                    "alphaStroke": "auto",
                    "alphaFillOff": "auto",
                    "alphaFillOn": "auto",
                    "lineWidth": 2,
                    "borderRadius": 6,
                    "padding": "auto",
                    "html": "",
                    "css": "",
                    "colorTextOn": "auto",
                    "label": "auto",
                    "vertical": false,
                    "wrap": false,
                    "on": 1,
                    "off": 0,
                    "mode": "push",
                    "doubleTap": false,
                    "decoupled": false,
                    "value": "",
                    "default": 0,
                    "linkId": "",
                    "address": "/note",
                    "preArgs": "[\n  1,\n  #{@{parent.variables.button_index}+2}\n]",
                    "typeTags": "",
                    "decimals": 2,
                    "target": "@{gma_in}",
                    "ignoreDefaults": false,
                    "bypass": false,
                    "onCreate": "",
                    "onValue": ""
                  },
                  {
                    "type": "fader",
                    "top": 130,
                    "left": 0,
                    "lock": false,
                    "id": "fader_@{parent.variables.fader_index}",
                    "visible": true,
                    "interaction": true,
                    "comments": "",
                    "width": "100%",
                    "height": "auto",
                    "expand": "false",
                    "colorText": "auto",
                    "colorWidget": "auto",
                    "colorStroke": "#fdcf6d",
                    "colorFill": "#fdd66d",
                    "alphaStroke": "auto",
                    "alphaFillOff": "auto",
                    "alphaFillOn": "auto",
                    "lineWidth": 2,
                    "borderRadius": "auto",
                    "padding": "auto",
                    "html": "<div>@{this.value}</div>",
                    "css": "",
                    "design": "compact",
                    "knobSize": 24,
                    "horizontal": false,
                    "pips": false,
                    "dashed": false,
                    "gradient": [],
                    "snap": false,
                    "spring": false,
                    "doubleTap": false,
                    "range": {
                      "min": 0,
                      "max": 100
                    },
                    "logScale": false,
                    "sensitivity": 1,
                    "steps": "",
                    "origin": "auto",
                    "value": "",
                    "default": "",
                    "linkId": "",
                    "address": "auto",
                    "preArgs": "@{parent.variables.fader_index}",
                    "typeTags": "",
                    "decimals": 2,
                    "target": "@{gma_in}",
                    "ignoreDefaults": false,
                    "bypass": false,
                    "onCreate": "",
                    "onValue": "",
                    "onTouch": ""
                  },
                  {
                    "type": "button",
                    "top": 70,
                    "left": 0,
                    "lock": false,
                    "id": "button_2-#{@{parent.variables.button_index}+1}",
                    "visible": true,
                    "interaction": true,
                    "comments": "",
                    "width": "100%",
                    "height": "auto",
                    "expand": "false",
                    "colorText": "auto",
                    "colorWidget": "auto",
                    "colorStroke": "#fdb06d",
                    "colorFill": "#000000",
                    "alphaStroke": "auto",
                    "alphaFillOff": "auto",
                    "alphaFillOn": "auto",
                    "lineWidth": 2,
                    "borderRadius": 6,
                    "padding": "auto",
                    "html": "",
                    "css": "",
                    "colorTextOn": "auto",
                    "label": "auto",
                    "vertical": false,
                    "wrap": false,
                    "on": 1,
                    "off": 0,
                    "mode": "push",
                    "doubleTap": false,
                    "decoupled": false,
                    "value": "",
                    "default": 0,
                    "linkId": "",
                    "address": "/note",
                    "preArgs": "[\n  1,\n  #{@{parent.variables.button_index}+1}\n]",
                    "typeTags": "",
                    "decimals": 2,
                    "target": "@{gma_in}",
                    "ignoreDefaults": false,
                    "bypass": false,
                    "onCreate": "",
                    "onValue": ""
                  },
                  {
                    "type": "button",
                    "top": 340,
                    "left": 0,
                    "lock": false,
                    "id": "button_1-@{parent.variables.button_index}",
                    "visible": true,
                    "interaction": true,
                    "comments": "",
                    "width": "100%",
                    "height": "auto",
                    "expand": "false",
                    "colorText": "auto",
                    "colorWidget": "auto",
                    "colorStroke": "#fdb06d",
                    "colorFill": "#000000",
                    "alphaStroke": "auto",
                    "alphaFillOff": "auto",
                    "alphaFillOn": "auto",
                    "lineWidth": 2,
                    "borderRadius": 6,
                    "padding": "auto",
                    "html": "",
                    "css": "",
                    "colorTextOn": "auto",
                    "label": "auto",
                    "vertical": false,
                    "wrap": false,
                    "on": 1,
                    "off": 0,
                    "mode": "push",
                    "doubleTap": false,
                    "decoupled": false,
                    "value": "",
                    "default": 0,
                    "linkId": "",
                    "address": "/note",
                    "preArgs": "[\n  1,\n  @{parent.variables.button_index}\n]",
                    "typeTags": "",
                    "decimals": 2,
                    "target": "@{gma_in}",
                    "ignoreDefaults": false,
                    "bypass": false,
                    "onCreate": "",
                    "onValue": "\n"
                  }
                ],
                "tabs": []
              },
              {
                "type": "clone",
                "top": 10,
                "left": 110,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+1)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 210,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+2)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 310,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+3)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 410,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+4)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 510,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+5)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 610,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+6)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 710,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+7)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 810,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+8)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 910,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+9)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              }
            ],
            "tabs": []
          },
          {
            "type": "variable",
            "lock": false,
            "id": "gma_in",
            "comments": "",
            "value": "midi:gma_in",
            "default": "",
            "linkId": "",
            "address": "auto",
            "preArgs": "",
            "typeTags": "",
            "decimals": 2,
            "target": "",
            "ignoreDefaults": false,
            "bypass": false,
            "onCreate": "",
            "onValue": ""
          },
          {
            "type": "variable",
            "lock": false,
            "id": "gma_out",
            "comments": "",
            "value": "midi:gma_out",
            "default": "",
            "linkId": "",
            "address": "auto",
            "preArgs": "",
            "typeTags": "",
            "decimals": 2,
            "target": "",
            "ignoreDefaults": false,
            "bypass": false,
            "onCreate": "",
            "onValue": ""
          },
          {
            "type": "panel",
            "top": 500,
            "left": 20,
            "lock": false,
            "id": "panel_2",
            "visible": true,
            "interaction": true,
            "comments": "",
            "width": 1030,
            "height": 470,
            "expand": "false",
            "colorText": "auto",
            "colorWidget": "auto",
            "colorStroke": "#fdb06d",
            "colorFill": "#000000",
            "alphaStroke": "auto",
            "alphaFillOff": "auto",
            "alphaFillOn": "auto",
            "lineWidth": "auto",
            "borderRadius": 24,
            "padding": "auto",
            "html": "",
            "css": "",
            "value": "",
            "default": "",
            "linkId": "",
            "address": "auto",
            "preArgs": "",
            "typeTags": "",
            "decimals": 2,
            "target": "",
            "ignoreDefaults": false,
            "bypass": false,
            "onCreate": "",
            "onValue": "",
            "colorBg": "auto",
            "layout": "default",
            "justify": "start",
            "gridTemplate": "",
            "contain": true,
            "scroll": true,
            "innerPadding": true,
            "verticalTabs": false,
            "variables": {
              "id_start": 10
            },
            "traversing": false,
            "widgets": [
              {
                "type": "clone",
                "top": 10,
                "left": 110,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+1)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 210,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+2)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 310,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+3)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 410,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+4)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 510,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+5)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 610,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+6)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 710,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+7)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 810,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+8)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 910,
                "lock": false,
                "id": "exec_#{parseInt(@{parent.variables.id_start}+9)}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              },
              {
                "type": "clone",
                "top": 10,
                "left": 10,
                "lock": false,
                "id": "exec_@{parent.variables.id_start}",
                "visible": true,
                "interaction": true,
                "comments": "",
                "width": 100,
                "height": 440,
                "expand": "false",
                "css": "",
                "widgetId": "exec_0",
                "props": "{\n  \"variables\": { \"button_index\": #{parseInt(@{this.id}.slice(5))*3}, \"fader_index\": #{parseInt(@{this.id}.slice(5))}, \"name\": \"Exec #{@{this.id}.slice(5)}\", \"button_1_label\": \"B1\", \"button_2_label\": \"B2\", \"button_3_label\": \"B3\" }\n}",
                "address": "auto",
                "variables": "@{parent.variables}"
              }
            ],
            "tabs": []
          }
        ],
        "tabs": []
      }
    ]
  }
}

GrandMa macro

<?xml version="1.0" encoding="utf-8"?>
<MA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.malighting.de/grandma2/xml/MA" xsi:schemaLocation="http://schemas.malighting.de/grandma2/xml/MA http://schemas.malighting.de/grandma2/xml/3.9.60/MA.xsd" major_vers="3" minor_vers="9" stream_vers="60">
	<Info datetime="2023-02-02T14:45:21" showfile="new show 2023-01-14" />
	<Macro index="0" name="assign midi remotes">
		<Macroline index="0">
			<text>Delete Remote 2.1 Thru</text>
		</Macroline>
		<Macroline index="1">
			<text>Assign Remote 2.1 /note=0 /type=exec /executor=1 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="2">
			<text>Assign Remote 2.2 /note=1 /type=exec /executor=1 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="3">
			<text>Assign Remote 2.3 /note=2 /type=exec /executor=1 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="4">
			<text>Assign Remote 2.4 /note=3 /type=exec /executor=2 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="5">
			<text>Assign Remote 2.5 /note=4 /type=exec /executor=2 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="6">
			<text>Assign Remote 2.6 /note=5 /type=exec /executor=2 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="7">
			<text>Assign Remote 2.7 /note=6 /type=exec /executor=3 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="8">
			<text>Assign Remote 2.8 /note=7 /type=exec /executor=3 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="9">
			<text>Assign Remote 2.9 /note=8 /type=exec /executor=3 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="10">
			<text>Assign Remote 2.10 /note=9 /type=exec /executor=4 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="11">
			<text>Assign Remote 2.11 /note=10 /type=exec /executor=4 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="12">
			<text>Assign Remote 2.12 /note=11 /type=exec /executor=4 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="13">
			<text>Assign Remote 2.13 /note=12 /type=exec /executor=5 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="14">
			<text>Assign Remote 2.14 /note=13 /type=exec /executor=5 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="15">
			<text>Assign Remote 2.15 /note=14 /type=exec /executor=5 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="16">
			<text>Assign Remote 2.16 /note=15 /type=exec /executor=6 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="17">
			<text>Assign Remote 2.17 /note=16 /type=exec /executor=6 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="18">
			<text>Assign Remote 2.18 /note=17 /type=exec /executor=6 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="19">
			<text>Assign Remote 2.19 /note=18 /type=exec /executor=7 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="20">
			<text>Assign Remote 2.20 /note=19 /type=exec /executor=7 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="21">
			<text>Assign Remote 2.21 /note=20 /type=exec /executor=7 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="22">
			<text>Assign Remote 2.22 /note=21 /type=exec /executor=8 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="23">
			<text>Assign Remote 2.23 /note=22 /type=exec /executor=8 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="24">
			<text>Assign Remote 2.24 /note=23 /type=exec /executor=8 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="25">
			<text>Assign Remote 2.25 /note=24 /type=exec /executor=9 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="26">
			<text>Assign Remote 2.26 /note=25 /type=exec /executor=9 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="27">
			<text>Assign Remote 2.27 /note=26 /type=exec /executor=9 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="28">
			<text>Assign Remote 2.28 /note=27 /type=exec /executor=10 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="29">
			<text>Assign Remote 2.29 /note=28 /type=exec /executor=10 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="30">
			<text>Assign Remote 2.30 /note=29 /type=exec /executor=10 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="31">
			<text>Assign Remote 2.31 /note=30 /type=exec /executor=11 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="32">
			<text>Assign Remote 2.32 /note=31 /type=exec /executor=11 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="33">
			<text>Assign Remote 2.33 /note=32 /type=exec /executor=11 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="34">
			<text>Assign Remote 2.34 /note=33 /type=exec /executor=12 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="35">
			<text>Assign Remote 2.35 /note=34 /type=exec /executor=12 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="36">
			<text>Assign Remote 2.36 /note=35 /type=exec /executor=12 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="37">
			<text>Assign Remote 2.37 /note=36 /type=exec /executor=13 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="38">
			<text>Assign Remote 2.38 /note=37 /type=exec /executor=13 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="39">
			<text>Assign Remote 2.39 /note=38 /type=exec /executor=13 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="40">
			<text>Assign Remote 2.40 /note=39 /type=exec /executor=14 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="41">
			<text>Assign Remote 2.41 /note=40 /type=exec /executor=14 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="42">
			<text>Assign Remote 2.42 /note=41 /type=exec /executor=14 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="43">
			<text>Assign Remote 2.43 /note=42 /type=exec /executor=15 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="44">
			<text>Assign Remote 2.44 /note=43 /type=exec /executor=15 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="45">
			<text>Assign Remote 2.45 /note=44 /type=exec /executor=15 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="46">
			<text>Assign Remote 2.46 /note=45 /type=exec /executor=16 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="47">
			<text>Assign Remote 2.47 /note=46 /type=exec /executor=16 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="48">
			<text>Assign Remote 2.48 /note=47 /type=exec /executor=16 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="49">
			<text>Assign Remote 2.49 /note=48 /type=exec /executor=17 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="50">
			<text>Assign Remote 2.50 /note=49 /type=exec /executor=17 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="51">
			<text>Assign Remote 2.51 /note=50 /type=exec /executor=17 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="52">
			<text>Assign Remote 2.52 /note=51 /type=exec /executor=18 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="53">
			<text>Assign Remote 2.53 /note=52 /type=exec /executor=18 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="54">
			<text>Assign Remote 2.54 /note=53 /type=exec /executor=18 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="55">
			<text>Assign Remote 2.55 /note=54 /type=exec /executor=19 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="56">
			<text>Assign Remote 2.56 /note=55 /type=exec /executor=19 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="57">
			<text>Assign Remote 2.57 /note=56 /type=exec /executor=19 /Button=&quot;Button 3&quot;</text>
		</Macroline>
		<Macroline index="58">
			<text>Assign Remote 2.58 /note=57 /type=exec /executor=20 /Button=&quot;Button 1&quot;</text>
		</Macroline>
		<Macroline index="59">
			<text>Assign Remote 2.59 /note=58 /type=exec /executor=20 /Button=&quot;Button 2&quot;</text>
		</Macroline>
		<Macroline index="60">
			<text>Assign Remote 2.60 /note=59 /type=exec /executor=20 /Button=&quot;Button 3&quot;</text>
		</Macroline>
	</Macro>
</MA>

openstagecontrol.txt · Last modified: by ssm2017