MIDI.js merk varighet endres ikke

som dokumentasjon for mudcube MIDI.js synes å være mangler i denne forbindelse, jeg håper det er noen som kan være i stand til å peke meg i riktig retning. For å si det tydelig, bruk midi.js, hvordan justerer du varigheten og slutten av midi notater?

for litt bakgrunn har jeg laget en musikkpersonale-widget med draggable og droppable notater (jQuery-ui), som kan legges til eller fjernes, for å danne sekvenser som kan påkalles for å spille midi. Alt fungerer så langt som det skal, men som jeg prøver å utvide funksjonaliteten til denne widgeten med mer intrikate timing, jeg har kjørt inn i noen problemer.

det ser ut til at jeg bare kan spille notatene med en bestemt varighet, og for all min innsats har jeg ikke vært i stand til å implementere endringer som kan variere denne varigheten for å si, halv notater, kvartnotater, åtte notater, etc. Også, OG dette kan være EN av årsakene, MIDI.noteOff har ingen merkbar effekt på utgangen. Man skulle tro at et gitt notat ville spille på ubestemt tid til MIDI.noteOff kalles imidlertid sa notatet vil spille og deretter stien av uansett om noteOff kalles.

La meg si her at jeg har gjort omfattende forskning PÅ SO og nettet generelt for å komme til bunns i dette. Jeg har funnet folk med lignende problemer og brukt sine løsninger, men deres svar virker ikke for meg. Se hvordan spiller jeg vilkårlige notater I Midi med javascript og MIDI.noteOff ser ikke ut til å fungere pålitelig

jeg har en sekvens av notater kalt noteSequence hvor hvert notat er et objekt med noteverdi (dvs . ‘C4’) og noteDuration egenskaper som konverteres til en midiSequence i funksjonen convertToMidiSequence. Alt fungerer bra med melodiske sekvenser og akkorder, jeg vil bare ha varighetsfunksjonaliteten lagt til. Jeg bør også si at justering av ‘delay’ – variabelen eller noteDuration-egenskapen bare legger til tiden før sekvensen spilles. Så etter den første forsinkelsen spiller sekvensen med samme timing som før.

Takk for at du tok deg tid til å se på dette og forhåpentligvis hjelpe deg. Det ville være veldig mye verdsatt.

her er den gjeldende koden som kjører MIN MIDI:

$(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(); }}

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.