Я создал некоторый код javascript, который генерирует MIDI-файлы на основе переданной ноты и октавы.По большей части это работает довольно хорошо.Проблема в том, что нота C (note = 0) воспроизводится намного короче, чем любая другая нота (от 1 (C #) до 11 (B)).
Вот мой код:
function play(note, octave, program){
var note = (octave*12 + note).toString(16);
var velocity = 'ff';
var MIDI_DATA =
'MThd%00%00%00%06%00%01%00%01%00%C0' + // midi header
'MTrk%00%00%00%0E' + // track header
'%00%C0%'+program+
'%00%90%'+note+'%'+velocity+
'%70%30%00' +
'%00%FF%2F%00';
MIDI_DATA = btoa(unescape(MIDI_DATA));
var e = document.createElement('embed');
e.src = "data:audio/mid;base64,"+MIDI_DATA;
e.type = "video/quicktime";
document.body.appendChild(e);
return e;
}
Почему звук C-play (0, 4, '18') звучит намного короче, чем любой другой - play (1, 4, '18')?Кажется, что высота звука правильная, просто длина ноты.
Я думаю, что это может иметь какое-то отношение к тому, что C имеет значение 0, но я не знаю достаточно о том, что я делаю здесь с мидичтобы определить проблему.
ПРИМЕЧАНИЕ. Этот код не работает в IE (любая версия).