Sadržaj:

Audio u MIDI pretvarač u stvarnom vremenu .: 7 koraka
Audio u MIDI pretvarač u stvarnom vremenu .: 7 koraka

Video: Audio u MIDI pretvarač u stvarnom vremenu .: 7 koraka

Video: Audio u MIDI pretvarač u stvarnom vremenu .: 7 koraka
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Juli
Anonim
Audio u MIDI pretvarač u stvarnom vremenu
Audio u MIDI pretvarač u stvarnom vremenu

Namaste ljudi! Ovo je projekt na kojem sam radio na jednom od svojih kurseva (Obrada digitalnih signala u stvarnom vremenu) na svom prvostupničkom programu. Cilj projekta je stvaranje DSP sistema koji "sluša" audio podatke i emituje MIDI poruke odgovarajućih bilješki putem UART -a. U tu je svrhu korišten Arduino Nano. Ukratko, mikrokontroler radi FFT na ulaznim audio podacima i vrši analizu vrhova i šalje odgovarajuću MIDI poruku. Ne brinite se zbog MOSFET -ova jer su oni za neki drugi projekt (koji će biti postavljen i kasnije o instrukcijama) i nisu potrebni za ovaj projekt. Pa počnimo već !!

Korak 1: Potrebne komponente

Potrebne komponente
Potrebne komponente

Za izradu ovog projekta bit će nam potrebne sljedeće komponente, iako su mnoge od njih generičke i mogu se zamijeniti njihovim ekvivalentima. Također pogledajte dijagram kola kako biste razradili i tražili bolje implementacije.

Količina komponente

1. Elektronski mikrofon. 1

2. Otpornik od 30 Kilo ohma. 1

3. 150 Kilo ohm otpornik. 1

4. 100 ohmski otpornik. 1

5. 2.2 Kilo ohmski otpornici. 3

6. Posuda od 10 kilograma ohma. 1

7. 10 Kilo Ohm trimer lonac. 1

8. 47 Kilo Ohm stereo lonac. 1

9. 470 Ohm otpornici. 2

10. 0,01uF kondenzatori. 2

11. 2.2uF kondenzatori. 3

12. 47uF kondenzatori. 2

13. 1000uF kondenzator. 1

14. 470uF kondenzator. 1

15. 7805 regulator napona. 1

16. Ženska i muška traka zaglavlja. 1 svaki

17. Konektor za bačvu. 1

18. 12 V 1 Amp DC adapter. 1

19. SPST prekidač. (Opcionalno) 1

20. Perfboard. 1

Korak 2: Tehničke specifikacije

Tehničke specifikacije
Tehničke specifikacije

Učestalost uzorkovanja: 3840 uzoraka/sek

Broj uzoraka po FFT -u: 256

Frekvencijska rezolucija: 15Hz

Brzina osvježavanja: Oko 15 Hz

Niže i više ljestvice muzičkih nota nisu pravilno snimljene. Niže note pate od rezolucije niske frekvencije, dok više frekvencije pate od niske frekvencije uzorkovanja. Arduinu je već nestalo memorije pa nema načina da se dobije bolja rezolucija. Bolja rezolucija će doći po cijenu smanjene učestalosti osvježavanja pa je kompromis neizbježan. Laička verzija Heisenbergovog principa nesigurnosti.

Primarna poteškoća je eksponencijalni razmak između nota (Kao što se vidi na slici. Svaki impuls na frekvencijskoj osi je muzička nota). Algoritmi poput LFT -a mogu pomoći, ali to je malo napredno i malo komplicirano za uređaje poput arduino Nano.

Korak 3: Dijagrami kola

Dijagrami kola
Dijagrami kola
Dijagrami kola
Dijagrami kola
Dijagrami kola
Dijagrami kola
Dijagrami kola
Dijagrami kola

Napomena: Nemojte da vam smetaju tri MOSFET -a i zavrtnji na slikama. Oni nisu potrebni za ovaj projekat. Uočite da se ulazna ploča mikrofona može ukloniti ili kako je zovu modularna. Mali opis različitih blokova dat je u nastavku.

1) Dva otpornika od 470 ohma kombinuju stereo audio signal sa mono audio signalom. Uverite se da uzemljenje signala ulazi u virtuelno uzemljenje (vg u dijagramu kola), a ne na masu kola.

2) Sljedeći blok je niskopropusni filter sa sallen-ključem 2. reda koji je odgovoran za ograničavanje opsega ulaznog signala kako bi se izbjeglo preklapanje. S obzirom da radimo samo s napajanjem od +12V, mi pojačavamo op-pojačalo izradom RC razdjelnika napona. što zavara op -pojačalo u razmišljanju da je napajanje napajanje od 6 0 -6 volti (dual rail) gdje je vg referentna oznaka tla za op pojačalo.

3) Zatim se izlaz filtrira niskim prolazom kako bi se blokirao DC pomak od 6 volti i spojen s istosmjernom strujom od oko 0,55 volti jer će ADC biti konfiguriran da koristi unutarnji 1,1 v kao Vref.

Napomena: Predpojačalo za elektronski mikrofon nije najbolje kolo na internetu. Kolo koje uključuje op-amp bilo bi bolji izbor. Želimo da frekvencijski odziv bude što je moguće ravniji. Stereo lonac od 47 kilooma koristi se za definiranje granične frekvencije koja bi tipično trebala biti polovina frekvencije uzorkovanja. Predpodešavanje od 10 kilo ohma (mali lonac sa bijelom glavom) koristi se za podešavanje pojačanja i Q vrijednosti filtra. Trimer za trimere od 10 kilograma (jedan s metalnim gumbom za ugađanje koji izgleda kao mali vijak s ravnom glavom) koristi se za postavljanje napona na pola Vrefa.

Napomena: Kada povezujete Nano sa računarom držite prekidač SPST otvoren, inače zatvoren. Budite oprezni ako ovo ne učinite može naštetiti krugu/računaru/regulatoru napona ili bilo kojoj kombinaciji gore navedenih

Korak 4: Potrebne aplikacije i IDE

Potrebne aplikacije i IDE
Potrebne aplikacije i IDE
Potrebne aplikacije i IDE
Potrebne aplikacije i IDE
Potrebne aplikacije i IDE
Potrebne aplikacije i IDE
Potrebne aplikacije i IDE
Potrebne aplikacije i IDE
  1. Za kodiranje Arduino Nano -a otišao sam s primitivnim AVR studijem 5.1 jer mi izgleda djeluje. Instalacijski program možete pronaći ovdje.
  2. Za programiranje Arduino Nano koristio sam Xloader. Njegov vrlo lagan alat za snimanje.hex datoteka na Arduinos. Možete ga nabaviti ovdje.
  3. Za mali bonus mini projekat i ugađanje kola koristio sam obradu. Možete ga preuzeti odavde, iako postoje velike promjene u svakoj reviziji pa ćete možda morati petljati po zastarjelim funkcijama kako bi skica uspjela.
  4. FL studio ili bilo koji drugi MIDI softver za obradu. Ovdje možete besplatno preuzeti verziju s ograničenim pristupom FL studio.
  5. Loop MIDI stvara virtualni MIDI port i FL studio ga otkriva kao da je MIDI uređaj. Preuzmite kopiju iste odavde.
  6. MIDI bez dlake koristi se za čitanje MIDI poruka s COM porta i slanje na MIDI port petlje. Takođe otklanja greške u MIDI porukama u stvarnom vremenu što olakšava otklanjanje grešaka. Preuzmite MIDI bez dlake odavde.

Korak 5: Relevantni kodovi za sve

Želeo bih da se zahvalim Electronic Lifes MFG (Website Here !!) na FFT biblioteci sa fiksnom tačkom koju sam koristio u ovom projektu. Biblioteka je optimizirana za mega AVR porodicu. Ovo je veza do datoteka biblioteke i kodova koje je koristio. U nastavku prilažem svoj kôd. Uključuje skicu obrade i AVR C kod. Imajte na umu da je ovo konfiguracija koja mi je uspjela i ne preuzimam nikakvu odgovornost u svakom slučaju ako oštetite bilo koju stvar zbog ovih kodova. Takođe, imao sam mnogo problema pokušavajući da kod radi. Na primjer, DDRD (Data Direction Register) ima DDDx (x = 0-7) kao bitske maske umjesto konvencionalnog DDRDx (x = 0-7). Pazite na ove greške prilikom sastavljanja. Promjena mikrokontrolera utječe i na ove definicije, pa pripazite i na ovo dok se bavite greškama pri sastavljanju. A ako se pitate zašto se fascikla projekta zove DDT_Arduino_328p.rar, recimo samo da je uveče bilo jako mračno kad sam počeo i da sam bio dovoljno lijen da ne palim svjetla.: P

Dolazeći do skice za obradu, koristio sam obradu 3.3.6 za pisanje ove skice. Morat ćete ručno postaviti broj COM porta u skici. Komentare možete provjeriti u kodu.

Ako mi neko može pomoći u prenošenju kodova u Arduino IDE i najnoviju verziju obrade, bilo bi mi drago i dat ću priznanje programerima / saradnicima.

Korak 6: Postavljanje

  1. Otvorite kôd i kompajlirajte kôd sa #define pcvisual bez komentara i #define midi_out sa komentarima.
  2. Otvorite xloader i idite do direktorija s kodom, dođite do.hex datoteke i narežite je na nano odabirom odgovarajuće ploče i COM porta.
  3. Otvorite skicu za obradu i pokrenite je s odgovarajućim indeksom COM porta. Ako sve bude u redu, trebali biste moći vidjeti spektar signala na pinu A0.
  4. Uzmite odvijač i okrenite trimer dok spektar ne postane ravan (istosmjerna komponenta bi trebala biti blizu nule). Tada ne unosite nikakav signal na ploču. (Ne priključujte modul mikrofona).
  5. Sada upotrijebite bilo koji ovakav alat za generiranje zamaha kako biste dali ulaz na ploču s mikrofona i promatrali spektar.
  6. Ako ne vidite pomeranje frekvencija, smanjite graničnu frekvenciju promjenom otpora od 47 kilooma. Povećajte i pojačanje korištenjem unaprijed postavljenog lonca od 10 kilo ohma. Promjenom ovih parametara pokušajte postići ravnu i istaknutu brzinu. Ovo je zabavni dio (mali bonus!), Pustite svoje omiljene pjesme i uživajte u njihovom spektru u stvarnom vremenu. (Pogledajte video)
  7. Sada ponovo sastavite ugrađeni C kôd s #define pcvisual komentiranim i #define midi_out bez komentara.
  8. Ponovo učitajte novi prevedeni kod na arduino Nano.
  9. Otvorite LoopMidi i kreirajte novi port.
  10. Otvorite FL studio ili drugi softver za MIDI sučelje i provjerite je li midi port petlje vidljiv u postavkama MIDI porta.
  11. Otvoreni MIDI bez dlake sa povezanim arduinom. Odaberite izlazni port koji će biti LoopMidi port. Idite na postavke i postavite brzinu prijenosa na 115200. Sada odaberite COM port koji odgovara Arduino Nano i otvorite port.
  12. Pustite neke "čiste" tonove u blizini mikrofona i trebali biste čuti odgovarajući hit u MIDI softveru. Ako nema odgovora, pokušajte smanjiti up_threshold definirano u C kodu. Ako se bilješke nasumično pokreću, povećajte gornji prag.
  13. Uzmite svoj klavir i testirajte koliko je brz vaš sistem !! Najbolje je to što u zoni zlatne brave bilješke mogu udobno otkriti više istovremenih pritisaka tipki.

Napomena: Kada jednoj aplikaciji pristupa COM portu, druga je ne može pročitati. Na primjer, ako Hairless MIDI čita COM port, Xloader ne bi mogao bljeskati ploču

Korak 7: Rezultati/Video zapisi

To je to za sada momci! Nadam se da vam se sviđa. Ako imate bilo kakve prijedloge ili poboljšanja u projektu, javite mi u odjeljku za komentare. Mir!

Preporučuje se: