首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么此Web MIDI API代码无法检测MIDI事件?

为什么此Web MIDI API代码无法检测MIDI事件?
EN

Stack Overflow用户
提问于 2015-05-27 13:14:10
回答 1查看 1.1K关注 0票数 3

我正在写一个Chrome应用程序,使用当前稳定版本的Chrome (42.0.2311.152)。我在Linux和我的Chromebook上都遇到了这个问题。

我有一个可以识别的USB MIDI键盘,但没有检测到MIDI事件。我已经检查过其他程序,并确定我的设备正在发送MIDI事件。

下面是我的代码:

代码语言:javascript
复制
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();
};

我得到的控制台输出是:

代码语言:javascript
复制
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键盘上的键时,没有检测到任何事件。

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2015-06-11 10:42:53

http://caniuse.com/#feat=midi称,Chrome43增加了对MIDI的支持。要让web MIDI在旧版本的chrome中工作,你需要在chrome设置中启用它作为一个“实验功能”,并且你需要安装jazz插件http://jazz-soft.net/doc/Jazz-Plugin/

我已经经历了让“实验性”MIDI在我的电脑上工作的困难,但在你的情况下,更新浏览器可能是最简单的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30473683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档