首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用基于javascript浏览器的midi.js创建鼓声?

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

Stack Overflow用户
提问于 2013-07-21 06:37:39
回答 1查看 1.9K关注 0票数 6

我一直在尝试使用midi.js http://mudcu.be/midi-js/

我试着寻找一个地方来发布关于使用它的问题,但没有找到,所以我将在这里尝试。

great这个库工作得很好。

我正试着让一个鼓声来触发,但它不工作。我可以让其他音符从"acoustic_grand_piano“触发,但不仅仅是从"synth_drum”。

我认为midi音符35应该与“声学低音鼓”有关。

使用demo-Basic.html中的示例

代码语言:javascript
复制
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);
        }
    });
};
EN

回答 1

Stack Overflow用户

发布于 2013-10-03 12:09:07

在播放"synth_drum“声音之前,您必须将该乐器加载到通道中。这是通过programChange函数完成的。正确的方法如下。

代码语言:javascript
复制
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 source的列表。MIDI.GeneralMIDI中还有一些方便的函数,可以获取仪器信息byName、byId和byCategory。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17767387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档