Kazalo:

Pretvornik zvoka v MIDI v realnem času .: 7 korakov
Pretvornik zvoka v MIDI v realnem času .: 7 korakov

Video: Pretvornik zvoka v MIDI v realnem času .: 7 korakov

Video: Pretvornik zvoka v MIDI v realnem času .: 7 korakov
Video: CS50 2013 - Week 4 2024, Julij
Anonim
Pretvornik zvoka v MIDI v realnem času
Pretvornik zvoka v MIDI v realnem času

Namaste ljudje! To je projekt, na katerem sem delal za enega od svojih tečajev (Real-Time Digital Signal Processing) v mojem prvošolskem programu. Namen projekta je izdelati sistem DSP, ki "posluša" zvočne podatke in oddaja MIDI sporočila ustreznih zapiskov prek UART. V ta namen je bil uporabljen Arduino Nano. Na kratko povedano, mikrokrmilnik naredi FFT na vhodnih zvočnih podatkih in opravi analizo vrhov ter pošlje ustrezno sporočilo MIDI. Naj vas MOSFET -i ne motijo, ker so za kakšen drug projekt (ki bo kasneje objavljen tudi pri navodilih) in za ta projekt niso potrebni. Pa začnimo že !!

1. korak: potrebne komponente

Potrebne komponente
Potrebne komponente

Za izdelavo tega projekta bomo potrebovali naslednje komponente, čeprav so mnoge od njih generične in jih je mogoče nadomestiti z enakovrednimi. Oglejte si tudi shemo vezja, če želite razviti in poiskati boljše izvedbe.

Količina komponente

1. Električni mikrofon. 1

2. Upor 30 Kilo ohmov. 1

3. 150 Kilo ohmov upor. 1

4. 100 ohmski upor. 1

5. 2.2 Kilo ohmski upori. 3

6. Prednastavljen lonec 10 Kilo ohmov. 1

7. Lonec za obrezovanje 10 Kilo Ohm. 1

8. 47 Kilo ohmov stereo lonec. 1

9. 470 ohmski upori. 2

10. 0,01uF kondenzatorji. 2

11. 2.2uF kondenzatorji. 3

12. 47uF kondenzatorji. 2

13. 1000uF kondenzator. 1

14. 470uF kondenzator. 1

15. 7805 regulator napetosti. 1

16. Ženski in moški trak glave. 1 vsak

17. Priključek za sodček. 1

18. 12 V 1 Amp enosmerni adapter. 1

19. Stikalo SPST. (Neobvezno) 1

20. Perfboard. 1

2. korak: Tehnične specifikacije

Tehnične specifikacije
Tehnične specifikacije

Pogostost vzorčenja: 3840 vzorcev/s

Število vzorcev na FFT: 256

Frekvenčna ločljivost: 15Hz

Hitrost osveževanja: približno 15 Hz

Spodnja in višja lestvica glasbenih not niso pravilno zajete. Nižje note trpijo zaradi nizke frekvenčne ločljivosti, medtem ko višje frekvence trpijo zaradi nizkih vzorcev. Arduinu je že zmanjkalo pomnilnika, zato ni možnosti za boljšo ločljivost. Boljša ločljivost bo nastala zaradi znižane hitrosti osveževanja, zato je kompromis neizogiben. Laična različica Heisenbergovega načela negotovosti.

Primarna težava je eksponentni razmik med notami (Kot je prikazano na sliki. Vsak impulz na frekvenčni osi je glasbena nota). Algoritmi, kot je LFT, bi lahko pomagali, vendar je to nekoliko napredno in malo zapleteno za napravo, kot je arduino Nano.

3. korak: Sheme vezja

Sheme vezja
Sheme vezja
Sheme vezja
Sheme vezja
Sheme vezja
Sheme vezja
Sheme vezja
Sheme vezja

Opomba: Naj vas ne motijo trije MOSFET -i in vijačne sponke na slikah. Za ta projekt niso potrebni. Upoštevajte, da je vhodna plošča mikrofona odstranljiva ali kot jo imenujejo modularna. Spodaj je majhen opis različnih blokov.

1) Oba 470 ohmska upora ujemata stereo zvočni signal z mono zvočnim signalom. Prepričajte se, da ozemljitev signala vstopa v virtualno ozemljitev (vg v diagramu vezja) in ne v maso vezja.

2) Naslednji blok je nizkoprepustni filter s sallen ključem drugega reda, ki je odgovoren za omejevanje pasu vhodnega signala, da se izogne vzdevku. Ker delamo samo z napajanjem +12V, smo op-amp ojačali z izdelavo delitelja napetosti RC. to zavede operacijski ojačevalnik, da misli, da je napajanje 6 0 -6 voltov (dvojno vodilo), kjer je vg referenca na tleh za ojačevalnik.

3) Nato se nizkoprepustni izhod filtrira, da blokira DC odmik 6 voltov in je povezan z enosmernim tokom približno 0,55 voltov, ker bo ADC konfiguriran za uporabo notranjega 1,1 v kot Vref.

Opomba: Predojačevalnik za elektronski mikrofon ni najboljše vezje na internetu. Vezje z op-amp-om bi bilo boljša izbira. Želimo si, da bi bil frekvenčni odziv čim bolj raven. Stereo lonec 47 kilo ohmov se uporablja za določanje mejne frekvence, ki mora biti običajno polovica frekvence vzorčenja. Prednastavitev 10 kilo ohmov (majhen lonec z belo glavo) se uporablja za nastavitev ojačanja in vrednosti Q filtra. Trimer za 10 kg ohma (tisti s kovinskim gumbom za nastavitev, ki je videti kot majhen vijak z ravno glavo) se uporablja za nastavitev napetosti tako blizu polovice Vref.

Opomba: Ko priključujete Nano na P. C. Stikalo SPST imejte odprto, sicer zaprto. Če tega ne storite, bodite posebno pozorni, saj lahko poškoduje vezje/računalnik/regulator napetosti ali katero koli kombinacijo zgoraj navedenega

4. korak: Potrebne aplikacije in IDE

Potrebne aplikacije in IDE
Potrebne aplikacije in IDE
Potrebne aplikacije in IDE
Potrebne aplikacije in IDE
Potrebne aplikacije in IDE
Potrebne aplikacije in IDE
Potrebne aplikacije in IDE
Potrebne aplikacije in IDE
  1. Za kodiranje Arduino Nano sem šel s primitivnim AVR studiem 5.1, ker se mi zdi, da deluje. Namestitveni program najdete tukaj.
  2. Za programiranje Arduino Nano sem uporabil Xloader. Njegovo zelo enostavno orodje za zapisovanje.hex datotek v Arduinos. Lahko ga dobite tukaj.
  3. Za majhen bonus mini projekt in uglaševanje vezja sem uporabil obdelavo. To lahko dobite tukaj, čeprav so v vsaki reviziji velike spremembe, zato se boste morda morali poigrati z zastarelimi funkcijami, da bo skica delovala.
  4. FL studio ali katero koli drugo programsko opremo za obdelavo MIDI. Tukaj lahko brezplačno dobite različico z omejenim dostopom FL studio.
  5. Loop MIDI ustvari navidezna vrata MIDI in jih FL studio zazna, kot da je naprava MIDI. Od tu dobite kopijo istega.
  6. Brez dlake MIDI se uporablja za branje MIDI sporočil iz vrat COM in pošiljanje v zankasta vrata MIDI. Prav tako odpravlja napake MIDI sporočil v realnem času, zaradi česar je odpravljanje napak priročno. Pridobite Hairless MIDI od tukaj.

5. korak: Ustrezne kode za vse

Rad bi se zahvalil Electronic Lifes MFG (Website Here !!) za knjižnico FFT s fiksno točko, ki sem jo uporabil pri tem projektu. Knjižnica je optimizirana za družino mega AVR. To je povezava do datotek knjižnice in kod, ki jih je uporabil. Spodaj prilagam svojo kodo. Vključuje tudi skico obdelave in kodo AVR C. Upoštevajte, da je to konfiguracija, ki je delovala zame, in ne prevzemam nobene odgovornosti, če tako ali drugače poškodujete katero koli stvar zaradi teh kod. Prav tako sem imel veliko težav pri poskusu, da bi koda delovala. Na primer, DDRD (register smeri podatkov) ima DDDx (x = 0-7) kot bitne maske namesto običajnega DDRDx (x = 0-7). Pri sestavljanju bodite pozorni na te napake. Tudi sprememba mikrokrmilnika vpliva na te definicije, zato bodite pozorni tudi na to pri obravnavi napak pri sestavljanju. In če se sprašujete, zakaj se projektna mapa imenuje DDT_Arduino_328p.rar, pa recimo, da je bilo zvečer, ko sem začel, zelo temno in da sem bil dovolj len, da nisem prižgal luči.: P

Ko sem prišel do skice za obdelavo, sem za izdelavo te skice uporabil obdelavo 3.3.6. Številko vrat COM v skici morate nastaviti ročno. Komentare lahko preverite v kodi.

Če mi lahko kdo pomaga prenesti kode v Arduino IDE in najnovejšo različico obdelave, bom vesel in bom podelil zasluge tudi razvijalcem / sodelavcem.

6. korak: Nastavitev

  1. Odprite kodo in jo sestavite z #define pcvisual unmented in #define midi_out komentirano.
  2. Odprite xloader in poiščite imenik s kodo, poiščite datoteko.hex in jo zapišite v nano tako, da izberete ustrezno ploščo in vrata COM.
  3. Odprite skico za obdelavo in jo zaženite z ustreznim indeksom vrat COM. Če je vse v redu, bi morali videti spekter signala na pin A0.
  4. Vzemite izvijač in obrnite lonec za obrezovanje, dokler spekter ni enakomeren (komponenta enosmernega toka mora biti blizu ničle). Takrat ne vnesite nobenega signala na ploščo. (Ne priključujte modula mikrofona).
  5. Zdaj uporabite katero koli orodje za ustvarjanje pometanja, kot je ta, da vnesete ploščo iz mikrofona in opazujete spekter.
  6. Če ne vidite premikanja frekvenc, zmanjšajte mejno frekvenco s spreminjanjem upora 47 kilo ohmov. Povečajte tudi dobiček z uporabo 10 kilo ohmskega prednastavljenega lonca. S spreminjanjem teh parametrov poskusite doseči ravno in vidno moč pometanja. To je zabaven del (mali bonus!), Predvajajte svoje najljubše pesmi in uživajte v njihovem spektru v realnem času. (Poglej si posnetek)
  7. Zdaj znova sestavite vdelano kodo C z #define pcvisual komentirano in #define midi_out brez komentarja.
  8. Ponovno naložite novo prevedeno kodo na arduino Nano.
  9. Odprite LoopMidi in ustvarite nova vrata.
  10. Odprite FL studio ali drugo programsko opremo vmesnika MIDI in se prepričajte, da so midi vrata zanke vidna v nastavitvah vrat MIDI.
  11. Odprite brez dlake MIDI s priključenim arduinom. Izberite izhodna vrata za vrata LoopMidi. Pojdite v nastavitve in nastavite hitrost prenosa na 115200. Zdaj izberite vrata COM, ki ustrezajo Arduino Nano, in odprite vrata.
  12. Predvajajte nekaj "čistih" tonov v bližini mikrofona in slišali boste tudi ustrezen zvok v programski opremi MIDI. Če ni odgovora, poskusite znižati up_threshold, opredeljeno v kodi C. Če se beležke sprožijo naključno, povečajte up_threshold.
  13. Vzemite svoj klavir in preizkusite, kako hiter je vaš sistem !! Najboljša stvar je, da lahko v zlati zaklenjeni coni zapiskov udobno zazna večkratni pritisk tipk.

Opomba: Ko ena aplikacija dostopa do vrat COM, druga ne more prebrati. Na primer, če Hairless MIDI bere vrata COM, Xloader ne bi mogel utripati plošče

7. korak: Rezultati/videoposnetki

To je to zaenkrat fantje! Upam, da vam je všeč. Če imate v projektu kakšne predloge ali izboljšave, mi to sporočite v razdelku za komentarje. Mir!

Priporočena: