mosaicode-javascript-webaudio/blocks/MIDI/MIDI.json

31 lines
2.5 KiB
JSON

{
"source": "JSON",
"data": "BLOCK",
"version": "0.0.1",
"type": "midi",
"language": "javascript",
"extension": "webaudio",
"help": "MIDI",
"label": "MIDI",
"color": "250:250:0:150",
"group": "MIDI",
"codes": {
"function": "\n// request MIDI access\n\nif (navigator.requestMIDIAccess) {\n navigator.requestMIDIAccess({sysex: false}).then(MidiSuccess, MidiFailure);\n} else {\n alert(\"No MIDI support in your browser.\");\n}\n\n// midi functions\nfunction MidiSuccess(midi) {\n // when we get a succesful response, run this code\n console.log('MIDI Access Object', midi);\n var inputs = midi.inputs.values();\n\n for (var input = inputs.next(); input && !input.done; input = inputs.next()) {\n // each time there is a midi message call the onMIDIMessage function\n input.value.onmidimessage = MidiMessage;\n }\n}\n\nfunction MidiFailure(e) {\n // when we get a failed response, run this code\n message = \"No access to MIDI devices or your browser doesn't support WebMIDI API. Please use WebMIDIAPIShim \" + e;\n console.log(message);\n alert(message);\n}\n\n// Variable to keep output ports\nvar note_output = [];\nvar control_output = [];\n\nfunction MidiMessage (message) {\n //Note On\n if((message.data[0] == 144 && message.data[2] > 0) ||\n // Note Off\n (message.data[0] === 128 || (message.data[0] == 144 && message.data[2] === 0))\n ){\n for (var i = 0; i < note_output.length ; i++)\n for (var j = 0; j < note_output[i].length ; j++)\n note_output[i][j]([message.data[1],message.data[2]]);\n }\n\n\n //Ctrl\n if (message.data[0] === 176 ){\n for (var i = 0; i < control_output.length ; i++)\n for (var j = 0; j < control_output[i].length ; j++)\n control_output[i][j]([message.data[1],message.data[2]]);\n }\n // Not used\n // (message.data[0] === 176 )//Drum pad\n // (message.data[0] === 208 )//Aftertouch\n}\n\n\n",
"declaration": "\n// block_$id$ = Mouse\nvar $port[note]$ = [];\nvar $port[control]$ = [];\nnote_output.push($port[note]$);\ncontrol_output.push($port[control]$);\n"
},
"properties": [],
"ports": [
{
"type": "mosaicode_lib_javascript_webaudio.extensions.ports.midi",
"label": "Note",
"conn_type": "Output",
"name": "note"
},
{
"type": "mosaicode_lib_javascript_webaudio.extensions.ports.midi",
"label": "Control",
"conn_type": "Output",
"name": "control"
}
]
}