Índice:

Conversor de áudio para MIDI em tempo real: 7 etapas
Conversor de áudio para MIDI em tempo real: 7 etapas

Vídeo: Conversor de áudio para MIDI em tempo real: 7 etapas

Vídeo: Conversor de áudio para MIDI em tempo real: 7 etapas
Vídeo: Transforme Áudio para Midi de forma criativa! | Logic Pro X # 60 2024, Julho
Anonim
Conversor de áudio para MIDI em tempo real
Conversor de áudio para MIDI em tempo real

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

Componentes necessários
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

Especificações técnicas
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

Diagramas de circuito
Diagramas de circuito
Diagramas de circuito
Diagramas de circuito
Diagramas de circuito
Diagramas de circuito
Diagramas de circuito
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

Aplicativos e IDEs necessários
Aplicativos e IDEs necessários
Aplicativos e IDEs necessários
Aplicativos e IDEs necessários
Aplicativos e IDEs necessários
Aplicativos e IDEs necessários
Aplicativos e IDEs necessários
Aplicativos e IDEs necessários
  1. Para programar o Arduino Nano, optei pelo primitivo AVR Studio 5.1 porque parece funcionar para mim. Você pode encontrar o instalador aqui.
  2. 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.
  3. 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.
  4. FL Studio ou qualquer outro software de processamento de MIDI. Você pode obter a versão de acesso limitado do FL Studio gratuitamente aqui.
  5. 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.
  6. 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

  1. Abra o código e compile-o com #define pcvisual não comentado e #define midi_out comentado.
  2. 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.
  3. 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.
  4. 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).
  5. Agora use qualquer ferramenta de gerador de varredura como esta para fornecer dados para a placa a partir do microfone e observar o espectro.
  6. 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)
  7. Agora compile o código C embutido novamente, desta vez com #define pcvisual comentado e #define midi_out sem comentário.
  8. Recarregue o novo código compilado no arduino Nano.
  9. Abra o LoopMidi e crie uma nova porta.
  10. 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.
  11. 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.
  12. 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.
  13. 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: