如何用javascript播放任意MIDI音符?

Raz*_*orm 14 javascript midi

澄清:我不想生成MIDI文件,也不想播放MIDI文件,我希望能够即时播放MIDI音符.

我尝试使用https://github.com/mudcube/MIDI.js作为MIDI库,它有点工作.

我可以通过电话来演奏音符MIDI.noteOn(0,midiNumber,100);.然而,即使我从不打电话,这会播放几秒钟的音符,然后逐渐消失MIDI.noteOff.

我不相信这是MIDI的工作方式.我希望能够在调用noteOff之前调用noteOn并进行音符播放和延音.

预期的浏览器:现代firefox/chrome.

Zet*_*eta 10

这是你的MIDI.js版本的错误:

var playChannel = function (id) {
    var note = notes[id];
    if (!note) return;
    var nid = (channel_nid + 1) % channels.length;
    var time = (new Date()).getTime();
    var audio = channels[nid];
    channel_map[note.id] = audio;
    audio.src = MIDI.Soundfont[note.id];
    audio.volume = volume;
    audio.play();
    channel_nid = nid;
};
Run Code Online (Sandbox Code Playgroud)

如您所见,playChannel将加载给定的音符并播放它.由于没有autoloop属性,因此不会重复,因此noteOff无需调用.如果将audio元素设置为自动循环,则可以自行修复此问题.

  • 哇.很高兴发现了一个bug.+1,虽然你不想提出拉动请求吗? (2认同)

Tir*_*rno 5

另外,http: //mohayonao.github.io/timbre.js/提供了各种声音生成器,可以为其调用noteOn和noteOff。