我創建了一些基於傳遞的音符和八度音程生成MIDI文件的JavaScript代碼。大多數情況下它工作得很好。問題是C音符(音符= 0)比任何其他音符(1(C#)到11(B))都短得多。生成的midi音符長度
這裏是我的代碼:
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音符 - 打(0,4, '18')的聲音比任何其他短得多 - 打(1,4, '18') ? 音調似乎是正確的,只是音符的播放長度。
我認爲這可能與C值爲0有關,但我不知道我在這裏用MIDI來做什麼來發現問題。
注意:此代碼在IE(任何版本)中不起作用。
當你調用MIDI會發生什麼直接在瀏覽器/ quicktime文件不使用嵌入標籤?它玩的時間長度是否正確? – epascarello 2010-11-09 00:44:33
我無法重現這種行爲 - 所有音符都播放相同的時間。更新你的QT版本? – LesterDove 2010-11-09 01:17:26
這似乎是我的聲卡問題。我在多種操作系統/瀏覽器組合上測試過,但不是多臺電腦。感謝您將此引起我的注意。我應該先檢查一下。 – marshallpenguin 2010-11-09 01:34:06