Encapsulate more logic
This commit is contained in:
parent
dab1a018e4
commit
bb7f587025
1 changed files with 25 additions and 15 deletions
|
|
@ -524,10 +524,8 @@ class MidiInput {
|
||||||
await new Promise((resolve) => setTimeout(resolve, 2000));
|
await new Promise((resolve) => setTimeout(resolve, 2000));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const output = WebMidi.outputs.find((o) => o.name === device.name);
|
// Still continue if sending did not work
|
||||||
if (output) {
|
this._sendAllStates(device);
|
||||||
this._sendAllStates(output);
|
|
||||||
}
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('midiin: failed to send last state on connect:', device.name, err);
|
console.error('midiin: failed to send last state on connect:', device.name, err);
|
||||||
}
|
}
|
||||||
|
|
@ -535,16 +533,10 @@ class MidiInput {
|
||||||
// Listen for incoming MIDI messages and for disconnection
|
// Listen for incoming MIDI messages and for disconnection
|
||||||
device.addListener('midimessage', midiListener);
|
device.addListener('midimessage', midiListener);
|
||||||
|
|
||||||
await new Promise((resolve) => {
|
await this._waitForDeviceDisconnect(device);
|
||||||
const disconnectListener = (e) => {
|
|
||||||
if (e.port.name === device.name) {
|
console.warn('midiin: device disconnected:', device.name);
|
||||||
console.warn('midiin: device disconnected:', device.name);
|
device.removeListener('midimessage', midiListener);
|
||||||
WebMidi.removeListener('disconnected', disconnectListener);
|
|
||||||
resolve();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
WebMidi.addListener('disconnected', disconnectListener);
|
|
||||||
});
|
|
||||||
|
|
||||||
device = null; // Clear var to trigger wait for connection
|
device = null; // Clear var to trigger wait for connection
|
||||||
}
|
}
|
||||||
|
|
@ -567,6 +559,19 @@ class MidiInput {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_waitForDeviceDisconnect(device) {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const disconnListener = (e) => {
|
||||||
|
if (e.port.name === device.name) {
|
||||||
|
WebMidi.removeListener('disconnected', disconnListener);
|
||||||
|
resolve();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
WebMidi.addListener('disconnected', disconnListener);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
_onMidiMessage(e) {
|
_onMidiMessage(e) {
|
||||||
const ccNum = e.dataBytes[0];
|
const ccNum = e.dataBytes[0];
|
||||||
const v = e.dataBytes[1];
|
const v = e.dataBytes[1];
|
||||||
|
|
@ -627,7 +632,12 @@ class MidiInput {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
_sendAllStates(output) {
|
_sendAllStates(device) {
|
||||||
|
const output = WebMidi.outputs.find((o) => o.name === device.name);
|
||||||
|
if (!output) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (const [chan, refs] of Object.entries(this._refsByChan)) {
|
for (const [chan, refs] of Object.entries(this._refsByChan)) {
|
||||||
const channel = Number(chan);
|
const channel = Number(chan);
|
||||||
for (const [cc, value] of Object.entries(refs)) {
|
for (const [cc, value] of Object.entries(refs)) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue