MIDI.JS note varaktighet ändras inte

som dokumentation för mudcube MIDI.js verkar saknas i detta avseende, jag hoppas att det finns någon som kanske kan peka mig i rätt riktning. För att uttrycka det tydligt, med midi.js, Hur justerar du varaktigheten och slutet på midi-anteckningar?

för lite bakgrund har jag skapat en musikpersonalwidget med dragbara och droppbara anteckningar (jQuery-ui), som kan läggas till eller tas bort, för att bilda sekvenser som kan uppmanas att spela midi. Allt fungerar så långt det borde, men eftersom jag försöker utöka funktionaliteten för denna widget med mer invecklad timing, har jag stött på några problem.

det verkar som om jag bara kan spela noterna med en viss varaktighet och för alla mina ansträngningar har jag inte kunnat genomföra förändringar som kan variera denna varaktighet för att säga, halvnoter, kvartsnoter, åtta anteckningar etc. Också, och detta kan vara en av orsakerna, MIDI.noteOff har ingen märkbar effekt på utgången. Man skulle tro att en given anteckning skulle spela på obestämd tid fram till MIDI.noteOff kallas dock nämnda Not kommer att spela och sedan trail off oavsett om noteOff kallas.

Låt mig säga här att jag har gjort omfattande forskning på så och webben i allmänhet för att komma till botten med detta. Jag har hittat personer med liknande problem och tillämpat sina korrigeringar men deras svar fungerar inte för mig. Se hur spelar jag godtyckliga anteckningar i Midi med javascript och MIDI.noteOff verkar inte fungera tillförlitligt

jag har en sekvens av anteckningar som heter noteSequence där varje anteckning är ett objekt med noteValue (dvs. ’C4’) och noteDuration egenskaper som omvandlas till en midiSequence i funktionen convertToMidiSequence. Allt fungerar bra med melodiska sekvenser och ackord, jag vill bara ha varaktighetsfunktionen tillagd. Jag bör också säga att justering av ’delay’ – variabeln eller noteDuration-egenskapen bara lägger till tiden innan sekvensen spelas. Sedan efter den initiala fördröjningen spelar sekvensen med samma tidpunkt som tidigare.

Tack för att du tog dig tid att titta på detta och förhoppningsvis hjälpa till. Det skulle vara mycket uppskattat.

här är den tillämpliga koden som kör 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(); }}

Lämna ett svar

Din e-postadress kommer inte publiceras.