MIDI.de duur van de js-noot verandert niet

als documentatie voor mudcube MIDI.js lijkt te ontbreken in dit opzicht, ik hoop dat er iemand die in staat zou zijn om mij te wijzen in de juiste richting. Om het duidelijk te zeggen, met behulp van midi.js, hoe pas je de duur en het einde van midi noten aan?

voor sommige achtergrond heb ik een widget voor de muziek notenbalk gemaakt met draggable en droppable notes (jQuery-ui), die kunnen worden toegevoegd of verwijderd, om sequenties te vormen die kunnen worden opgeroepen om midi af te spelen. Alles werkt zo ver als het zou moeten, echter, als ik probeer om de functionaliteit van deze widget uit te breiden met meer ingewikkelde timing, ik heb in een aantal problemen.

het lijkt erop dat ik de noten alleen op een bepaalde duur kan spelen en, ondanks al mijn inspanningen, niet in staat ben geweest om wijzigingen door te voeren die deze duur zouden kunnen variëren, zoals halve noten, kwartnoten, acht noten, enz. Ook, en dit kan een van de oorzaken zijn, MIDI.noteOff heeft geen waarneembaar effect op de output. Men zou denken dat een bepaalde noot voor onbepaalde tijd zou spelen tot MIDI.noteOff wordt aangeroepen, echter, genoemde noot zal Spelen en vervolgens trail off, ongeacht of noteOff wordt aangeroepen.

laat ik hier zeggen dat ik uitgebreid onderzoek heb gedaan naar SO en het web in het algemeen om dit tot op de bodem uit te zoeken. Ik heb mensen met soortgelijke problemen gevonden en hun oplossingen toegepast, maar hun antwoorden werken niet voor mij. Zie hoe speel ik willekeurige noten in Midi met javascript en MIDI.noteOff lijkt niet betrouwbaar te werken

ik heb een reeks noten die noteSequence wordt genoemd, waarbij elke noot Een object is met noteValue (d.w.z. ‘C4′) en noteDuration-eigenschappen die worden omgezet in een midiSequence in de functie convertToMidiSequence. Alles werkt goed met melodieuze sequenties en akkoorden, Ik wil gewoon de duur functionaliteit toegevoegd. Ik moet ook zeggen dat het aanpassen van de’ delay ‘ variabele of de noteDuration eigenschap alleen maar bijdraagt aan de tijd voordat de reeks wordt afgespeeld. Dan na de initiële vertraging, de volgorde speelt met dezelfde timing als voorheen.

Dank u voor het nemen van de tijd om dit te bekijken en hopelijk helpen. Het zou zeer gewaardeerd worden.

hier is de toepasselijke code die mijn MIDI uitvoert:

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

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.