This small library to make working with MIDI Show Control messages easier.
PLEASE NOTE
Version 2 no longer includes a MIDI library. This library is simply a few methods for translating byte arrays to options objects and vice versa. You can use any MIDI Library which supports SysEx messages.
npm install midi-show-control
Takes an object of human-readable values and converts to a MIDI SysEx message.
const msc = require('midi-show-control')
const midiOutput = require('some-midi-library').output
const message = msc.buildMessage({
deviceId: 1,
commandFormat: "sound.general",
command: "go",
cue: "25.5",
cueList: "3.1",
cuePath: "1.9"
})
midiOutput.send(message)
The sent MIDI message in the example above would be:
[
0xF0, // indicates sysex message
0x7F, // indicates sysex message
0x01, // deviceId
0x02, // defines message as msc
0x10, // commandFormat
0x01, // command
0x32, 0x35, 0x2E, 0x35, // cue - 25.5
0x00, // delimiter
0x33, 0x2E, 0x31, // cue list 3.1
0x00, // delimiter
0x31, 0x2E, 0x39, // cue path 1.9
0xF7
]
parseMessage()
does the reverse of buildMessage()
. It takes an incoming MIDI message (a byte array) and returns an object of human-readable values
const msc = require('midi-show-control')
const midiInput = require('some-midi-library').output
midiInput.on('message', (msg) => {
const parsedMessage = msc.parseMessage(msg)
doSomethingWith(parsedMessage)
// parsed Message would be something similar to
// {
// deviceId: 1,
// commandFormat: "sound.general",
// command: "go",
// cue: "25.5",
// cueList: "3.1",
// cuePath: "1.9"
// }
})
These are the available properties on the message options object:
-
deviceId: REQUIRED - The id of the device that the message is intended for.
- integer between 0 (0x00) and 111 (0x6F) targets a specific device
- "G1" through "G15" will target a groups 1 through 15 respectively, and correspond to sending a midi device ID of 0x70 to 0x7E
- "all" will target all devices, and corresponds to a midi deviceId of 0x7F
-
commandFormat: REQUIRED - The command format of the message, eg "lighting.general" or "all". See below for available formats.
-
command: REQUIRED - The specific command to issue, eg. "go", "stop", or "resume". See below for available commands.
-
cue: optional - The cue to issue the command to.
-
cueList: optional - The cue list on which to find the cue.
-
cuePath: optional - From which of the available media the cueList should be pulled.
Currently, only the "general" subcategory of each category is implemented
hex | decimal | Command Format |
---|---|---|
0x01 |
1 |
lighting.general |
0x10 |
16 |
sound.general |
0x20 |
32 |
machinery.general |
0x30 |
48 |
video.general |
0x40 |
64 |
projection.general |
0x50 |
80 |
processControl.general |
0x60 |
96 |
pyro.general |
0x7f |
127 |
all |
hex | decimal | Command |
---|---|---|
0x01 |
1 |
go |
0x02 |
2 |
stop |
0x03 |
3 |
resume |
0x04 |
4 |
timedGo |
0x05 |
5 |
load |
0x06 |
6 |
set |
0x07 |
7 |
fire |
0x08 |
8 |
allOff |
0x09 |
9 |
restore |
0x0a |
10 |
reset |
0x0b |
11 |
goOf |