Sommario:

Convertitore da audio a MIDI in tempo reale.: 7 passaggi
Convertitore da audio a MIDI in tempo reale.: 7 passaggi

Video: Convertitore da audio a MIDI in tempo reale.: 7 passaggi

Video: Convertitore da audio a MIDI in tempo reale.: 7 passaggi
Video: Convertire file Audio in file MIDI in pochi secondi 2024, Luglio
Anonim
Convertitore da audio a MIDI in tempo reale
Convertitore da audio a MIDI in tempo reale

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

Componenti richiesti
Componenti richiesti

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

Specifiche tecniche
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

Schemi circuitali
Schemi circuitali
Schemi circuitali
Schemi circuitali
Schemi circuitali
Schemi circuitali
Schemi circuitali
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

Applicazioni e IDE necessari
Applicazioni e IDE necessari
Applicazioni e IDE necessari
Applicazioni e IDE necessari
Applicazioni e IDE necessari
Applicazioni e IDE necessari
Applicazioni e IDE necessari
Applicazioni e IDE necessari
  1. 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.
  2. Per programmare Arduino Nano ho usato Xloader. È uno strumento leggero e davvero facile da usare per masterizzare file.hex su Arduino. Puoi ottenerlo qui.
  3. 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.
  4. FL studio o qualsiasi altro software di elaborazione MIDI. Puoi ottenere la versione ad accesso limitato di FL Studio gratuitamente da qui.
  5. 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.
  6. 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

  1. Apri il codice e compila il codice con #define pcvisual non commentato e #define midi_out commentato.
  2. 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.
  3. 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.
  4. 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).
  5. Ora usa uno strumento generatore di sweep come questo per dare input alla scheda dal microfono e osservare lo spettro.
  6. 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)
  7. Ora compila di nuovo il codice C incorporato questa volta con #define pcvisual commentato e #define midi_out non commentato.
  8. Ricarica il nuovo codice compilato su arduino Nano.
  9. Apri LoopMidi e crea una nuova porta.
  10. 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.
  11. 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.
  12. 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.
  13. 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: