I am using WebMidi in a react app and can't figure out how to selectively remove listeners. I have to remove all of the listeners for a particular input.
Does anybody know how to remove listeners one at a time? I need to leave a listener for cc's open while turning another listener for step record on and off.
const startMidiListeners = () => {
var recordListeners: Array<any> = []
for (const input of WebMidi.inputs) {
const listeners = input.addListener("midimessage", e => {
console.log('received midimessage')
}, {});
if (typeof listeners == "object") {
console.log(`startMidiListeners - added single listener: ${typeof listeners}`);
recordListeners.push(listeners)
} else {
console.log(`startMidiListeners - added multiple listeners: ${typeof listeners}`);
recordListeners.concat(listeners)
}
}
setRecordListeners(recordListeners)
}
const stopMidiListeners = () => {
console.log(`stopMidiListeners - stop ${recordListeners.length} listeners`);
// This doesn't remove the listener
for (const recordListener in recordListeners) {
console.log('remove listener')
WebMidi.removeListener(WebMidi.eventMap.midimessage, recordListener)
}
// I have to do this to stop getting callbacks
// for (var inputNum = 0; inputNum < WebMidi.inputs.length; inputNum++) {
// WebMidi.inputs[inputNum].removeListener()
// }
setRecordListeners([])
}