J'ai créé du code javascript qui génère des fichiers midi basés sur une note et une octave passées. Pour la plupart, cela fonctionne plutôt bien. Le problème est que la note C (note = 0) est beaucoup plus courte que n'importe quelle autre note (1 (C#) à 11 (B)).généré midi note longueur
Voici mon code:
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;
}
Pourquoi une note de C - jouer (0, 4, '18') son tellement plus court que tout autre - jouer (1, 4, '18') ? La hauteur semble correcte, juste la longueur de la note.
Je pense que cela peut avoir quelque chose à voir avec C étant de valeur 0, mais je ne sais pas assez ce que je fais ici avec midi pour repérer un problème.
REMARQUE: ce code ne fonctionne pas dans IE (toute version).
Et ce qui se passe lorsque vous appelez le midi fichier directement dans le navigateur/quicktime sans utiliser la balise embed? Est-ce que ça joue le bon temps? – epascarello
Je ne peux pas reproduire ce comportement - toutes les notes sont jouées pendant la même durée. Mettez à jour votre version QT? – LesterDove
Il semble que ce soit un problème avec ma carte son. J'ai testé sur plusieurs combinaisons OS/navigateur, mais pas plusieurs ordinateurs. Merci d'avoir attiré mon attention là-dessus. J'aurais dû vérifier cela avant. – marshallpenguin