Not a MIDI keyboard
Nosso objetivo com o projeto foi expandir as funcionalidades do pianinho original, transformando-o em um teclado mais versátil e interativo. Para isso, tentamos implementar diversas features que vão desde o mapeamento de frequências em formato MIDI até a gravação e reprodução de sequências musicais.
- Cada nota tocada no teclado é representada por uma mensagem no estilo do protocolo MIDI:
- Note On: Indica o início da reprodução de uma nota.
- 4 bits para Frequência: Representa a nota específica (até 16 notas diferentes).
- Note Off: Indica o fim da reprodução de uma nota.
- Esse mapeamento permite uma representação compacta e padronizada das notas, facilitando futuras integrações com sistemas MIDI.
- O oitavo botão do teclado ativa o modo de gravação:
- Ao pressionar o botão pela primeira vez, o sistema começa a gravar as mensagens MIDI geradas pelas notas tocadas.
- Ao pressionar novamente, o sistema para a gravação e inicia a reprodução automática da sequência gravada.
- As mensagens são armazenadas em um bloco de memória (BRAM) com uma taxa de amostragem específica (e.g., 10 kHz). Isso significa que os eventos são registrados em intervalos regulares para garantir a precisão temporal durante a reprodução.
- As mensagens MIDI gravadas podem ser enviadas para um computador ou outro dispositivo externo via UART.
- Essa funcionalidade permite salvar as sequências musicais criadas no teclado para uso posterior ou processamento adicional.
- As notas tocadas são identificadas e exibidas em tempo real no display de 7 segmentos.
- Isso fornece feedback visual imediato ao usuário, mostrando qual nota está sendo tocada.
- Um módulo customizado de porta OR foi desenvolvido para permitir combinações de notas.
- Quando dois ou mais botões são pressionados simultaneamente, o som resultante é uma combinação das frequências correspondentes, gerando um som único e personalizado.
- Um dos botões foi configurado para funcionar como um switch, alternando entre dois estados lógicos (
0
↔1
) a cada pressionamento. - Essa funcionalidade foi implementada usando um T flip-flop combinado com detecção de borda positiva.
- O estado do switch pode ser usado para controlar recursos como:
- Alternar entre modos (gravação/reprodução).
- Ativar/desativar funcionalidades específicas.
- Controlar o estado de LEDs ou outros dispositivos.
- Clock Principal: Operando a 27 MHz, o clock é dividido para gerar uma taxa de amostragem de 10 kHz.
- Memória BRAM: Utilizamos 20 KB de memória para armazenar até ~7447 eventos MIDI (cada evento consome 22 bits: 16 bits de timestamp + 4 bits de nota + 2 bits de status).
- Buffer Circular: A memória é organizada como um buffer circular, permitindo gravação e reprodução contínuas sem perda de dados.
- Gravação:
- Os eventos MIDI (
Note On
,Note Off
) são capturados e armazenados na memória BRAM. - Cada evento inclui um timestamp, a nota tocada e o status.
- Os eventos MIDI (
- Reprodução:
- Os eventos gravados são lidos sequencialmente da memória e reproduzidos no buzzer.
- Envio via UART:
- As mensagens gravadas podem ser transmitidas para dispositivos externos usando o protocolo UART.
- Divisor de Clock: Reduz a frequência do clock principal para uma taxa de amostragem adequada.
- Gravador de Notas: Gerencia a gravação e reprodução dos eventos MIDI.
- Display de 7 Segmentos: Exibe as notas tocadas em tempo real.
- Porta OR Customizada: Combina múltiplas frequências para criar sons únicos.
- Botão como Switch: Implementado com um T flip-flop e detecção de borda positiva.
- Expansão das funcionalidades: gravação e reprodução de sequências, envio MIDI via UART, exibição de notas no display de 7 segmentos e combinações de notas com módulo OR.
- Ferramenta experimental: mais do que um teclado simples, tornou-se um meio para criação e experimentação musical digital.
- Nome “MID”: referência ao protocolo MIDI e ao caráter intermediário do projeto, destacando sua proposta educativa.
- Visualização clara das conexões: facilitou a compreensão do circuito a ser sintetizado.
- Colaboração e reutilização de blocos: acelerou o desenvolvimento e reduziu a curva de aprendizado.
- Foco no diferencial do projeto: permitiu otimizar tempo e esforços nas inovações.
- Habilidade de selecionar mais de um bloco, duplicar, etc
- Documentação mais clara sobre cada módulo implementado
- Nomenclatura melhor padronizada
- Erros na simulação
- Possibilidade de colaboração em conjunto, não apenas visualização
- Implementação completa de um protocolo MIDI para permitir a integração completa ao computador.
- Suporte a uma maoir quantidade de teclas e mais futuramente ainda, notas musicais.
- Visualização (display de 7 segmentos) de todas as notas possíveis.