MIDI.a duração da nota js não muda

como a documentação do mudcube MIDI.js parece estar faltando a esse respeito, espero que haja alguém que possa me apontar na direção certa. Para colocá-lo claramente, usando midi.js, como você ajusta a duração e o final das notas midi?

para algum plano de fundo, criei um widget de equipe de música com notas draggable e droppable (jQuery-ui), que podem ser adicionadas ou removidas, para formar sequências que podem ser chamadas para reproduzir midi. Tudo funciona até onde deveria, no entanto, como estou tentando expandir a funcionalidade deste widget com um tempo mais intrincado, encontrei alguns problemas.

parece que só posso tocar as notas em uma duração definida e, apesar de todos os meus esforços, não consegui implementar mudanças que poderiam variar essa duração para dizer, Meias notas, notas de quarto, oito notas, etc. Além disso, e esta pode ser uma das causas, MIDI.noteOff não tem efeito perceptível na saída. Alguém pensaria que uma determinada nota tocaria indefinidamente até MIDI.noteOff é chamado, no entanto, disse nota vai jogar e, em seguida, fugir independentemente de noteOff é chamado.

deixe-me dizer aqui que fiz uma extensa pesquisa sobre SO e a web em geral para chegar ao fundo disso. Encontrei pessoas com problemas semelhantes e apliquei suas correções, mas suas respostas não funcionam para mim. Veja Como faço para tocar notas arbitrárias em Midi com javascript e MIDI.noteOff não parecem funcionar de forma confiável

eu tenho uma sequência de notas, chamado de noteSequence, onde cada nota é um objeto com noteValue (i.e. ‘C4’) e propriedades de noteduração que são convertidas em midiSequence na função convertToMidiSequence. Tudo funciona bem com sequências melódicas e acordes, eu só quero ter a funcionalidade de duração adicionada. Também devo dizer que ajustar a variável ‘delay’ ou a propriedade noteDuration só aumenta o tempo antes que a sequência seja reproduzida. Então, após o atraso inicial, a sequência é reproduzida com o mesmo tempo de antes.

Obrigado por tomar algum tempo para olhar isso e espero ajudar. Seria muito apreciado.

aqui está o código aplicável que executa meu 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(); }}

Deixe uma resposta

O seu endereço de email não será publicado.