Tabla de contenido:
- Paso 1: componentes necesarios
- Paso 2: Especificaciones técnicas
- Paso 3: Diagramas de circuitos
- Paso 4: Aplicaciones e IDE necesarios
- Paso 5: Códigos relevantes para todo
- Paso 6: Configurarlo
- Paso 7: Resultados / Videos
Video: Convertidor de audio a MIDI en tiempo real: 7 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
¡Gente namaste! Este es un proyecto en el que trabajé para uno de mis cursos (Procesamiento de señales digitales en tiempo real) en mi programa de licenciatura. El proyecto tiene como objetivo crear un sistema DSP que "escuche" datos de audio y envíe mensajes MIDI de las notas correspondientes a través de UART. Se utilizó Arduino Nano para este propósito. En pocas palabras, el microcontrolador hace una FFT en los datos de audio entrantes, analiza los picos y envía el mensaje MIDI apropiado. Sin embargo, no se preocupe por los MOSFET porque son para algún otro proyecto (que también se publicarán más adelante en los instructivos) y no son necesarios para este proyecto. ¡¡Así que comencemos ya !!
Paso 1: componentes necesarios
Necesitaremos los siguientes componentes para construir este proyecto, aunque muchos de ellos son genéricos y pueden sustituirse por sus equivalentes. Consulte también el diagrama de circuito para trabajar y buscar mejores implementaciones.
Cantidad de componentes
1. Micrófono electret. 1
2. Resistencia de 30 Kilo Ohmios. 1
3. Resistencia de 150 Kilo Ohmios. 1
4. Resistencia de 100 ohmios. 1
5. Resistencias de 2,2 Kilo Ohmios. 3
6. Pote preestablecido de 10 Kilo Ohmios. 1
7. Olla recortadora de 10 Kilo Ohmios. 1
8. Potenciómetro estéreo de 47 Kilo Ohmios. 1
9. Resistencias de 470 ohmios. 2
10. Condensadores de 0.01uF. 2
11. Condensadores de 2.2uF. 3
12. Condensadores 47uF. 2
13. Condensador 1000uF. 1
14. Condensador 470uF. 1
15. Regulador de voltaje 7805. 1
16. Tira de cabecera hembra y macho. 1 cada uno
17. Conector de barril Jack. 1
18. Adaptador de CC de 12 V y 1 amperio. 1
19. Interruptor unipolar. (Opcional) 1
20. Perfboard. 1
Paso 2: Especificaciones técnicas
Frecuencia de muestreo: 3840 muestras / seg.
Número de muestras por FFT: 256
Resolución de frecuencia: 15 Hz
Frecuencia de actualización: alrededor de 15 Hz
Las escalas inferior y superior de las notas musicales no se capturan correctamente. Las notas más bajas sufren de resolución de baja frecuencia, mientras que las frecuencias más altas sufren de bajas tasas de muestreo. El arduino ya se ha quedado sin memoria, por lo que no hay forma de obtener una mejor resolución. Y una mejor resolución tendrá el costo de una frecuencia de actualización reducida, por lo que la compensación es inevitable. Versión laica del principio de incertidumbre de Heisenberg.
La principal dificultad es el espaciado exponencial entre notas (como se ve en la figura. Cada impulso en el eje de frecuencia es una nota musical). Algoritmos como LFT pueden ayudar, pero eso es un poco avanzado y un poco complicado para un dispositivo como arduino Nano.
Paso 3: Diagramas de circuitos
Nota: No se moleste por los tres MOSFET y los terminales de tornillo en las imágenes. No son necesarios para este proyecto. Tenga en cuenta que la placa de entrada del micrófono es extraíble o como lo llaman Modular. A continuación se ofrece una pequeña descripción de los distintos bloques.
1) Las dos resistencias de 470 ohmios combinan la señal de audio estéreo con la señal de audio mono. Asegúrese de que la tierra de la señal ingrese a tierra virtual (vg en el diagrama del circuito) y no a la tierra del circuito.
2) El siguiente bloque es un filtro de paso bajo de clave sallen de segundo orden que es responsable de limitar la banda de la señal de entrada para evitar el aliasing. Como estamos trabajando solo con suministro de + 12v, polarizamos el amplificador operacional haciendo un divisor de voltaje RC. eso engaña al amplificador operacional haciéndole pensar que el suministro es de 60-6 voltios (doble raíl) donde vg es la referencia de tierra para el amplificador operacional.
3) Luego, la salida se filtra en paso bajo para bloquear el desplazamiento de CC de 6 voltios y se acopla con CC de alrededor de 0,55 voltios porque el ADC se configurará para usar los 1,1 v internos como Vref.
Nota: El preamplificador para el micrófono electret no es el mejor circuito en Internet. Un circuito con amplificador operacional habría sido una mejor opción. Deseamos que la respuesta de frecuencia sea lo más plana posible. El potenciómetro estéreo de 47 kilo ohmios se utiliza para definir la frecuencia de corte, que normalmente debería ser la mitad de la frecuencia de muestreo. El preajuste de 10 kilo ohmios (la olla pequeña con cabeza blanca) se utiliza para ajustar la ganancia y el valor Q del filtro. El potenciómetro recortador de 10 kilo ohmios (uno con una perilla de ajuste metálica que parece un pequeño tornillo de cabeza plana) se usa para ajustar el voltaje para que esté tan cerca como la mitad de Vref.
Nota: Cuando conecte el Nano a P. C. mantenga el interruptor unipolar abierto en caso contrario cerrado. Tenga especial cuidado con esto. De lo contrario, puede dañar el circuito / computadora / regulador de voltaje o cualquier combinación de los anteriores
Paso 4: Aplicaciones e IDE necesarios
- Para codificar el Arduino Nano, elegí el primitivo AVR studio 5.1 porque parece funcionar para mí. Puede encontrar el instalador aquí.
- Para programar el Arduino Nano utilicé Xloader. Es una herramienta liviana realmente fácil de usar para grabar archivos.hex en Arduinos. Puedes obtenerlo aqui.
- Para un pequeño mini proyecto adicional y para ajustar el circuito, utilicé el procesamiento. Puede obtenerlo desde aquí, aunque hay cambios importantes en cada revisión, por lo que es posible que tenga que jugar con funciones obsoletas para que el boceto funcione.
- FL studio o cualquier otro software de procesamiento MIDI. Puede obtener la versión de acceso limitado de FL Studio de forma gratuita desde aquí.
- Loop MIDI crea un puerto MIDI virtual y FL Studio lo detecta como si fuera un dispositivo MIDI. Obtenga una copia del mismo desde aquí.
- Hairless MIDI se utiliza para leer mensajes MIDI desde el puerto COM y enviarlos al puerto MIDI de bucle. También depura los mensajes MIDI en tiempo real, lo que facilita la depuración. Obtén Hairless MIDI desde aquí.
Paso 5: Códigos relevantes para todo
Me gustaría agradecer a Electronic Lifes MFG (sitio web aquí) por la biblioteca FFT de punto fijo que utilicé en este proyecto. La biblioteca está optimizada para la familia mega AVR. Este es el enlace a los archivos y códigos de la biblioteca que utilizó. Adjunto mi código a continuación. Incluye el boceto de procesamiento y el código AVR C también. Tenga en cuenta que esta es la configuración que funcionó para mí y no asumo ninguna responsabilidad si daña algo debido a estos códigos. Además, tuve muchos problemas al intentar que el código funcionara. Por ejemplo, DDRD (registro de dirección de datos) tiene DDDx (x = 0-7) como máscaras de bits en lugar del DDRDx convencional (x = 0-7). Tenga cuidado con estos errores al compilar. También cambiar el microcontrolador afecta estas definiciones, así que esté atento a esto también mientras se ocupa de los errores de compilación. Y si te estás preguntando por qué la carpeta del proyecto se llama DDT_Arduino_328p.rar, bueno, digamos que estaba muy oscuro por la noche cuando comencé y era lo suficientemente perezoso como para no encender las luces.:PAG
Al llegar al boceto de procesamiento, utilicé el procesamiento 3.3.6 para escribir este boceto. Deberá configurar el número de puerto COM en el boceto manualmente. Puede consultar los comentarios en el código.
Si alguien puede ayudarme a transferir los códigos a Arduino IDE y la última versión de procesamiento, me alegraría y también daré créditos a los desarrolladores / contribuyentes.
Paso 6: Configurarlo
- Abra el código y compile el código con #define pcvisual sin comentar y #define midi_out commented.
- Abra xloader y busque el directorio con el código, busque el archivo.hex y grábelo en nano seleccionando la placa apropiada y el puerto COM.
- Abra el esquema de procesamiento y ejecútelo con el índice de puerto COM apropiado. Si todo va bien, debería poder ver un espectro de la señal en el pin A0.
- Consiga un destornillador y gire el potenciómetro hasta que el espectro sea plano (el componente de CC debe estar cerca de cero). Entonces no ingrese ninguna señal a la placa. (No coloque el módulo de micrófono).
- Ahora use cualquier herramienta generadora de barrido como esta para dar entrada a la placa desde el micrófono y observar el espectro.
- Si no ve un barrido de frecuencias, disminuya la frecuencia de corte cambiando la resistencia de 47 kilo ohmios. También aumente la ganancia usando el potenciómetro preestablecido de 10 kilo ohmios. Intente obtener una salida de barrido plana y prominente cambiando estos parámetros. Esta es la parte divertida (¡la pequeña bonificación!), Toca tus canciones favoritas y disfruta de su espectro en tiempo real. (Ver el vídeo)
- Ahora compile el código C incrustado nuevamente esta vez con #define pcvisual comentado y #define midi_out sin comentar.
- Vuelva a cargar el nuevo código compilado en arduino Nano.
- Abra LoopMidi y cree un nuevo puerto.
- Abra FL studio u otro software de interfaz MIDI y asegúrese de que el puerto midi de bucle esté visible en la configuración del puerto MIDI.
- MIDI abierto sin pelo con arduino conectado. Seleccione el puerto de salida para que sea el puerto LoopMidi. Vaya a la configuración y establezca la velocidad en baudios en 115200. Ahora seleccione el puerto COM correspondiente a Arduino Nano y abra el puerto.
- Toque algunos tonos "puros" cerca del micrófono y debería escuchar la nota correspondiente en el software MIDI también. Si no hay respuesta, intente reducir up_threshold definido en el código C. Si las notas se activan aleatoriamente, aumente el up_threshold.
- ¡Consigue tu piano y prueba qué tan rápido es tu sistema! Lo mejor es que en la zona de bloqueo dorado de las notas puede detectar cómodamente varias pulsaciones simultáneas de teclas con facilidad.
Nota: Cuando una aplicación accede al puerto COM, otra no puede leerlo. Por ejemplo, si Hairless MIDI lee el puerto COM, Xloader no podrá flashear la placa
Paso 7: Resultados / Videos
¡Eso es todo por ahora chicos! Espero que te guste. Si tiene alguna sugerencia o mejora en el proyecto, hágamelo saber en la sección de comentarios. ¡Paz!
Recomendado:
Cómo utilizar un módulo de reloj en tiempo real (DS3231): 5 pasos
Cómo utilizar un módulo de reloj en tiempo real (DS3231): El DS3231 es un reloj en tiempo real (RTC) I2C extremadamente preciso y de bajo costo con un oscilador de cristal integrado con compensación de temperatura (TCXO) y un cristal. El dispositivo incorpora una entrada de batería y mantiene una indicación de la hora precisa cuando la alimentación principal a
Solucionador con los ojos vendados del cubo de Rubik en tiempo real con Raspberry Pi y OpenCV: 4 pasos
Solucionador con los ojos vendados del cubo de Rubik en tiempo real con Raspberry Pi y OpenCV: esta es la segunda versión de la herramienta del cubo de Rubik hecha para resolver con los ojos vendados. La 1ª versión fue desarrollada por javascript, se puede ver el proyecto RubiksCubeBlindfolded1A diferencia de la anterior, esta versión utiliza la librería OpenCV para detectar los colores y e
Un medidor de nivel de agua de pozo en tiempo real: 6 pasos (con imágenes)
Un medidor de nivel de agua de pozo en tiempo real: estas instrucciones describen cómo construir un medidor de nivel de agua en tiempo real y de bajo costo para usar en pozos excavados. El medidor de nivel de agua está diseñado para colgar dentro de un pozo excavado, medir el nivel del agua una vez al día y enviar los datos por WiFi o conexión celular
Un medidor de temperatura, conductividad y nivel de agua de pozo en tiempo real: 6 pasos (con imágenes)
Un medidor de temperatura, conductividad y nivel de agua de pozo en tiempo real: estas instrucciones describen cómo construir un medidor de agua de bajo costo en tiempo real para monitorear la temperatura, la conductividad eléctrica (CE) y los niveles de agua en pozos excavados. El medidor está diseñado para colgar dentro de un pozo excavado, medir la temperatura del agua, CE y
Wiggly Wobbly - ¡Vea las ondas sonoras! Visualizador de audio en tiempo real !!: 4 pasos
Wiggly Wobbly - ¡Vea las ondas sonoras! Visualizador de audio en tiempo real !!: ¿Alguna vez te has preguntado cómo se ven las canciones de Beetle? ¿O simplemente quieres ver cómo se ve un sonido? ¡Entonces no te preocupes, estoy aquí para ayudarte a hacerlo reeeeaaalll