使用基于javascript浏览器的midi.js创建鼓声?
我一直在尝试使用midi.js 我试着找一个地方张贴关于使用它的问题,但没有找到,所以我打算在这里试试 第一关图书馆工作得很好 我试着让一个鼓声触发,但它不起作用。我可以从“原声钢琴”中得到其他的音符,但不仅仅是“合成鼓” 我认为midi音符35应该与“原声低音鼓”有关 使用demo-Basic.html中的示例使用基于javascript浏览器的midi.js创建鼓声?,javascript,midi,Javascript,Midi,我一直在尝试使用midi.js 我试着找一个地方张贴关于使用它的问题,但没有找到,所以我打算在这里试试 第一关图书馆工作得很好 我试着让一个鼓声触发,但它不起作用。我可以从“原声钢琴”中得到其他的音符,但不仅仅是“合成鼓” 我认为midi音符35应该与“原声低音鼓”有关 使用demo-Basic.html中的示例 window.onload = function () { MIDI.loadPlugin({ soundfontUrl: "./soundfont/",
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_鼓”声音之前,您必须将该乐器加载到一个通道中。这是通过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)为每种乐器指定特定的名称和编号。在MIDI规范中查找“Synth Drum”给出的乐器编号为118,因此需要将118加载到通道0中
您可以找到仪器映射的列表。
MIDI.GeneralMIDI
中还有一些方便的函数,可以按名称、按ID和按类别获取乐器信息。发送到通道10?大多数MIDI GM合成器都希望鼓点位于第10频道。不幸的是,我不认为MIDI.js库以这种方式使用这些频道。@DonavonLerman您找到解决这个问题的方法了吗?@Amruta:Nope..@DonavonLerman看起来创建您自己的soundfont.js文件是唯一的解决方案。如果您可以获得一些mp3文件,请使用base64进行转换,并手工制作一个soundfont.js文件。这有点乏味,但我认为它就是这样。Synth drum不是一个有原始问题提到的音符到声音映射的鼓套件(35=原声低音鼓等)。