MIDI.die Notendauer ändert sich nicht

Wie die Dokumentation für mudcube MIDI.js scheint in dieser Hinsicht zu fehlen, ich hoffe, es gibt jemanden, der mich in die richtige Richtung weisen kann. Um es klar auszudrücken, mit midi.js, wie passen Sie die Dauer und das Ende von MIDI-Noten an?

Für einige Hintergrundinformationen habe ich ein Notensystem-Widget mit ziehbaren und ablegbaren Noten (jQuery-ui) erstellt, die hinzugefügt oder entfernt werden können, um Sequenzen zu bilden, die zur Wiedergabe von Midi aufgerufen werden können. Da ich jedoch versuche, die Funktionalität dieses Widgets mit einem komplizierteren Timing zu erweitern, sind einige Probleme aufgetreten.

Es scheint, dass ich die Noten nur mit einer festgelegten Dauer spielen kann und trotz all meiner Bemühungen keine Änderungen implementieren konnte, die diese Dauer variieren könnten, z. B. halbe Noten, Viertelnoten, acht Noten usw. Auch, und dies kann eine der Ursachen sein, MIDI.noteOff hat keinen wahrnehmbaren Effekt auf den Ausgang. Man würde denken, dass eine gegebene Note bis MIDI unbegrenzt spielen würde.noteOff aufgerufen wird, jedoch wird die Note spielen und dann Spur ab, unabhängig davon, ob noteOff aufgerufen wird.

Lassen Sie mich hier sagen, dass ich umfangreiche Nachforschungen über SO und das Web im Allgemeinen angestellt habe, um dem auf den Grund zu gehen. Ich habe Leute mit ähnlichen Problemen gefunden und ihre Korrekturen angewendet, aber ihre Antworten funktionieren bei mir nicht. Siehe wie spiele ich beliebige Noten in Midi mit Javascript und MIDI.noteOff scheint nicht zuverlässig zu funktionieren

Ich habe eine Sequenz von Noten namens noteSequence wobei jede Note ein Objekt mit noteValue (dh. ‚C4‘) und noteDuration-Eigenschaften, die in der Funktion convertToMidiSequence in eine midiSequence konvertiert werden. Alles funktioniert gut mit melodischen Sequenzen und Akkorden, ich möchte nur die Dauer-Funktionalität hinzugefügt haben. Ich sollte auch sagen, dass das Anpassen der Variablen ‚delay‘ oder der Eigenschaft noteDuration nur die Zeit erhöht, bevor die Sequenz abgespielt wird. Nach der anfänglichen Verzögerung wird die Sequenz mit dem gleichen Timing wie zuvor abgespielt.

Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu überprüfen und hoffentlich zu helfen. Es wäre sehr dankbar.

Hier ist der anwendbare Code, der mein MIDI ausführt:

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.