我一直在尝试使用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 sourceMIDI.GeneralMIDI中还有一些方便的函数,这些函数将获取仪器信息byName,byId和byCategory。

关于javascript - 使用基于JavaScript浏览器的midi.js来创建鼓声吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17767387/

10-13 06:54