Índice:
- Etapa 1: Componentes necessários
- Etapa 2: Especificações técnicas
- Etapa 3: diagramas de circuito
- Etapa 4: Aplicativos e IDEs necessários
- Etapa 5: códigos relevantes para tudo
- Etapa 6: Configurando
- Etapa 7: Resultados / Vídeos
Vídeo: Conversor de áudio para MIDI em tempo real: 7 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:37
Gente namaste! Este é um projeto no qual trabalhei para um dos meus cursos (Processamento Digital de Sinais em Tempo Real) no meu curso de bacharelado. O projeto visa fazer um sistema DSP que "escuta" dados de áudio e emite mensagens MIDI das notas correspondentes através do UART. O Arduino Nano foi usado para esse propósito. Resumindo a história, o microcontrolador faz um FFT nos dados de áudio recebidos e faz algumas análises dos picos e envia a mensagem MIDI apropriada. Não se preocupe com os MOSFETs porque eles são para algum outro projeto (que também serão colocados mais tarde nos instructables) e não são necessários para este projeto. Então vamos começar já !!
Etapa 1: Componentes necessários
Precisaremos dos seguintes componentes para construir este projeto, embora muitos deles sejam genéricos e possam ser substituídos por seus equivalentes. Consulte também o diagrama de circuito para descobrir e buscar melhores implementações.
Quantidade de Componente
1. Microfone de eletreto. 1
2. Resistência de 30 Kilo Ohm. 1
3. Resistor de 150 Kilo Ohm. 1
4. resistor de 100 ohms. 1
5. Resistores de 2,2 Kilo Ohm. 3
6. Pote predefinido de 10 Kilo Ohm. 1
7. Pote aparador de 10 Kilo Ohm. 1
8. Potenciômetro estéreo de 47 Kilo Ohm. 1
9. Resistores de 470 Ohms. 2
10. Capacitores de 0,01uF. 2
11. Capacitores 2.2uF. 3
12. capacitores 47uF. 2
13. Capacitor 1000uF. 1
14. Capacitor 470uF. 1
15. regulador de tensão 7805. 1
16. Tira de cabeçalho feminina e masculina. 1 cada
17. Conector Barrel Jack. 1
18. Adaptador de 12 V 1 Amp DC. 1
19. Interruptor SPST. (Opcional) 1
20. Perfboard. 1
Etapa 2: Especificações técnicas
Frequência de amostragem: 3.840 amostras / s
Número de amostras por FFT: 256
Resolução de frequência: 15 Hz
Taxa de atualização: cerca de 15 Hz
As escalas inferior e superior das notas musicais não são capturadas corretamente. As notas mais baixas sofrem de resolução de baixa frequência, enquanto as frequências mais altas sofrem de baixas taxas de amostragem. O arduino já está sem memória, então não há como obter uma resolução melhor. E uma melhor resolução terá um custo de taxa de atualização reduzida, portanto, o trade-off é inevitável. Versão leiga do princípio da incerteza de Heisenberg.
A principal dificuldade é o espaçamento exponencial entre as notas (como visto na figura. Cada impulso no eixo da frequência é uma nota musical). Algoritmos como LFT podem ajudar, mas isso é um pouco avançado e um pouco complicado para um dispositivo como o arduino Nano.
Etapa 3: diagramas de circuito
Nota: Não se incomode com os três MOSFETs e os terminais de parafuso nas fotos. Eles não são necessários para este projeto. Observe que a placa de entrada do microfone é removível ou como eles chamam de Modular. Uma pequena descrição dos vários blocos é fornecida abaixo.
1) Os dois resistores de 470 ohms combinam o sinal de áudio estéreo com o sinal de áudio mono. Certifique-se de que o aterramento do sinal vá para o aterramento virtual (vg no diagrama do circuito) e não para o aterramento do circuito.
2) O próximo bloco é um filtro passa-baixo de chave sallen de 2ª ordem que é responsável por limitar a banda do sinal de entrada para evitar o aliasing. Uma vez que estamos trabalhando apenas com alimentação de + 12v, polarizamos o amplificador operacional criando um divisor de tensão RC. isso engana o amplificador operacional, fazendo-o pensar que a alimentação é de 6 0 -6 volts (trilho duplo), onde vg é a referência de aterramento para o amplificador operacional.
3) Em seguida, a saída é filtrada em passa-baixa para bloquear o deslocamento DC de 6 volts e acoplada com DC de cerca de 0,55 volts porque o ADC será configurado para usar 1,1 v interno como Vref.
Nota: O pré-amplificador do microfone de eletreto não é o melhor circuito da internet. Um circuito envolvendo op-amp teria sido uma escolha melhor. Desejamos que a resposta de frequência seja a mais plana possível. O potenciômetro estéreo de 47 kilo ohms é usado para definir a frequência de corte, que deve ser normalmente a metade da frequência de amostragem. O pré-ajuste de 10 kilo ohm (o pequeno pote com cabeça branca) é usado para ajustar o ganho e o valor Q do filtro. O potenciômetro de corte de 10 quilo ohm (um com um botão de ajuste metálico que se parece com um pequeno parafuso de cabeça chata) é usado para definir a tensão para ser tão próximo quanto a metade Vref.
Nota: Quando você está conectando o Nano ao P. C. mantenha a chave SPST aberta, senão fechada. Tenha especial cuidado com isso, caso contrário, pode danificar o circuito / computador / regulador de tensão ou qualquer combinação dos itens acima
Etapa 4: Aplicativos e IDEs necessários
- Para programar o Arduino Nano, optei pelo primitivo AVR Studio 5.1 porque parece funcionar para mim. Você pode encontrar o instalador aqui.
- Para programar o Arduino Nano usei o Xloader. É realmente fácil de usar uma ferramenta leve para gravar arquivos.hex em Arduinos. Você pode obtê-lo aqui.
- Para um pequeno bônus, mini-projeto e ajuste do circuito, usei o processamento. Você pode obtê-lo aqui, embora faça grandes mudanças em cada revisão, então você pode ter que mexer com funções obsoletas para fazer o esboço funcionar.
- FL Studio ou qualquer outro software de processamento de MIDI. Você pode obter a versão de acesso limitado do FL Studio gratuitamente aqui.
- O Loop MIDI cria uma porta MIDI virtual e é detectado pelo FL Studio como se fosse um dispositivo MIDI. Obtenha uma cópia do mesmo aqui.
- O Hairless MIDI é usado para ler mensagens MIDI da porta COM e enviá-las para a porta MIDI de loop. Ele também depura mensagens MIDI em tempo real, o que torna a depuração conveniente. Obtenha o MIDI sem pêlos daqui.
Etapa 5: códigos relevantes para tudo
Gostaria de agradecer à Electronic Lifes MFG (Website Aqui !!) pela biblioteca FFT de ponto fixo que utilizei neste projeto. A biblioteca é otimizada para a família mega AVR. Este é o link para os arquivos e códigos da biblioteca que ele usou. Estou anexando meu código abaixo. Inclui o esboço de processamento e o código AVR C também. Por favor, note que esta é a configuração que funcionou para mim e eu não assumo nenhuma responsabilidade se você danificar alguma coisa por causa desses códigos. Além disso, tive muitos problemas ao tentar fazer o código funcionar. Por exemplo, DDRD (Data Direction Register) tem DDDx (x = 0-7) como máscaras de bits em vez do DDRDx convencional (x = 0-7). Cuidado com esses erros durante a compilação. Além disso, alterar o microcontrolador afeta essas definições, portanto, fique atento a isso ao lidar com erros de compilação. E se você está se perguntando por que a pasta do projeto se chama DDT_Arduino_328p.rar, bem, vamos apenas dizer que estava muito escuro à noite quando comecei e tive preguiça de não acender as luzes.: P
Chegando ao esboço de processamento, usei o processamento 3.3.6 para escrever este esboço. Você precisará definir o número da porta COM no esboço manualmente. Você pode verificar os comentários no código.
Se alguém puder me ajudar a portar os códigos para o IDE do Arduino e a versão de processamento mais recente, ficarei feliz e darei os créditos aos desenvolvedores / contribuidores também.
Etapa 6: Configurando
- Abra o código e compile-o com #define pcvisual não comentado e #define midi_out comentado.
- Abra o xloader e navegue até o diretório com o código, navegue até o arquivo.hex e grave-o no nano selecionando a placa e a porta COM apropriadas.
- Abra o esboço de processamento e execute-o com o índice de porta COM apropriado. Se tudo correr bem, você poderá ver um espectro do sinal no pino A0.
- Pegue uma chave de fenda e gire o potenciômetro do aparador até que o espectro fique plano (o componente DC deve estar próximo de zero). Não envie nenhum sinal para a placa então. (Não conecte o módulo de microfone).
- Agora use qualquer ferramenta de gerador de varredura como esta para fornecer dados para a placa a partir do microfone e observar o espectro.
- Se você não vir uma varredura de frequências, diminua a frequência de corte alterando a resistência de 47 kilo ohm. Aumente também o ganho usando o potenciômetro predefinido de 10 kilo ohm. Tente obter uma saída de varredura plana e proeminente alterando esses parâmetros. Esta é a parte divertida (o pequeno bônus!), Toque suas músicas favoritas e aproveite seu espectro em tempo real. (Assista o vídeo)
- Agora compile o código C embutido novamente, desta vez com #define pcvisual comentado e #define midi_out sem comentário.
- Recarregue o novo código compilado no arduino Nano.
- Abra o LoopMidi e crie uma nova porta.
- Abra o FL Studio ou outro software de interface MIDI e certifique-se de que a porta loop midi esteja visível nas configurações da porta MIDI.
- Abra o MIDI sem pêlos com o Arduino conectado. Selecione a porta de saída para ser a porta LoopMidi. Vá para as configurações e defina a taxa de Baud para 115200. Agora selecione a porta COM correspondente ao Arduino Nano e abra a porta.
- Toque alguns tons "puros" perto do microfone e você deve ouvir a nota correspondente no software MIDI também. Se não houver resposta, tente diminuir o up_threshold definido no código C. Se as notas forem disparadas aleatoriamente, aumente o limite superior.
- Pegue o seu piano e teste o quão rápido é o seu sistema !! A melhor coisa é que, na zona de notas douradas, ele pode detectar facilmente vários pressionamentos simultâneos de teclas.
Nota: Quando a porta COM é acessada por um aplicativo, ela não pode ser lida por outro. Por exemplo, se Hairless MIDI estivesse lendo a porta COM, o Xloader não seria capaz de atualizar a placa
Etapa 7: Resultados / Vídeos
Por enquanto é isso, pessoal! Espero que você goste. Se você tiver alguma sugestão ou melhoria no projeto, deixe-me saber na seção de comentários. Paz!
Recomendado:
Rastreador em tempo real COVID-19 para ESP32: 3 etapas
COVID-19 Realtime Tracker para ESP32: Este pequeno rastreador irá ajudá-lo a estar atualizado sobre o surto do vírus corona e a situação em seu país. O visor mostra alternadamente os dados atuais de diferentes países de sua escolha. Os dados são coletados pelo site www.wo
Conversor PPM para USB Joystick baseado em Arduino (JETI) para FSX: 5 etapas
Conversor de joystick de PPM para USB baseado em Arduino (JETI) para FSX: decidi mudar meu transmissor JETI DC-16 do Modo 2 para o Modo 1, que basicamente muda o acelerador e o elevador da esquerda para a direita e vice-versa. Já que eu não queria travar um dos meus modelos devido a alguma confusão esquerda / direita em meu cérebro, eu estava
Wiggly Wobbly - Veja as ondas sonoras !! Visualizador de áudio em tempo real !!: 4 etapas
Wiggly Wobbly - Veja as ondas sonoras !! Visualizador de áudio em tempo real !!: Você já se perguntou como são as músicas do Beetle ?? Ou você simplesmente quer ver como um som se parece ?? Então não se preocupe, estou aqui para ajudá-lo a torná-lo reeeeaaalll !!! Aumente seu alto-falante e aponte para o desbotado
Exibição de tempo e tempo do Arduino 3 em 1: 11 etapas
Arduino 3 em 1 Time and Weather Display: Eu gosto de microcontroladores PIC e gosto de programar em linguagem assembly. Na verdade, nos últimos dois anos, postei cerca de 40 projetos em meu site com base nessa combinação. Recentemente, eu estava encomendando algumas peças de um dos meus favoritos dos EUA v
IoT Data Science PiNet para dados em tela inteligente em tempo real Viz: 4 etapas
IoT Data Science PiNet para dados em tela inteligente em tempo real Viz: Você pode facilmente montar uma rede IoT de visores inteligentes para visualização de dados para turbinar seus esforços de pesquisa em ciência de dados ou qualquer campo quantitativo. Você pode chamar o botão " push " de suas parcelas para os clientes diretamente de dentro de sua