Я работаю над онлайн-инструктором по чтению нот, прототип доступен здесь . Мне удалось реализовать доступ к ранее подключенной MIDI-клавиатуре, однако я изо всех сил пытаюсь реализовать сценарий «горячего подключения / отключения».
Мой последний дубль выглядит так:
setupDevices(inputs){
let deviceName = '';
inputs.forEach((value, key, map) => {
if (value.connection === 'open' || value.connection === 'pending' ){
value.open().then((midiInput) => {
console.log(`Opened ${midiInput.name}`);
midiInput.onmidimessage = midiController.onMIDIMessage;
}, null);
} else {
value.onmidimessage = null;
}
});
if (deviceName.length === 0) {
deviceName = 'none';
}
document.getElementById('connectedDevice').setAttribute('value', deviceName);
},
onMIDISuccess(midiAccess) {
midiAccess.onstatechange = (evt) => {
console.log('MIDI config changed');
midiController.setupDevices(evt.currentTarget.inputs);
};
}
При отладке все обещания вызываются с хорошо выглядящими аргументами, но я не могу получить никаких сообщений о ключах. Также console.log (Opened ${midiInput.name}
) вызывается намного чаще, чем ожидалось:
midiController.js:57 MIDI config changed
midiController.js:40 Opened KOMPLETE KONTROL - 1
midiController.js:57 MIDI config changed
midiController.js:40 Opened KOMPLETE KONTROL - 1
midiController.js:57 MIDI config changed
midiController.js:40 Opened KOMPLETE KONTROL - 1
midiController.js:40 Opened KOMPLETE KONTROL EXT - 1
midiController.js:40 Opened KOMPLETE KONTROL - 1
3
midiController.js:40 Opened KOMPLETE KONTROL EXT - 1
midiController.js:57 MIDI config changed
midiController.js:40 Opened KOMPLETE KONTROL - 1
midiController.js:40 Opened KOMPLETE KONTROL EXT - 1
midiController.js:57 MIDI config changed
midiController.js:40 Opened KOMPLETE KONTROL - 1
midiController.js:40 Opened KOMPLETE KONTROL EXT - 1
2
midiController.js:40 Opened Komplete Kontrol DAW - 1
midiController.js:57 MIDI config changed
midiController.js:40 Opened KOMPLETE KONTROL - 1
midiController.js:40 Opened KOMPLETE KONTROL EXT - 1
midiController.js:57 MIDI config changed
midiController.js:40 Opened KOMPLETE KONTROL - 1
midiController.js:40 Opened KOMPLETE KONTROL EXT - 1
(все это печатается сразу после того, как я только что включил контроллер). Есть намеки?