我正在构建一个实验性的 Web MIDI 应用程序,它以图形方式向浏览器显示您在外部 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 );
注释掉的情况下尝试它,它会奇怪地停止工作。
有任何想法吗?