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

时间:2013-07-20 22:37:39

标签: javascript midi

我一直在尝试使用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);
        }
    });
};

1 个答案:

答案 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 sourceMIDI.GeneralMIDI中还有一些方便的函数可以通过Name,byId和byCategory获取工具信息。