我一直在尝试使用midi.js http://mudcu.be/midi-js/
我一直在寻找一个地方发布有关使用它的问题,但没有找到,所以我将尝试在这里..
图书馆第一次工作很棒。
我正试图让一个鼓声只能触发,但它无法正常工作。我可以从“acoustic_grand_piano”获取其他音符,但不能仅从“synth_drum”触发。
我认为midi音符35应该与“Acoustic Bass Drum”有关。
使用demo-Basic.html中的示例
window.onload = function () {
MIDI.loadPlugin({
soundfontUrl: "./soundfont/",
instrument: "synth_drum",
callback: function() {
var delay = 0; // play one note every quarter second
var note = 35; // the MIDI note
var velocity = 127; // how hard the note hits
// play the note
MIDI.setVolume(0, 127);
MIDI.noteOn(0, note, velocity, delay);
MIDI.noteOff(0, note, delay + 0.75);
}
});
};
答案 0 :(得分:3)
在播放“synth_drum”声音之前,您必须将该乐器加载到频道中。这是通过programChange
函数完成的。正确的方法如下。
MIDI.loadPlugin({
soundfontUrl: "/apps/spaceharp/static/soundfont/",
instrument: "synth_drum",
callback: function() {
var delay = 0; // play one note every quarter second
var note = 35; // the MIDI note
var velocity = 127; // how hard the note hits
// play the note
MIDI.programChange(0, 118); // Load "synth_drum" (118) into channel 0
MIDI.setVolume(0, 127);
MIDI.noteOn(0, note, velocity, delay); // Play note on channel 0
MIDI.noteOff(0, note, delay + 0.75); // Stop note on channel 0
}
});
MIDI standardized specification(或通用MIDI)为每个乐器指定一个特定的名称和编号。在MIDI规范中查找“Synth Drum”会给出一个118的乐器编号,因此需要将118加载到通道0中。
您可以找到工具映射列表in the MIDI.js source。 MIDI.GeneralMIDI
中还有一些方便的函数可以通过Name,byId和byCategory获取工具信息。