MIDI.JS notă durata nu se modifică

ca documentația pentru MUDCUBE MIDI.js pare să lipsească în această privință, sper că există cineva care ar putea să mă îndrepte în direcția cea bună. Pentru a spune clar, folosind midi.js, cum ajustați durata și sfârșitul notelor midi?

pentru unele fundal, am creat un widget personal de muzică cu note draggable și droppable (jQuery-ui), care pot fi adăugate sau eliminate, pentru a forma secvențe care pot fi chemate la redarea midi. Totul funcționează până acum așa cum ar trebui, cu toate acestea, așa cum am încercat să se extindă funcționalitatea acestui widget cu calendarul mai complicate, am rula în unele probleme.

se pare că pot reda notele doar la o durată stabilită și, pentru toate eforturile mele, nu am reușit să implementez modificări care ar putea varia această durată pentru a spune, jumătate de note, sfert de note, opt note etc. De asemenea, și aceasta poate fi una dintre cauze, MIDI.noteOff nu are niciun efect perceptibil asupra ieșirii. S-ar crede că o notă dată ar juca la nesfârșit până la MIDI.noteOff este numit, cu toate acestea, a spus nota va juca și apoi traseu off, indiferent dacă noteOff este numit.

permiteți-mi să spun aici că am făcut cercetări ample despre acest lucru și despre web în general pentru a ajunge la partea de jos a acestui lucru. Am găsit oameni cu probleme similare și aplicate remedierile lor, dar răspunsurile lor nu funcționează pentru mine. Vezi cum pot juca note arbitrare în Midi cu javascript și MIDI.noteOff nu pare să funcționeze în mod fiabil

am o secvență de note numite noteSequence unde fiecare notă este un obiect cu noteValue (adică. ‘C4’) și proprietăți noteDuration care sunt convertite într-o midiSequence în convertToMidiSequence funcție. Totul funcționează bine cu secvențe melodice și acorduri, vreau doar să am funcționalitatea de durată adăugată. De asemenea, ar trebui să spun că ajustarea variabilei ‘delay’ sau a proprietății noteDuration se adaugă doar la timpul înainte de redarea secvenței. Apoi, după întârzierea inițială, secvența se joacă cu aceeași sincronizare ca înainte.

Vă mulțumim pentru a lua ceva timp să se uite peste acest lucru și, sperăm, ajuta. Ar fi foarte apreciat.

iată codul aplicabil care rulează MIDI-ul meu:

$(document).ready(function() { MIDI.loadPlugin({ soundfontUrl: GLOBALS.SOUNDFONT_URL, instrument: 'acoustic_grand_piano', callback: function() { var channel = 0, instrument = 0, velocity = 127, delay = 1; MIDI.programChange(0, instrument); } });});function playCurrentSequence() { playSequence(noteSequence);}function playSequence(sequence) { var midiSequence = convertToMidiSequence(sequence); for (var i = 0; i < midiSequence.length; i++) { if (!(midiSequence instanceof Array)) { playNote(midiSequence, i); } else { playChord(midiSequence, i); } }}function playNote(midiNote, notePositionInMeasure) { var channel = 0, velocity = 127, delay = 1; MIDI.noteOn(channel, midiNote, velocity, delay + notePositionInMeasure + 1); MIDI.noteOff(channel, midiNote, delay + midiNote.noteDuration + notePositionInMeasure + 1); MIDI.Player.stop();}function playChord(midiChord, notePositionInMeasure) { var channel = 0, velocity = 127, delay = 1; for (var i = 0; i < midiChord.length; i++) { MIDI.noteOn(channel, midiChord, velocity, delay + notePositionInMeasure + 1); MIDI.noteOff(channel, midiChord, delay + midiChord.noteDuration + notePositionInMeasure + 1); MIDI.Player.stop(); }}

Lasă un răspuns

Adresa ta de email nu va fi publicată.