MIDI.la duración de la nota de js no cambia

Como documentación para mudcube MIDI.js parece carecer en este sentido, espero que haya alguien que pueda señalarme en la dirección correcta. Para decirlo claramente, usando midi.js, ¿cómo se ajusta la duración y el final de las notas midi?

Para un poco de fondo, he creado un widget de pentagrama musical con notas arrastrables y soltables (jQuery-ui), que se pueden agregar o eliminar, para formar secuencias que se pueden invocar para reproducir midi. Todo funciona tan lejos como debería, sin embargo, como estoy tratando de expandir la funcionalidad de este widget con un tiempo más intrincado, me he encontrado con algunos problemas.

Parece que solo puedo tocar las notas a una duración determinada y, a pesar de todos mis esfuerzos, no he podido implementar cambios que pudieran variar esta duración, por ejemplo, medias notas, negras, ocho notas, etc. También, y esta puede ser una de las causas, MIDI.noteOff no tiene ningún efecto perceptible en la salida. Uno pensaría que una nota dada tocaría indefinidamente hasta el MIDI.Se llama noteOff, sin embargo, dicha nota se reproducirá y luego se irá sin importar si se llama noteOff.

Permítanme decir aquí que he hecho una extensa investigación sobre SO y la web en general para llegar al fondo de esto. He encontrado personas con problemas similares y he aplicado sus soluciones, pero sus respuestas no funcionan para mí. Vea cómo juego notas arbitrarias en Midi con javascript y MIDI.noteOff no parece funcionar de manera confiable

Tengo una secuencia de notas llamada noteSequence donde cada nota es un objeto con noteValue (i. e. ‘C4’) y noteDuration propiedades que se convierten en una consecuencia media en la función convertToMidiSequence. Todo funciona bien con secuencias melódicas y acordes, solo quiero que se agregue la funcionalidad de duración. También debo decir que ajustar la variable ‘delay’ o la propiedad noteDuration solo aumenta el tiempo antes de que se reproduzca la secuencia. Luego, después del retraso inicial, la secuencia se reproduce con el mismo tiempo que antes.

Gracias por tomarse un tiempo para revisar esto y con suerte ayudar. Se lo agradecería mucho.

Aquí está el código aplicable que ejecuta mi 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(); }}

Deja una respuesta

Tu dirección de correo electrónico no será publicada.