MIDI.js-nuotin kesto ei muutu

mudcube MIDI: n dokumentaationa.js näyttää puuttuvan tältä osin, toivon, että on joku, joka voisi osoittaa minulle oikeaan suuntaan. Suoraan sanottuna, käyttäen midi.js, miten voit säätää MIDI-nuottien kestoa ja loppua?

joidenkin Tausta, olen luonut music staff widget draggable ja droppable toteaa (jQuery-ui), joka voidaan lisätä tai poistaa, muodostaa sekvenssejä, jotka voidaan kutsua toisto midi. Kaikki toimii niin pitkälle kuin sen pitäisi, kuitenkin, koska yritän laajentaa toiminnallisuutta tämän widget monimutkaisempia ajoitus, olen törmännyt joitakin kysymyksiä.

näyttää siltä, että voin soittaa nuotit vain määrätyllä kestolla, enkä ole kyennyt toteuttamaan muutoksia, jotka voisivat vaihdella tätä kestoa esimerkiksi puolinuotteihin, neljännesnuotteihin, kahdeksaan nuottiin jne. Myös, ja tämä voi olla yksi syy, MIDI.noteoffilla ei ole havaittavaa vaikutusta tuotokseen. Voisi luulla, että tietty nuotti soisi loputtomasti MIDI: hen asti.noteOff on nimeltään, kuitenkin, sanoi note soittaa ja sitten jäljittää pois riippumatta siitä, onko noteOff kutsutaan.

sallikaa minun sanoa tässä, että olen tehnyt laajaa tutkimusta niin ja webissä yleensä päästäkseni tämän asian ytimeen. Olen löytänyt ihmisiä, joilla on samanlaisia ongelmia ja soveltanut niiden korjauksia, mutta niiden vastaukset eivät toimi minulle. Katso, miten voin soittaa mielivaltaisia nuotteja MIDI: ssä JavaScriptin ja MIDI: n avulla.noteOff ei näytä toimivan luotettavasti

minulla on nuottien jono nimeltä noteSequence, jossa jokainen nuotti on objekti, jolla on noteValue (ts. ”C4”) ja noteduraatio-ominaisuudet, jotka muunnetaan funktion konvertomidisekvenssiksi. Kaikki toimii hyvin melodisia sekvenssejä ja sointuja, haluan vain olla kesto toiminnallisuus lisätty. Minun pitäisi myös sanoa, että säätämällä ”viive” muuttuja tai noteDuration ominaisuus vain lisää aikaa ennen sekvenssin toistetaan. Alkuviivästyksen jälkeen sekvenssi pelaa samalla ajoituksella kuin ennenkin.

Kiitos, että käytit aikaa tämän asian läpikäymiseen ja toivottavasti autat. Arvostaisin sitä suuresti.

tässä on soveltuva koodi, joka kulkee my 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(); }}

Vastaa

Sähköpostiosoitettasi ei julkaista.