1

接続されている MIDI 入力デバイスを一覧表示する簡単なスクリプトを作成しました。これは Windows 上の Chrome では問題なく動作しますが、Mac 上の Chrome では「未定義のプロパティ名を読み取れません」というエラーが表示されて失敗します。これは、w3c.org の例からコードをコピーして貼り付けた場合にも発生します: http://www.w3.org/TR/webmidi/#listing-inputs-and-outputs

これが私のコードです:

var midiTest = {
  midiAcess: null,
  init: function() {
    function onMIDISuccess(midiAccess) {
      console.log(midiAccess);
      var inputDeviceCount = midiAccess.inputs.size;
      if(inputDeviceCount > 0) {
        for(var i=0; i<inputDeviceCount; i++) {
          var input = midiAccess.inputs.get(i);
          var deviceName = input.name;
          console.log(deviceName);
        }
      }
    }
    function onMIDIFailure(e) {
      console.log('No access to MIDI devices' + e);
    }
    if(navigator.requestMIDIAccess)
      navigator.requestMIDIAccess({ sysex: false }).then(onMIDISuccess, onMIDIFailure);
    else
      alert("No MIDI support in your browser.");
  },
};

midiTest.init();

console.log(midiAccess) は正常に動作します。ここで何が起こっているのか分かりますか?

4

3 に答える 3

3

ループを次のように交換することで、現在は機能しています。

var inputs=midiAccess.inputs.values();

for ( var input = inputs.next(); input && !input.done; input = inputs.next()) {
    var deviceName = input.value.name;
    console.log(deviceName);
}

これは mac と windows で動作しますが、前のコードが動作しなかった理由はわかりません。

于 2015-12-04T12:53:59.620 に答える
2

私は少し遅れているかもしれませんがmidiAccess.inputsforEach方法があります:

midiAccess.inputs.forEach(function (input) {
    console.log(input.name);
});
于 2016-04-10T19:45:50.623 に答える