0.2.3 • Published 9 years ago
web-midi-test-api v0.2.3
web-midi-test-api
Web MIDI API for CI
API
Static methods
requestMIDIAccess(opts = {}): Promise<MIDIAccess>opts.sysex: boolean
createMIDIDevice(opts = {}): MIDIDevice- create a mock MIDI instrument and register it to api
opts.numberOfInputs: numbernumber of input MIDI ports - default: 1opts.numberOfOutputs: numbernumber of output MIDI ports - default: 1opts.manufacturer: stringdefault: ""opts.name: stringdefault: "Web MIDI Test API"
devices: MIDIDevice[]- all registered MIDIDevices
inputs: MIDIPort[]- all registered input MIDIPorts
outputs: MIDIPort[]- all registered output MIDIPorts
MIDIDevice
MIDIDevice is a mock of MIDI instrument (e.g. hardware/software synthesizer or DAW).
Instance attributes
manufacturer: stringname: stringversion: stringstate: stringnumberOfInputs: numbernumberOfOutputs: numberinputs: MIDIPort[]outputs: MIDIPort[]
Instance methods
connect(): voiddisconnect(): void
MIDIPort
MIDIPort is a mock of MIDI messaging port.
Instance attributes
id: stringmanufacturer: stringname: stringtype: string("input" or "output")version: stringstate: stringonmidimessage: function
Instance methods
send(data: number[], [timestamp: number]): void
How to use
MIDI-IN (test mock -> WebMIDIAPI)
const api = require("web-midi-test-api");
const device = api.createMIDIDevice();
api.requestMIDIAccess().then((access) => {
const input = access.inputs.values().next().value;
input.onmidimessage = sinon.spy();
device.outputs[0].send([ 0x90, 0x30, 0x64 ]);
const message = input.onmidimessage.args[0][0].data;
assert.deepEqual(message, new Uint8Array([ 0x90, 0x30, 0x64 ]));
});MIDI-OUT (WebMIDIAPI -> test mock)
const api = require("web-midi-test-api");
const device = api.createMIDIDevice();
device.inputs[0].onmidimessage = sinon.spy();
api.requestMIDIAccess().then((access) => {
const output = access.outputs.values().next().value;
output.send([ 0x90, 0x00, 0x00 ]);
const message = device.inputs[0].onmidimessage.args[0][0].data;
assert.deepEqual(message, new Uint8Array([ 0x90, 0x00, 0x00 ]));
});STATE CHANGE
const api = require("web-midi-test-api");
const device = api.createMIDIDevice();
let input;
api.requestMIDIAccess().then((access) => {
input = access.inputs.values().next().value;
assert(input.state === "connected");
assert(input.connection === "closed");
return input.open();
}).then(() => {
assert(input.state === "connected");
assert(input.connection === "open");
return device.disconnect();
}).then(() => {
assert(input.state === "disconnected");
assert(input.connection === "closed");
return device.connect();
}).then(function() {
assert(input.state === "connected");
assert(input.connection === "open");
});License
MIT