Skip to content

A node.js interface for sending and receiving Midi Show Control messages

License

Notifications You must be signed in to change notification settings

benwilhelm/node-midi-show-control

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Installation

npm install midi-show-control

Usage

buildMessage()

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()

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"
	// }
})

Message Options

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.

Available Command Formats

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

Available Commands

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

About

A node.js interface for sending and receiving Midi Show Control messages

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published