LeoRiether/FPGRARS

Erro ao tocar MIDIs assíncronas

Closed this issue · 1 comments

Problema

Ao rodar um código específico utilizando a syscall 31 (async MIDI), algumas notas parecem ser "engolidas" (as vezes parecem tocar bem baixo no fundo?) quando executado no FPGRARS, no RARS as notas são executadas perfeitamente.

Possível solução?

Tenho zero conhecimento de como funciona MIDI e seus eventos, mas acredito que talvez o erro possa originar dessas linhas, onde você dá sleep antes de mandar o evento de NOTE_OFF.
Então talvez exista a chance de uma nota X começar antes da nota Y terminar, mas o evento NOTE_OFF da nota Y acaba desligando a nota X?

No repositório do RARS, o evento NOTE_OFF é enviado com a informação da duração e junto com os outros, sem uma pausa entre eles.

Obs.: Esse é somente o meu palpite, talvez o problema não tenha nada a ver com isso.

Obrigado pela issue!

Pelo que testei, o problema é esse mesmo, chegam 2 eventos de NOTE_ON, depois 2 de NOTE_OFF. Não encontrei nada sobre enviar um NOTE_OFF junto com a duração na especificação do MIDI, acredito que seja algo específico do MidiSystem do Java.

Enquanto eu não resolvo o problema (espero conseguir em breve), um workaround pode ser dar um sleep de 1ms antes das ecalls de MIDI async

li a7 32
li a0 1
ecall

No meu computador funciona ¯\_(ツ)_/¯