1

外部 MIDI キーボードで演奏しているノートをブラウザーにグラフィカルに表示する、実験的な Web MIDI アプリを作成しています。コンソールにログを記録した場合にのみ、次のコールバックが機能するという奇妙なエラーが発生しています。

// ============================================================================
// Web MIDI API
// ============================================================================
var MIDI = null;

$(document ).ready(function(){

  function onMIDISuccess( midiAccess )
  {
    MIDI = midiAccess;

    // Start listening to the MIDI ports!
    var selected_input = MIDI.inputs()[0];
    console.log( selected_input );
    selected_input.onmidimessage = function( event )
    {
      if( event.data[0] == 144 )
      {
        // Zero velocity means note OFF
        if( event.data[2] == 0 )
          $("pianokey[note="+event.data[1]+"]" ).removeClass("active");

        // Non-zero velocity means note ON
        else
          $("pianokey[note="+event.data[1]+"]" ).addClass("active");
      }
    };
  }

  function onMIDIFailure( error )
  {
    console.error( "MIDI Failed! Error: ", error );
  }

  navigator.requestMIDIAccess().then( onMIDISuccess, onMIDIFailure );

});

私が見つけたのは、私のコードが機能するということですが、その行console.log( selected_input );が含まれている場合に限られます。

私のフィドルを実行することで、私が何を意味するのかを最も簡単に確認できます: http://jsfiddle.net/8sSMe/1/

外部 MIDI キーボードが接続されている場合は、キーボードで演奏しているものを模倣して、画面上のキーが点灯するはずです。キーボードを選択するために chrome を再起動する必要がある場合や、配列から別の入力を選択する必要がある場合があることを覚えておいてくださいselected_input。また、chrome://flags/#enable-web-midi に移動して、Chrome で Web MIDI をオンにする必要がある場合もあります (これを Chrome で動作させることだけに関心があります)。動作していることを確認したら、console.log( selected_input );コメントアウトして試してみると、奇妙に動作しなくなります。

何か案は?

4

2 に答える 2

0

このコードで私にも何か奇妙なことが起こりました.MIDI がnullであると言ったconsole.log(MIDI)直後に実行navigator...すると. しかし、ページがロードされた直後にコンソール入力で MIDI を呼び出すと、null 以外の MIDI オブジェクトを取得できます。

非同期呼び出し?

于 2014-11-28T17:42:58.863 に答える