Sommario:
- Passaggio 1: componenti necessari
- Passaggio 2: Specifiche tecniche
- Passaggio 3: schemi circuitali
- Passaggio 4: applicazioni e IDE necessari
- Passaggio 5: codici rilevanti per tutto
- Passaggio 6: configurazione
- Passaggio 7: risultati/video
Video: Convertitore da audio a MIDI in tempo reale.: 7 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
Namasté gente! Questo è un progetto a cui ho lavorato per uno dei miei corsi (elaborazione del segnale digitale in tempo reale) nel mio programma di laurea. Il progetto mira a realizzare un sistema DSP che "ascolta" i dati audio ed emette messaggi MIDI delle note corrispondenti su UART. Arduino Nano è stato utilizzato per questo scopo. Per farla breve, il microcontrollore esegue una FFT sui dati audio in ingresso, esegue alcune analisi dei picchi e invia un messaggio MIDI appropriato. Non preoccuparti dei MOSFET però perché sono per qualche altro progetto (che verrà presentato anche in seguito) e non sono necessari per questo progetto. Allora cominciamo già!!
Passaggio 1: componenti necessari
Avremo bisogno dei seguenti componenti per costruire questo progetto, anche se molti di questi sono generici e possono essere sostituiti con i loro equivalenti. Fare riferimento anche allo schema del circuito per elaborare e cercare implementazioni migliori.
Quantità componenti
1. Microfono elettrete. 1
2. Resistenza da 30 chilo ohm. 1
3. Resistenza da 150 chilo ohm. 1
4. Resistenza da 100 ohm. 1
5. Resistenze da 2,2 Kilo Ohm. 3
6. Pentola preimpostata da 10 Kilo Ohm. 1
7. Vaso trimmer da 10 Kilo Ohm. 1
8. Potente stereo da 47 Kilo Ohm. 1
9. Resistenze da 470 Ohm. 2
10. Condensatori da 0,01 uF. 2
11. Condensatori da 2.2uF. 3
12. Condensatori da 47uF. 2
13. Condensatore da 1000uF. 1
14. Condensatore da 470uF. 1
15. 7805 regolatore di tensione. 1
16. Striscia di intestazione femmina e maschio. 1 ciascuno
17. Connettore jack cilindrico. 1
18. Adattatore CC da 12 V 1 Amp. 1
19. Interruttore SPST. (Opzionale) 1
20. Tavola di prestazione. 1
Passaggio 2: Specifiche tecniche
Frequenza di campionamento: 3840 campioni/sec
Numero di campioni per FFT: 256
Risoluzione di frequenza: 15Hz
Frequenza di aggiornamento: circa 15 Hz
Le scale inferiori e superiori delle note musicali non vengono catturate correttamente. Le note più basse soffrono di una risoluzione a bassa frequenza, mentre le frequenze più alte soffrono di basse frequenze di campionamento. L'arduino ha già esaurito la memoria, quindi non c'è modo di ottenere una risoluzione migliore. E una migliore risoluzione avrà un costo di una frequenza di aggiornamento ridotta, quindi il compromesso è inevitabile. Versione laica del principio di indeterminazione di Heisenberg.
La difficoltà principale è la spaziatura esponenziale tra le note (come si vede nella figura. Ogni impulso sull'asse delle frequenze è una nota musicale). Algoritmi come LFT potrebbero aiutare, ma è un po' avanzato e poco complicato per un dispositivo come Arduino Nano.
Passaggio 3: schemi circuitali
Nota: non essere disturbato dai tre MOSFET e dai terminali a vite nelle immagini. Non sono necessari per questo progetto. Notare che la scheda di ingresso del microfono è rimovibile o come la chiamano modulare. Di seguito viene fornita una piccola descrizione dei vari blocchi.
1) Le due resistenze da 470 ohm uniscono il segnale audio stereo al segnale audio mono. Assicurarsi che la massa del segnale in ingresso vada alla massa virtuale (vg nello schema elettrico) e non alla massa del circuito.
2) Il blocco successivo è un filtro passa basso a chiave sallen di 2° ordine che è responsabile della limitazione della banda del segnale di ingresso per evitare l'aliasing. Poiché stiamo lavorando solo con un'alimentazione a +12v, biasimiamo l'amplificatore operazionale creando un partitore di tensione RC. che inganna l'amplificatore operazionale facendogli pensare che l'alimentazione sia di 6 0 -6 volt (dual rail) dove vg è il riferimento di massa per l'amplificatore operazionale.
3) Quindi l'uscita viene filtrata passa basso per bloccare l'offset DC di 6 volt e accoppiata con DC di circa 0,55 volt perché l'ADC sarà configurato per utilizzare l'1.1 v interno come Vref.
Nota: il preamplificatore per il microfono elettrete non è il miglior circuito su Internet. Un circuito che coinvolgesse l'amplificatore operazionale sarebbe stata una scelta migliore. Desideriamo che la risposta in frequenza sia il più piatta possibile. Il potenziometro stereo da 47 kilo ohm viene utilizzato per definire la frequenza di taglio che dovrebbe essere tipicamente la metà della frequenza di campionamento. Il preset da 10 kilo ohm (The small pot with white head) viene utilizzato per regolare il guadagno e il valore Q del filtro. Il trimmer pot da 10 kilo ohm (uno con una manopola di sintonia metallica che sembra una piccola vite a testa piatta) viene utilizzato per impostare la tensione in modo che sia vicina a metà Vref.
Nota: quando colleghi il Nano al P. C. tenere l'interruttore SPST aperto altrimenti chiuso. Prestare particolare attenzione in quanto in caso contrario si potrebbe danneggiare il circuito/computer/regolatore di tensione o qualsiasi combinazione di quanto sopra
Passaggio 4: applicazioni e IDE necessari
- Per codificare Arduino Nano sono andato con il primitivo AVR studio 5.1 perché sembra funzionare per me. Puoi trovare il programma di installazione qui.
- Per programmare Arduino Nano ho usato Xloader. È uno strumento leggero e davvero facile da usare per masterizzare file.hex su Arduino. Puoi ottenerlo qui.
- Per un piccolo bonus mini progetto e la messa a punto del circuito ho usato l'elaborazione. Puoi ottenerlo da qui anche se ci sono importanti cambiamenti in ogni revisione, quindi potresti dover giocherellare con funzioni deprecate per far funzionare lo schizzo.
- FL studio o qualsiasi altro software di elaborazione MIDI. Puoi ottenere la versione ad accesso limitato di FL Studio gratuitamente da qui.
- Loop MIDI crea una porta MIDI virtuale e viene rilevato da FL studio come se fosse un dispositivo MIDI. Prendi una copia dello stesso da qui.
- Hairless MIDI viene utilizzato per leggere i messaggi MIDI dalla porta COM e inviarli alla porta MIDI loop. Esegue anche il debug dei messaggi MIDI in tempo reale, il che rende conveniente il debug. Ottieni MIDI Hairless da qui.
Passaggio 5: codici rilevanti per tutto
Vorrei ringraziare Electronic Lifes MFG (Website Here!!) per la libreria FFT a punto fisso che ho utilizzato in questo progetto. La libreria è ottimizzata per la famiglia Mega AVR. Questo è il collegamento ai file della libreria e ai codici che ha usato. Allego di seguito il mio codice. Include anche lo schizzo di elaborazione e il codice AVR C. Tieni presente che questa è la configurazione che ha funzionato per me e non mi assumo alcuna responsabilità se danneggi qualcosa a causa di questi codici. Inoltre, ho avuto molti problemi nel tentativo di far funzionare il codice. Ad esempio, DDRD (Data Direction Register) ha DDDx (x = 0-7) come maschere di bit invece del convenzionale DDRDx (x = 0-7). Fai attenzione a questi errori durante la compilazione. Anche la modifica del microcontrollore influisce su queste definizioni, quindi tieni d'occhio anche questo mentre gestisci gli errori di compilazione. E se ti stai chiedendo perché la cartella del progetto si chiama DDT_Arduino_328p.rar, diciamo che era molto buio la sera quando ho iniziato ed ero abbastanza pigro da non accendere le luci.:P
Venendo allo schizzo di elaborazione, ho usato l'elaborazione 3.3.6 per scrivere questo schizzo. Dovrai impostare manualmente il numero della porta COM nello schizzo. Puoi controllare i commenti nel codice.
Se qualcuno può aiutarmi a portare i codici su Arduino IDE e l'ultima versione di elaborazione, sarei felice e darò crediti anche agli sviluppatori e ai collaboratori.
Passaggio 6: configurazione
- Apri il codice e compila il codice con #define pcvisual non commentato e #define midi_out commentato.
- Apri xloader e cerca la directory con il codice, cerca il file.hex e masterizzalo su nano selezionando la scheda e la porta COM appropriate.
- Apri lo schizzo di elaborazione ed eseguilo con l'indice della porta COM appropriato. Se tutto va bene dovresti essere in grado di vedere uno spettro del segnale sul pin A0.
- Procurati un cacciavite e ruota il trimmer fino a quando lo spettro è piatto (la componente DC dovrebbe essere vicina allo zero). Quindi non inviare alcun segnale alla scheda. (Non collegare il modulo microfono).
- Ora usa uno strumento generatore di sweep come questo per dare input alla scheda dal microfono e osservare lo spettro.
- Se non vedi uno sweep di frequenze, diminuisci la frequenza di taglio modificando la resistenza di 47 kilo ohm. Aumenta anche il guadagno usando il potenziometro preimpostato da 10 kilo ohm. Cerca di ottenere un'uscita di scansione piatta e prominente modificando questi parametri. Questa è la parte divertente (il piccolo bonus!), Suona le tue canzoni preferite e goditi il loro spettro in tempo reale. (Guarda il video)
- Ora compila di nuovo il codice C incorporato questa volta con #define pcvisual commentato e #define midi_out non commentato.
- Ricarica il nuovo codice compilato su arduino Nano.
- Apri LoopMidi e crea una nuova porta.
- Apri FL studio o un altro software di interfaccia MIDI e assicurati che la porta MIDI del loop sia visibile nelle impostazioni della porta MIDI.
- Apri MIDI glabro con arduino collegato. Seleziona la porta di uscita come porta LoopMidi. Vai alle impostazioni e imposta il Baud rate su 115200. Ora seleziona la porta COM corrispondente ad Arduino Nano e apri la porta.
- Suona alcuni toni "puri" vicino al microfono e dovresti sentire la nota corrispondente anche nel software MIDI. Se non c'è risposta prova ad abbassare up_threshold definito nel codice C. Se le note vengono attivate casualmente, aumenta la soglia_up.
- Prendi il tuo pianoforte e prova quanto è veloce il tuo sistema!! La cosa migliore è che nella zona dorata delle note può rilevare facilmente più pressioni di tasti simultanee.
Nota: quando un'applicazione accede alla porta COM, non può essere letta da un'altra. Ad esempio, se Hairless MIDI leggeva la porta COM, Xloader non sarebbe in grado di eseguire il flashing della scheda
Passaggio 7: risultati/video
Per ora è tutto ragazzi! Spero ti piaccia. Se avete suggerimenti o miglioramenti nel progetto fatemelo sapere nella sezione commenti. La pace!
Consigliato:
Come utilizzare un modulo orologio in tempo reale (DS3231): 5 passaggi
Come utilizzare un modulo orologio in tempo reale (DS3231): Il DS3231 è un orologio in tempo reale (RTC) I2C a basso costo ed estremamente accurato con un oscillatore a cristallo integrato con compensazione della temperatura (TCXO) e cristallo. Il dispositivo incorpora un ingresso batteria e mantiene un cronometraggio accurato quando l'alimentazione principale al th
Risolutore bendato del cubo di Rubik in tempo reale utilizzando Raspberry Pi e OpenCV: 4 passaggi
Risolutore bendato del cubo di Rubik in tempo reale utilizzando Raspberry Pi e OpenCV: questa è la seconda versione dello strumento cubo di Rubik realizzato per la risoluzione con gli occhi bendati. La prima versione è stata sviluppata da javascript, puoi vedere il progetto RubiksCubeBlindfolded1 A differenza della precedente, questa versione utilizza la libreria OpenCV per rilevare i colori ed e
Crea bellissimi grafici dai dati di Arduino in tempo reale (e salva i dati in Excel): 3 passaggi
Crea bellissimi grafici dai dati di Arduino in tempo reale (e salva i dati in Excel): a tutti noi piace giocare con la nostra funzione P…lotter nell'IDE di Arduino. Tuttavia, sebbene possa essere utile per le applicazioni di base, i dati vengono cancellati man mano che più si aggiungono punti e non è particolarmente gradevole alla vista. Il plotter Arduino IDE non
Tracker Covid19 in tempo reale che utilizza ESP8266 e OLED - Dashboard Covid19 in tempo reale: 4 passaggi
Tracker Covid19 in tempo reale che utilizza ESP8266 e OLED | Dashboard Covid19 in tempo reale: visita il sito Web Techtronic Harsh: http://techtronicharsh.com Ovunque c'è un enorme focolaio del Novel Corona Virus (COVID19). È diventato necessario tenere d'occhio l'attuale scenario di COVID-19 nel mondo. Quindi, essendo a casa, questo è stato il p
Wiggly Wobbly - Guarda le onde sonore !! Visualizzatore audio in tempo reale !!: 4 passaggi
Wiggly Wobbly - Guarda le onde sonore !! Visualizzatore audio in tempo reale !!: Ti sei mai chiesto come sono le canzoni di Beetle ?? O vuoi semplicemente vedere come appare un suono ??Allora non preoccuparti, sono qui per aiutarti a renderlo reeeeeaaalll !!!Alza il tuo altoparlante e punta al sbiadito