2015-05-27 2 views
3

Я пишу приложение Chrome, используя текущую стабильную сборку Chrome (42.0.2311.152). У меня есть эта проблема как на Linux, так и на моем Chromebook.Почему этот код Web MIDI API не обнаруживает события MIDI?

У меня есть USB-MIDI-клавиатура, которая распознается, но никаких MIDI-событий не обнаружено. Я проверил с другими программами и уверен, что мое устройство отправляет MIDI-события.

Вот мой код:

function midihandler(event) { 
    console.log("Received MIDI event"); 
    var msg = "Recieved MIDI event "; 
    for (i=0 ; i < event.data.length ; i++) { 
    msg += "0x" + event.data[i].toString(16) + " "; 
    } 
    console.log(msg); 
} 

function setupMIDI() { 
    navigator.requestMIDIAccess().then(
    function (m) { 
     console.log("MIDI initialized"); 
     m.inputs.forEach(
     function (entry) { 
      console.log("detected MIDI input device " + entry.name); 
      entry.onmidimessage = midihandler; 
      for (var key in entry) { 
      console.log("entry." + key + " = " + entry[key]); 
      } 
     } 
    ); 
    }, 
    function (msg) { console.log("error initializing MIDI: " + msg); } 
    ); 
} 


window.onload = function() { 
    console.log("window.onload called"); 
    setupMIDI(); 
}; 

Выход консоли я получаю:

window.onload called 
MIDI initialized 
detected MIDI input device MPKmini2 MIDI 1 
entry.onmidimessage = function midihandler(event) { 
    console.log("Received MIDI event"); 
    var msg = "Recieved MIDI event "; 
    for (i=0 ; i < event.data.length ; i++) { 
    msg += "0x" + event.data[i].toString(16) + " "; 
    } 
    console.log(msg); 
} 
entry.ondisconnect = null 
entry.version = USB-Audio/ALSA library version 1.0.25 
entry.type = input 
entry.name = MPKmini2 MIDI 1 
entry.manufacturer = AKAI 
entry.id = 24:0 MPKmini2 MIDI 1 
entry.addEventListener = function addEventListener() { [native code] } 
entry.removeEventListener = function removeEventListener() { [native code] } 
entry.dispatchEvent = function dispatchEvent() { [native code] } 
detected MIDI input device Midi Through Port-0 
entry.onmidimessage = function midihandler(event) { 
    console.log("Received MIDI event"); 
    var msg = "Recieved MIDI event "; 
    for (i=0 ; i < event.data.length ; i++) { 
    msg += "0x" + event.data[i].toString(16) + " "; 
    } 
    console.log(msg); 
} 
entry.ondisconnect = null 
entry.version = ALSA library version 1.0.25 
entry.type = input 
entry.name = Midi Through Port-0 
entry.manufacturer = 
entry.id = 14:0 Midi Through Port-0 
entry.addEventListener = function addEventListener() { [native code] } 
entry.removeEventListener = function removeEventListener() { [native code] } 
entry.dispatchEvent = function dispatchEvent() { [native code] } 

То есть, устройства распознаются, и появляется onmidimessage обработчик должен быть установлен.

Тем не менее, никаких событий не обнаружено, когда я нажимаю клавиши на моей MIDI-клавиатуре.

Что я делаю неправильно?

+0

Получаете ли вы правильный канал MIDI? Действительно ли клавиатура передает на этом канале? –

+0

Мое чтение [spec] (http://webaudio.github.io/web-midi-api/) заставило меня поверить, что все полученные MIDI-сообщения должны вызывать обработчик независимо от MIDI-канала. Конечно, я мог ошибаться. – fcahoon

+0

Мой опыт работы с MIDI в целом заключается в том, что принимающее устройство может фильтровать по каналу. Проверьте документацию вашего приемного устройства и посмотрите, нужно ли его запрограммировать для указания канала приема или если вы можете установить его в OMNI (принимать по всем каналам). –

ответ

2

Согласно http://caniuse.com/#feat=midi, в Chrome 43 была добавлена ​​поддержка MIDI. Чтобы получить работу в формате MIDI в более старых версиях хром, вам необходимо включить его в качестве «экспериментальной функции» в настройках хрома, и вам необходимо установить джаз плагин http://jazz-soft.net/doc/Jazz-Plugin/.

Я перепрыгнул через обручи, чтобы получить «экспериментальный» MIDI, работающий на моем компьютере, но в вашем случае, возможно, будет проще всего обновить ваш браузер.

Смежные вопросы