MIDI.czas trwania notatki js nie zmienia się

jako dokumentacja dla MUDCUBE MIDI.js chyba brakuje w tym względzie, mam nadzieję, że znajdzie się ktoś, kto mógłby wskazać mi właściwy kierunek. Mówiąc wprost, używając midi.js, jak dostosować czas trwania i zakończenie nut midi?

dla niektórych tła, stworzyłem widżet personelu muzycznego z przeciąganymi i opadającymi nutami (jQuery-ui), które można dodawać lub usuwać, tworząc sekwencje, które można wywoływać do odtwarzania midi. Wszystko działa tak dalece, jak powinno, jednak, jak próbuję rozszerzyć funkcjonalność tego widżetu z bardziej skomplikowanych terminów, mam natknąć się na pewne problemy.

wydaje mi się, że mogę grać tylko w określonym czasie i mimo wszystkich moich wysiłków nie byłem w stanie wprowadzić zmian, które mogłyby zmieniać ten czas trwania, np. półnuty, ćwierćnuty, osiem nut itp. Ponadto, I to może być jedną z przyczyn, MIDI.noteOff nie ma zauważalnego wpływu na wyjście. Można by pomyśleć, że dana nuta będzie odtwarzana w nieskończoność aż do MIDI.noteOff jest wywoływany, jednak wspomniana nuta będzie odtwarzana, a następnie trail off niezależnie od tego, czy noteoff jest wywoływany.

pozwól, że powiem tutaj, że przeprowadziłem rozległe badania na temat SO I ogólnie sieci, aby dotrzeć do sedna tego. Znalazłem ludzi z podobnymi problemami i zastosowałem ich poprawki, ale ich odpowiedzi nie działają dla mnie. Zobacz, jak odtwarzać dowolne nuty w Midi za pomocą javascript i MIDI.noteOff wydaje się nie działać niezawodnie

mam sekwencję nut o nazwie noteSequence, gdzie każda nuta jest obiektem z noteValue (tzn. „C4”) i notowane własności, które w funkcji convertToMidiSequence są przekształcane w mid. Wszystko działa dobrze z sekwencjami melodycznymi i akordami, chcę tylko dodać funkcjonalność czasu trwania. Powinienem również powiedzieć, że dostosowanie zmiennej „delay” lub właściwości noteDuration dodaje tylko czas przed odtworzeniem sekwencji. Następnie po początkowym opóźnieniu Sekwencja gra w tym samym czasie, co wcześniej.

dziękuję, że poświęciłeś trochę czasu, aby to przejrzeć i mam nadzieję, że pomożesz. Byłoby to bardzo mile widziane.

oto odpowiedni kod uruchamiający mój 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(); }}

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.