我一直在尝试使用midi.js http://mudcu.be/midi-js/
我尝试过寻找一个发布有关使用它的问题的地方,但没有找到任何地方,所以我将在这里尝试。
图书馆第一关很棒。
我正在尝试仅发出鼓声来触发,但它不起作用。我可以从“acoustic_grand_piano”获得其他音符,而不仅仅是“synth_drum”来触发。
我认为,MIDI音符35应该与“低音提琴鼓”有关。
使用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);
}
});
};
最佳答案
在播放“synth_drum”声音之前,您必须将该乐器加载到 channel 中。这是通过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加载到 channel 0中。
您可以找到乐器映射列表in the MIDI.js source。
MIDI.GeneralMIDI
中还有一些方便的函数,这些函数将获取仪器信息byName,byId和byCategory。关于javascript - 使用基于JavaScript浏览器的midi.js来创建鼓声吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17767387/