打开控制台
MIDI嗨起来
——以上纯属扯淡,by 扣钉骑士
Well forget it, let's play something here.
Let's say we're trying to generat something like it shown below:
01001101 01010100 01101000 01100100 // MThd
00000000 00000000 00000000 00000110 // header lentgh: 6 bytes
00000000 00000001                   // Midi Type: 1
00000000 00000001                   // Track count: 1
00000000 00011000                   // Division: 48 ticks / second

01001101 01010100 01110010 01101011 // MTrk
00000000 00000000 00000111 10111011 // Track Length: 955 bytes - length-fixable data
00000000 11111111 00000010 00011100 // tick 0, 0xFF 0x02 0x1C - CopyRight, length: 28 bytes
00101000 01100011 00101001 00110010 // CopyRight Contents in 28 bytes.
00110000 00110001 00110011 00100000
01100010 01111001 00100000 01111001
01100001 01110010 01101101 01111001
01100001 01110010 01100011 01101000
01000000 01101100 01101001 01110110
01100101 00101110 01100011 01101110

00000000 11000000 00001011          // Program Change
00000000 10010000 00111100 01111111 // Note On
00000001 10110000 00001011 01111111 // 0xB0 0x11 0x7F
00000000 11100000 00000000 01000000 // 0xE0 0x00 0x40
00000001 10110000 00001011 01111111
00000000 11100000 00000000 01000000
00000001 10110000 00001011 01111110
00000000 11100000 00000000 01000001 // 0xE0 0x00 0x41
                                    // 117 No.11 Controller
00000001 10110000 00000001 01111111 // 0xB0 0x01 0x7F
                                    // 120 No.11 Controller
00000001 10110000 00001011 00000000 // 0xB0 0x11 0x00
00000000 11100000 00000000 01111111 // 0xE0 0x00 0x7F
00000000 10000000 00111100 00111111 // Note Off

00000000 11111111 00101111 00000000 // tick 0, 0xFF 0x2F 0x00 - End of Track Chunk
And here comes the scirpt for that, play it in the console:
var seq = new Midi.Sequence(1, 24),
    track = seq.getTrack(0);

track.addEvent(0, new Midi.Message(0xc0, 0x11));        // Program Change to No.17
track.addEvent(0, new Midi.Message(0xB0, [124,0]));     // omni on
track.addEvent(0, new Midi.Message(0xB0, [126,1]));     // mono on & omni on
track.addEvent(0, new Midi.Message(0x90, [60,127]));    // Note On Key 0x3C
track.addEvent(120, new Midi.Message(0xB0, [1,127]));   // Vibrato Controller
track.addEvent(240, new Midi.Message(0x80, [60,127]));  // Note Off

// Apply Voice Change and Pitch Wheel Change
for (var i = 1; i <= 240; ++i) {
    track.addEvent(i, new Midi.Message(0xB0, [11, 127 - ~~((127 / 240) * i)]));
    track.addEvent(i, new Midi.Message(0xE0, [0, 64 + ~~((63 / 240) * i)]));
}

// Click & Download
var blob = new Blob([seq.toByteArray(1)], {type:"audio/midi"});
var url = URL.createObjectURL(blob);
document.body.onclick = function() {
    window.open(url);
    document.body.onclick = "";
}
Or you may want to
select from an instrument here and