MIDI.js durata nota non cambia

Come la documentazione per mudcube MIDI.js sembra mancare a questo proposito, spero che ci sia qualcuno che potrebbe essere in grado di indicarmi la giusta direzione. Per dirla chiaramente, usando midi.js, come si regola la durata e la fine delle note midi?

Per qualche sfondo, ho creato un widget personale di musica con note trascinabili e droppable (jQuery-ui), che possono essere aggiunti o rimossi, per formare sequenze che possono essere chiamati per la riproduzione midi. Tutto funziona per quanto dovrebbe, tuttavia, mentre sto cercando di espandere la funzionalità di questo widget con tempi più intricati, ho riscontrato alcuni problemi.

Sembra che io possa suonare solo le note a una durata prestabilita e, per tutti i miei sforzi, non sono stato in grado di implementare cambiamenti che potrebbero variare questa durata per dire, mezze note, note da quarto, otto note, ecc. Inoltre, e questa potrebbe essere una delle cause, MIDI.noteOff non ha alcun effetto percepibile sull’output. Si potrebbe pensare che una data nota sarebbe giocare indefinitamente fino MIDI.noteOff è chiamato, tuttavia, detta nota giocherà e poi sentiero fuori indipendentemente dal fatto che noteOff è chiamato.

Lasciatemi dire qui che ho fatto ricerche approfondite su SO e sul web in generale per andare a fondo di questo. Ho trovato persone con problemi simili e applicato le loro correzioni, ma le loro risposte non funzionano per me. Vedere come faccio a giocare note arbitrarie in Midi con javascript e MIDI.noteOff non sembra funzionare in modo affidabile

Ho una sequenza di note chiamata noteSequence in cui ogni nota è un oggetto con noteValue (cioè ‘C4’) e proprietà noteDuration che vengono convertite in midiSequence nella funzione convertToMidiSequence. Tutto funziona bene con sequenze melodiche e accordi, voglio solo aggiungere la funzionalità di durata. Dovrei anche dire che la regolazione della variabile ‘delay’ o della proprietà noteDuration aggiunge solo il tempo prima che la sequenza venga riprodotta. Quindi, dopo il ritardo iniziale, la sequenza viene riprodotta con la stessa tempistica di prima.

Grazie per aver dedicato un po ‘ di tempo a guardare questo oltre e, auspicabilmente, dare una mano. Sarebbe molto apprezzato.

Ecco il codice applicabile che esegue il mio 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(); }}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.