Taula de continguts:
- Pas 1: components necessaris
- Pas 2: Especificacions tècniques
- Pas 3: diagrames de circuits
- Pas 4: aplicacions i IDE necessaris
- Pas 5: codis rellevants per a tot
- Pas 6: configurar-lo
- Pas 7: resultats / vídeos
Vídeo: Convertidor d'àudio a MIDI en temps real: 7 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
Namaste gent! Aquest és un projecte en el qual vaig treballar en un dels meus cursos (Processament de senyal digital en temps real) al meu programa de batxillerat. El projecte té com a objectiu crear un sistema DSP que "escolti" dades d'àudio i emeti missatges MIDI de les notes corresponents a través d'UART. Arduino Nano es va utilitzar per a aquest propòsit. En resum, el microcontrolador fa un FFT sobre les dades d'àudio entrants i fa una anàlisi dels pics i envia el missatge MIDI adequat. No us preocupeu pels MOSFET, ja que són per a algun altre projecte (que també es publicarà més endavant en instruccions) i no són necessaris per a aquest projecte. Així que comencem ja !!
Pas 1: components necessaris
Necessitarem els components següents per construir aquest projecte, tot i que molts d’ells són genèrics i es poden substituir pels seus equivalents. Consulteu també el diagrama del circuit per treballar i buscar millors implementacions.
Quantitat de components
1. Micròfon Electret. 1
2. Resistència de 30 quilos Ohm. 1
3. Resistència de 150 quilos Ohm. 1
4. Resistència de 100 ohm. 1
5. Resistències de 2,2 quilos Ohm. 3
6. Pot predefinit de 10 quilos Ohm. 1
7. Pot de retallador de 10 quilos Ohm. 1
8. Pot estèreo de 47 quilos Ohm. 1
9. Resistències de 470 Ohms. 2
10. Condensadors de 0,01uF. 2
11. Condensadors 2.2uF. 3
12. Condensadors de 47uF. 2
13. Condensador de 1000uF. 1
14. Condensador de 470uF. 1
15. Regulador de tensió 7805. 1
16. Franja de capçalera femení i masculí. 1 cadascun
17. Connector Jack Barrel. 1
18. Adaptador de CC de 12 V 1 Amp. 1
19. Commutador SPST. (Opcional) 1
20. Perfboard. 1
Pas 2: Especificacions tècniques
Freqüència de mostreig: 3840 mostres / seg
Nombre de mostres per FFT: 256
Resolució de freqüència: 15Hz
Freqüència d’actualització: al voltant de 15 Hz
Les escales més baixes i superiors de les notes musicals no es capturen correctament. Les notes més baixes pateixen una resolució de baixa freqüència, quan les freqüències més altes pateixen taxes de mostreig baixes. L’arduino ja no té memòria, de manera que no hi ha manera d’obtenir una millor resolució. I una millor resolució tindrà un cost de taxa d’actualització reduïda, de manera que el compromís és inevitable. Versió laica del principi d’incertesa de Heisenberg.
La dificultat principal és l’espaiat exponencial entre notes (tal com es veu a la figura. Tot impuls a l’eix de freqüència és una nota musical). Algoritmes com LFT poden ajudar, però això és una mica avançat i poc complicat per a un dispositiu com arduino Nano.
Pas 3: diagrames de circuits
Nota: No us molesteu els tres MOSFET ni els terminals de cargol de les imatges. No són necessaris per a aquest projecte. Tingueu en compte que la placa d’entrada del micròfon és extraïble o com s’anomenen modular. A continuació es dóna una petita descripció dels diferents blocs.
1) Les dues resistències de 470 ohm combinen el senyal d'àudio estèreo amb el senyal d'àudio mono. Assegureu-vos que la terra del senyal entra a terra virtual (vg al diagrama del circuit) i no a terra del circuit.
2) El següent bloc és un filtre de pas baix de 2a ordre sallen, que s’encarrega de limitar la banda del senyal d’entrada per evitar l’aliasing. Com que estem treballant només amb un subministrament de + 12v, esbiaixarà l’amplificador operatiu fent un divisor de voltatge RC. això enganya l’amplificador operacional pensant que el subministrament és de 6 0-6 volts d’alimentació (doble carril) on vg és la referència de terra per a l’amplificador operatiu.
3) A continuació, la sortida es filtra de pas baix per bloquejar el desplaçament de CC de 6 volts i es combina amb CC d’uns 0,55 volts perquè l’ADC es configurarà per utilitzar l’1,1 v intern com a Vref.
Nota: el preamplificador per al micròfon electret no és el millor circuit d'Internet. Un circuit amb amplificador operatiu hauria estat una millor opció. Desitgem que la resposta en freqüència sigui el més plana possible. L’olla estèreo de 47 quilos d’ohms s’utilitza per definir la freqüència de tall que normalment hauria de ser la meitat de la freqüència de mostreig. El valor predeterminat de 10 quilos d’ohm (El pot petit amb cap blanc) s’utilitza per ajustar el guany i el valor Q del filtre. El pot de retallador de 10 quilos (un amb un comandament metàl·lic que s’assembla a un petit cargol de cap pla) s’utilitza per configurar el voltatge de la meitat de Vref.
Nota: quan connecteu el Nano a P. C. mantingueu l'interruptor SPST obert en qualsevol altre lloc tancat. Tingueu especial cura que si no ho feu, pot perjudicar el circuit / ordinador / regulador de tensió o qualsevol combinació dels anteriors
Pas 4: aplicacions i IDE necessaris
- Per codificar l’Arduino Nano, vaig anar amb el primitiu AVR studio 5.1 perquè sembla que funciona per a mi. Podeu trobar l’instal·lador aquí.
- Per programar l'Arduino Nano he utilitzat Xloader. És una eina lleugera molt fàcil d'utilitzar per gravar fitxers.hex a Arduinos. Ho podeu aconseguir aquí.
- Per a un petit projecte de bonificació i ajustament del circuit he utilitzat el processament. Podeu obtenir-lo des d'aquí, tot i que feu que hi hagi canvis importants en cada revisió, de manera que és possible que hàgiu de jugar amb funcions obsoletes per fer que l'esbós funcioni.
- FL studio o qualsevol altre programari de processament MIDI. Podeu obtenir la versió d’accés limitat de FL studio gratuïtament des d’aquí.
- Loop MIDI crea un port MIDI virtual i és detectat per FL studio com si fos un dispositiu MIDI. Obteniu una còpia del mateix des d’aquí.
- El MIDI sense pèl s’utilitza per llegir missatges MIDI des del port COM i enviar-lo al buc MIDI. També depura els missatges MIDI en temps real, cosa que facilita la depuració. Obteniu Hairless MIDI des d’aquí.
Pas 5: codis rellevants per a tot
M'agradaria agrair a Electronic Lifes MFG (Website Here !!) la biblioteca FFT de punt fix que he utilitzat en aquest projecte. La biblioteca està optimitzada per a la mega família AVR. Aquest és l'enllaç als fitxers i codis de la biblioteca que va utilitzar. A continuació adjunto el meu codi. Inclou l'esbós de processament i el codi AVR C. Tingueu en compte que aquesta és la configuració que ha funcionat per a mi i no em faig responsable de cap mena de danys a causa d'aquests codis. A més, vaig tenir molts problemes intentant que el codi funcionés. Per exemple, DDRD (Data Direction Register) té DDDx (x = 0-7) com a màscares de bits en lloc del DDRDx convencional (x = 0-7). Vigileu aquests errors mentre compileu. També canviar el microcontrolador afecta aquestes definicions, de manera que tingueu-ne en compte mentre es tracta d’errors de compilació. I si us pregunteu per què la carpeta del projecte es diu DDT_Arduino_328p.rar, bé diguem que era molt fosc al vespre quan vaig començar i em feia prou mandra no encendre els llums.: Pàg
En arribar a l’esbós de processament, he utilitzat el processament 3.3.6 per escriure aquest esbós. Haureu d’establir manualment el número de port COM a l’esbós. Podeu consultar els comentaris al codi.
Si algú em pot ajudar a portar els codis a Arduino IDE i a la versió de processament més recent, estaré encantat i també donaré crèdits als desenvolupadors / col·laboradors.
Pas 6: configurar-lo
- Obriu el codi i compileu-lo amb #define pcvisual sense comentar i #define midi_out comentat.
- Obriu xloader i aneu al directori amb codi, aneu al fitxer.hex i aneu-lo a nano seleccionant la placa i el port COM adequats.
- Obriu l'esbós de processament i executeu-lo amb l'índex de port COM adequat. Si tot va bé, hauríeu de poder veure un espectre del senyal al pin A0.
- Aconseguiu un tornavís i gireu l’olla de tall fins que l’espectre quedi pla (el component de corrent continu ha de ser proper a zero). No introduïu cap senyal al tauler. (No connecteu el mòdul de micròfon).
- Ara utilitzeu qualsevol eina de generació d’escombrat com aquesta per donar entrada a la placa des del micro-telèfon i observar l’espectre.
- Si no veieu un escombrat de freqüències, reduïu la freqüència de tall canviant la resistència de 47 quilos ohm. També augmenteu el guany utilitzant el pot predefinit de 10 quilos d’ohm. Intenteu obtenir una sortida d’escombrat plana i destacada canviant aquests paràmetres. Aquesta és la part divertida (el petit avantatge!), Reprodueix les teves cançons preferides i gaudeix del seu espectre en temps real. (Mira el vídeo)
- Ara torneu a compilar el codi C incrustat aquesta vegada amb #define pcvisual comentat i #define midi_out sense comentar.
- Torneu a carregar el nou codi compilat a arduino Nano.
- Obriu LoopMidi i creeu un port nou.
- Obriu FL Studio o un altre programari d'interfície MIDI i assegureu-vos que el port midi del bucle sigui visible a la configuració del port MIDI.
- MIDI sense pèl obert amb arduino connectat. Seleccioneu el port de sortida per ser el port LoopMidi. Aneu a la configuració i configureu la velocitat de transmissió en 115200. Ara seleccioneu el port COM corresponent a Arduino Nano i obriu el port.
- Toca uns tons "purs" a prop del micròfon i també hauries d'escoltar la nota corresponent al programari MIDI. Si no hi ha resposta, proveu de reduir up_threshold definit al codi C. Si les notes es desencadenen de forma aleatòria, augmenteu el up_threshold.
- Aconsegueix el teu piano i prova la velocitat del teu sistema! El millor és que a la zona de bloqueig daurat de les notes, pot detectar fàcilment diverses pulsacions simultànies de tecles.
Nota: Quan una aplicació accedeix al port COM, una altra no la pot llegir. Per exemple, si el MIDI sense pèl llegia el port COM, Xloader no seria capaç de fer flaixar la placa
Pas 7: resultats / vídeos
Això és tot per ara nois! Espero que t'agradi. Si teniu algun suggeriment o millora en el projecte, feu-m'ho saber a la secció de comentaris. Pau!
Recomanat:
Com utilitzar un mòdul de rellotge en temps real (DS3231): 5 passos
Com utilitzar un mòdul de rellotge en temps real (DS3231): el DS3231 és un rellotge en temps real (RTC) I2C de baix cost i extremadament precís amb un oscil·lador de cristall compensat per temperatura (TCXO) i cristall. El dispositiu incorpora una entrada de bateria i manté una cronometra
Solucionador de ulls tapats de Rubik's Cube en temps real amb Raspberry Pi i OpenCV: 4 passos
Solucionador de ulls embenats del cub de Rubik en temps real que utilitza Raspberry Pi i OpenCV: Aquesta és la segona versió de l’eina de cubs de Rubik feta per resoldre amb els ulls embenats. La primera versió va ser desenvolupada per javascript, podeu veure el projecte RubiksCubeBlindfolded1A diferència de l’anterior, aquesta versió utilitza la biblioteca OpenCV per detectar els colors i
Mesurador de nivell d’aigua de pou en temps real: 6 passos (amb imatges)
Un mesurador de nivell d’aigua de pou en temps real: aquestes instruccions descriuen com construir un mesurador de nivell d’aigua en temps real de baix cost per utilitzar-lo en pous excavats. El mesurador de nivell d'aigua està dissenyat per penjar dins d'un pou excavat, mesurar el nivell de l'aigua un cop al dia i enviar les dades per WiFi o connexió cel·lular
Wiggly Wobbly - Veure les ones de so !! Visualitzador d'àudio en temps real !!: 4 passos
Wiggly Wobbly - Veure les ones de so !! Visual Time Audio Visualizer !!: Us heu preguntat mai com són les cançons de Beetle ?? O simplement voleu veure com es veu un so ?? Llavors no us preocupeu, estic aquí per ajudar-vos a fer-lo reeeeaaalll !!! Feu pujar el vostre altaveu i apunteu als desapareguts
Visualització de temps i temps Arduino 3 en 1: 11 passos
Pantalla de temps i temps Arduino 3-en-1: m'agraden els microcontroladors PIC i m'agrada programar en llenguatge assemblador. De fet, durant els darrers dos anys, he publicat al meu lloc web uns 40 projectes basats en aquesta combinació. Fa poc, estava demanant algunes peces a una de les meves versions preferides dels EUA