web-midi-test-api
v0.2.3
Published
Web MIDI API for CI
Downloads
15
Readme
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: number
number of input MIDI ports - default: 1opts.numberOfOutputs: number
number of output MIDI ports - default: 1opts.manufacturer: string
default: ""opts.name: string
default: "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: string
name: string
version: string
state: string
numberOfInputs: number
numberOfOutputs: number
inputs: MIDIPort[]
outputs: MIDIPort[]
Instance methods
connect(): void
disconnect(): void
MIDIPort
MIDIPort
is a mock of MIDI messaging port.
Instance attributes
id: string
manufacturer: string
name: string
type: string
("input" or "output")version: string
state: string
onmidimessage: 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