MIDI.js megjegyzés időtartama nem változik

mint a dokumentáció mudcube MIDI.úgy tűnik, hogy js hiányzik ebből a szempontból, remélem, van valaki, aki képes lehet a helyes irányba mutatni. Egyszerűen fogalmazva, midi használatával.js, hogyan állítod be a midi jegyzetek időtartamát és végét?

Néhány háttér, hoztam létre egy zenei staff widget húzható és droppable jegyzetek (jQuery-ui), hogy lehet hozzáadni vagy eltávolítani, alkotnak szekvenciák, amely lehet hívni, hogy a lejátszás midi. Minden úgy működik, amennyire csak kellene, azonban, mivel bonyolultabb időzítéssel próbálom kibővíteni ennek a widgetnek a funkcionalitását, belefutottam néhány kérdésbe.

úgy tűnik, hogy csak meghatározott időtartamon tudom lejátszani a jegyzeteket, és minden erőfeszítésem ellenére nem tudtam olyan változtatásokat végrehajtani, amelyek ezt az időtartamot megváltoztathatják, fél jegyzetek, negyed jegyzetek, nyolc jegyzetek stb. Ez is lehet az egyik oka, MIDI.a noteoffnak nincs érzékelhető hatása a kimenetre. Az ember azt gondolná, hogy egy adott hang a végtelenségig lejátszódik MIDI.noteOff hívják, azonban az említett megjegyzés fog játszani, majd nyom le, függetlenül attól, hogy noteOff hívják.

hadd mondjam el itt, hogy átfogó kutatást végeztem a SO-ról és általában az internetről, hogy ennek végére járjak. Találtam hasonló problémákkal küzdő embereket, és alkalmaztam javításaikat, de a válaszaik nem működnek nekem. Lásd: hogyan játszhatok le tetszőleges jegyzeteket Midi-ben javascript és MIDI használatával.úgy tűnik, hogy a noteOff nem működik megbízhatóan

van egy notesequence nevű jegyzetsorozatom, ahol minden jegyzet noteValue objektum (azaz. ‘C4’) és noteDuration tulajdonságokat, amelyek a convertToMidiSequence függvényben midiSequence-vé alakulnak át. Minden jól működik dallamos szekvenciákkal és akkordokkal, csak azt akarom, hogy hozzáadják az időtartam funkciót. Azt is el kell mondanom, hogy a ‘delay’ változó vagy a noteDuration tulajdonság beállítása csak növeli a sorozat lejátszása előtti időt. Ezután a kezdeti késleltetés után a szekvencia ugyanolyan időzítéssel játszik, mint korábban.

Köszönjük, hogy időt szánt erre, és remélhetőleg segít. Nagyra értékelném.

itt van az alkalmazandó kód, amely a MIDI-t futtatja:

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

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.