使用基于javascript浏览器的midi.js创建鼓声?

使用基于javascript浏览器的midi.js创建鼓声?,javascript,midi,Javascript,Midi,我一直在尝试使用midi.js 我试着找一个地方张贴关于使用它的问题,但没有找到,所以我打算在这里试试 第一关图书馆工作得很好 我试着让一个鼓声触发,但它不起作用。我可以从“原声钢琴”中得到其他的音符,但不仅仅是“合成鼓” 我认为midi音符35应该与“原声低音鼓”有关 使用demo-Basic.html中的示例 window.onload = function () { MIDI.loadPlugin({ soundfontUrl: "./soundfont/",

我一直在尝试使用midi.js

我试着找一个地方张贴关于使用它的问题,但没有找到,所以我打算在这里试试

第一关图书馆工作得很好

我试着让一个鼓声触发,但它不起作用。我可以从“原声钢琴”中得到其他的音符,但不仅仅是“合成鼓”

我认为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_鼓”声音之前,您必须将该乐器加载到一个通道中。这是通过
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=原声低音鼓等)。