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, Srpanj
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 kolegija (Real-Time Digital Signal Processing) na svom prvostupničkom studiju. Cilj projekta je stvoriti DSP sustav koji "sluša" audio podatke i emitira MIDI poruke odgovarajućih nota 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 krenimo već !!

Korak 1: Potrebne komponente

Potrebne komponente
Potrebne komponente

Za izradu ovog projekta trebat će nam 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. Električni mikrofon. 1

2. Otpornik od 30 Kilo Ohma. 1

3. 150 Kilo ohmski otpornik. 1

4. 100 ohmski otpornik. 1

5. 2.2 Kilo ohmski otpornici. 3

6. 10 Kilo Ohm unaprijed postavljeni lonac. 1

7. 10 Kilo Ohm trimer lonac. 1

8. 47 Kilo Ohm stereo lonac. 1

9. Otpornici 470 Ohma. 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. Priključak za bačvu. 1

18. 12 V 1 Amp DC adapter. 1

19. SPST prekidač. (Izborno) 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

Donja i viša ljestvica glazbenih nota nisu pravilno snimljene. Niže note pate od niske frekvencijske rezolucije, dok više frekvencije pate od niske brzine uzorkovanja. Arduinu je već nestalo memorije pa nema načina da se dobije bolja razlučivost. Bolja razlučivost doći će po cijenu smanjene učestalosti osvježavanja pa je kompromis neizbježan. Laička verzija Heisenbergovog načela nesigurnosti.

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

Korak 3: Kružni dijagrami

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

Napomena: Neka vas ne ometaju tri MOSFET -a i vijčani terminali na slikama. Oni nisu potrebni za ovaj projekt. Uočite da je ulazna ploča mikrofona uklonjiva ili kako je zovu modularna. Mali opis različitih blokova dan je u nastavku.

1) Dva otpornika od 470 ohma kombiniraju stereo audio signal s mono audio signalom. Provjerite ide li uzemljenje signala na virtualno uzemljenje (vg u dijagramu kruga), a ne na masu kruga.

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. Budući da radimo samo s napajanjem od +12V, pristrastimo op-amp pojačanjem RC razdjelnika napona. što zavara op -pojačalo u razmišljanju da je opskrba 6 0 -6 volti (dvostruka tračnica) 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 za korištenje unutarnjih 1,1 v kao Vref.

Napomena: Predpojačalo za elektronski mikrofon nije najbolji krug na internetu. Krug koji uključuje op-amp bio bi bolji izbor. Želimo da frekvencijski odziv bude što ravniji. Stereo lonac od 47 kilooma koristi se za definiranje granične frekvencije koja bi tipično trebala biti polovica frekvencije uzorkovanja. Unaprijed postavljena postavka od 10 kilo ohma (mali lonac s bijelom glavom) koristi se za podešavanje pojačanja i Q vrijednosti filtra. Trimer od 10 kilograma ohma (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 s računalom držite prekidač SPST otvoren, inače zatvoren. Budite oprezni ako ovo ne učinite može naštetiti krugu/računalu/regulatoru napona ili bilo kojoj kombinaciji gore navedenog

Korak 4: Potrebne aplikacije i IDE -i

Potrebne aplikacije i IDE -i
Potrebne aplikacije i IDE -i
Potrebne aplikacije i IDE -i
Potrebne aplikacije i IDE -i
Potrebne aplikacije i IDE -i
Potrebne aplikacije i IDE -i
Potrebne aplikacije i IDE -i
Potrebne aplikacije i IDE -i
  1. Za kodiranje Arduino Nano -a iš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 projekt i ugađanje kola koristio sam obradu. Možete ga nabaviti 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 detektira kao da je MIDI uređaj. Preuzmite kopiju iste odavde.
  6. MIDI bez dlake koristi se za čitanje MIDI poruka s COM porta i njihovo slanje na MIDI port petlje. Također otklanja pogreške u MIDI porukama u stvarnom vremenu što olakšava ispravljanje pogrešaka. Preuzmite MIDI bez dlake odavde.

Korak 5: Relevantni kodovi za sve

Želio bih zahvaliti Electronic Lifes MFG (Website Here !!) na FFT biblioteci s fiksnom točkom koju sam koristio u ovom projektu. Knjižnica je optimizirana za mega AVR obitelj. Ovo je veza do datoteka knjižnice 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đer, imao sam mnogo problema pokušavajući natjerati kod da radi. Na primjer, DDRD (Registar smjera podataka) ima DDDx (x = 0-7) kao bitske maske umjesto konvencionalnog DDRDx (x = 0-7). Prilikom sastavljanja pazite na ove pogreške. Promjena mikrokontrolera utječe i na ove definicije, pa pripazite i na ovo dok se bavite pogreškama pri sastavljanju. A ako se pitate zašto se mapa projekta zove DDT_Arduino_328p.rar, recimo samo da je navečer 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 netko može pomoći u prenošenju kodova u Arduino IDE i najnoviju verziju obrade, bit će mi drago i dat ću priznanje programerima / suradnicima.

Korak 6: Postavljanje

  1. Otvorite kôd i sastavite kôd s #define pcvisual bez komentara i #define midi_out s komentarima.
  2. Otvorite xloader i dođite do direktorija s kodom, dođite do.hex datoteke i narežite je na nano odabirom odgovarajuće ploče i COM priključka.
  3. Otvorite skicu za obradu i pokrenite je s odgovarajućim indeksom COM porta. Ako sve ide dobro, trebali biste moći vidjeti spektar signala na pinu A0.
  4. Uzmite odvijač i okrenite trimer dok spektar ne postane ravan (istosmjerna komponenta trebala bi 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 ploči s mikrofona i promatrali spektar.
  6. Ako ne vidite pomeranje frekvencija, smanjite graničnu frekvenciju promjenom otpora od 47 kilo ohma. Također povećajte dobitak korištenjem posude od 10 kilo ohma. Promjenom ovih parametara pokušajte postići ravnu i istaknutu snagu zamaha. Ovo je zabavni dio (mali bonus!), Pustite svoje omiljene pjesme i uživajte u njihovom spektru u stvarnom vremenu. (Gledaj video)
  7. Sada ponovno sastavite ugrađeni C kôd s #define pcvisual komentiranim i #define midi_out bez komentara.
  8. Ponovno učitajte novi prevedeni kod na arduino Nano.
  9. Otvorite LoopMidi i stvorite novi port.
  10. Otvorite FL studio ili drugi softver za sučelje MIDI i provjerite je li midi port petlje vidljiv u postavkama MIDI ulaza.
  11. Otvoreni MIDI bez dlake sa spojenim 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 ton u MIDI softveru. Ako nema odgovora, pokušajte smanjiti gornji prag definiran 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š sustav !! 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 ti se sviđa. Ako imate bilo kakve prijedloge ili poboljšanja u projektu, javite mi u odjeljku za komentare. Mir!

Preporučeni: