Taula de continguts:

Convertidor d'àudio a MIDI en temps real: 7 passos
Convertidor d'àudio a MIDI en temps real: 7 passos

Vídeo: Convertidor d'àudio a MIDI en temps real: 7 passos

Vídeo: Convertidor d'àudio a MIDI en temps real: 7 passos
Vídeo: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, De novembre
Anonim
Convertidor d'àudio a MIDI en temps real
Convertidor d'àudio a MIDI en temps real

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

Components necessaris
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

Especificacions tècniques
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

Diagrames de circuits
Diagrames de circuits
Diagrames de circuits
Diagrames de circuits
Diagrames de circuits
Diagrames de circuits
Diagrames de circuits
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

Aplicacions i IDE necessaris
Aplicacions i IDE necessaris
Aplicacions i IDE necessaris
Aplicacions i IDE necessaris
Aplicacions i IDE necessaris
Aplicacions i IDE necessaris
Aplicacions i IDE necessaris
Aplicacions i IDE necessaris
  1. 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í.
  2. 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í.
  3. 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.
  4. 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í.
  5. 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í.
  6. 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

  1. Obriu el codi i compileu-lo amb #define pcvisual sense comentar i #define midi_out comentat.
  2. 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.
  3. 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.
  4. 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).
  5. 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.
  6. 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)
  7. Ara torneu a compilar el codi C incrustat aquesta vegada amb #define pcvisual comentat i #define midi_out sense comentar.
  8. Torneu a carregar el nou codi compilat a arduino Nano.
  9. Obriu LoopMidi i creeu un port nou.
  10. 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.
  11. 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.
  12. 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.
  13. 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: