Obsah:

Prevodník zvuku na MIDI v reálnom čase .: 7 krokov
Prevodník zvuku na MIDI v reálnom čase .: 7 krokov

Video: Prevodník zvuku na MIDI v reálnom čase .: 7 krokov

Video: Prevodník zvuku na MIDI v reálnom čase .: 7 krokov
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, November
Anonim
Prevodník zvuku na MIDI v reálnom čase
Prevodník zvuku na MIDI v reálnom čase

Namaste ľudia! Toto je projekt, na ktorom som pracoval na jednom zo svojich kurzov (Spracovanie digitálneho signálu v reálnom čase) v bakalárskom programe. Cieľom projektu je vytvoriť systém DSP, ktorý „počúva“zvukové údaje a vydáva MIDI správy so zodpovedajúcimi poznámkami cez UART. Na tento účel bolo použité Arduino Nano. Stručne povedané, mikroprocesor robí FFT na prichádzajúcich zvukových dátach a analyzuje špičky a odošle príslušnú MIDI správu. Nebojte sa o MOSFEToch, pretože sú určené pre iný projekt (ktorý bude neskôr uvedený aj v pokynoch) a nie sú pre tento projekt povinné. Začnime teda už !!

Krok 1: Potrebné súčasti

Vyžadované súčasti
Vyžadované súčasti

Na zostavenie tohto projektu budeme potrebovať nasledujúce komponenty, aj keď mnohé z nich sú generické a môžu byť nahradené ich ekvivalentmi. Pozrite si tiež schému zapojenia, aby ste zistili, ako lepšie implementovať.

Množstvo komponentu

1. Elektretový mikrofón. 1

2. Rezistor 30 Kilo Ohm. 1

3. Rezistor 150 Kilo Ohm. 1

4. 100 ohmový odpor. 1

5. Rezistory 2,2 Kilo Ohm. 3

6. 10 Kilo Ohm prednastavený hrniec. 1

7. Zastrihávač 10 Kilo Ohm. 1

8. 47 pot Kilo Ohm stereo hrniec. 1

9. Odpor 470 ohmov. 2

10. 0,01uF kondenzátory. 2

11. 2,2uF kondenzátory. 3

12. 47uF kondenzátory. 2

13. 1000uF kondenzátor. 1

14. 470uF kondenzátor. 1

15. 7805 regulátor napätia. 1

16. Hlavičkový pásik pre ženy a pre mužov. Po 1

17. Konektor Barrel Jack. 1

18. Adaptér DC 12 V 1 Amp. 1

19. Prepínač SPST. (Voliteľné) 1

20. Perfboard. 1

Krok 2: Technické špecifikácie

Technické špecifikácie
Technické špecifikácie

Vzorkovacia frekvencia: 3840 vzoriek/s

Počet vzoriek na FFT: 256

Frekvenčné rozlíšenie: 15 Hz

Obnovovacia frekvencia: približne 15 Hz

Dolné a vyššie stupnice noty nie sú správne zachytené. Nižšie tóny trpia nízkofrekvenčným rozlíšením, kde vyššie frekvencie trpia nízkymi vzorkovacími frekvenciami. Arduino už nemá pamäť, takže neexistuje spôsob, ako dosiahnuť lepšie rozlíšenie. A lepšie rozlíšenie bude stáť za zníženú obnovovaciu frekvenciu, takže kompromis je nevyhnutný. Laická verzia Heisenbergovho princípu neurčitosti.

Hlavnou ťažkosťou je exponenciálna vzdialenosť medzi notami (Ako je vidieť na obrázku. Každý impulz na frekvenčnej osi je notou). Algoritmy ako LFT môžu pomôcť, ale je to trochu pokročilé a pre zariadenie ako arduino Nano trochu komplikované.

Krok 3: Schémy zapojenia

Schémy zapojenia
Schémy zapojenia
Schémy zapojenia
Schémy zapojenia
Schémy zapojenia
Schémy zapojenia
Schémy zapojenia
Schémy zapojenia

Poznámka: Nebojte sa troch MOSFETov a skrutkových svoriek na obrázkoch. Pre tento projekt nie sú povinné. Všimnite si, že vstupná doska mikrofónu je vyberateľná alebo ju nazývajú modulárne. Nasleduje malý opis rôznych blokov.

1) Dva odpory 470 ohmov kombinujú stereofónny zvukový signál s mono zvukovým signálom. Zaistite, aby uzemnenie signálu vstupovalo na virtuálnu zem (vg v schéme zapojenia) a nie na uzemnenie obvodu.

2) Ďalším blokom je dolnopriepustný filter sallen-key 2. rádu, ktorý je zodpovedný za obmedzenie pásma vstupného signálu, aby sa zabránilo aliasingu. Pretože pracujeme iba s napájaním +12 V, opierame operačný zosilňovač o RC delič napätia. to oklame operačný zosilňovač na myšlienku, že napájanie je 6 0 -6 voltov (duálna koľajnica), kde vg je základná referencia pre operačný zosilňovač.

3) Potom je výstup dolnopriepustný filtrovaný na blokovanie DC offsetu 6 voltov a spojený s DC okolo 0,55 voltov, pretože ADC bude nakonfigurovaný tak, aby používal interný 1,1 V ako Vref.

Poznámka: Predzosilňovač pre elektretový mikrofón nie je najlepším obvodom na internete. Obvod zahŕňajúci operačný zosilňovač by bol lepšou voľbou. Chceme, aby frekvenčná odozva bola čo najrovnejšia. Stereo pot 47 kOhm sa používa na definovanie medznej frekvencie, ktorá by mala byť typicky polovičná zo vzorkovacej frekvencie. Predvoľba 10 kΩ (malý hrniec s bielou hlavou) sa používa na doladenie zisku a hodnoty Q filtra. 10 -ohmový vyžínač (jeden s kovovým ladiacim gombíkom, ktorý vyzerá ako malá skrutka s plochou hlavou) sa používa na nastavenie napätia tak blízko, ako je polovica Vref.

Poznámka: Keď pripájate Nano k P. C. nechajte spínač SPST otvorený, inak je zatvorený. Zvláštnu pozornosť venujte tomu, ak tak neurobíte, môže dôjsť k poškodeniu obvodu/počítača/regulátora napätia alebo akejkoľvek kombinácie vyššie uvedených

Krok 4: Potrebné aplikácie a IDE

Potrebné aplikácie a IDE
Potrebné aplikácie a IDE
Potrebné aplikácie a IDE
Potrebné aplikácie a IDE
Potrebné aplikácie a IDE
Potrebné aplikácie a IDE
Potrebné aplikácie a IDE
Potrebné aplikácie a IDE
  1. Na kódovanie Arduino Nano som išiel s primitívnym štúdiom AVR 5.1, pretože sa mi zdá, že mi to funguje. Inštalačný program nájdete tu.
  2. Na programovanie Arduino Nano som použil Xloader. Je to skutočne ľahko použiteľný ľahký nástroj na napaľovanie súborov.hex do Arduinos. Môžete ho získať tu.
  3. Na malý bonusový mini projekt a doladenie obvodu som použil spracovanie. Môžete to získať odtiaľto, aj keď v každej revízii urobíte zásadné zmeny, takže aby ste mohli náčrt fungovať, možno sa budete musieť popasovať s zastaranými funkciami.
  4. FL studio alebo iný softvér na spracovanie MIDI. Odtiaľto môžete bezplatne získať verziu FL Studio s obmedzeným prístupom.
  5. Loop MIDI vytvára virtuálny MIDI port a FL studio ho detekuje, ako keby išlo o MIDI zariadenie. Kópiu toho istého získate odtiaľto.
  6. Bezsrsté MIDI sa používa na čítanie MIDI správ z portu COM a ich odosielanie do slučkového MIDI portu. Tiež ladí MIDI správy v reálnom čase, čo uľahčuje ladenie. Získajte odtiaľto MIDI bez vlasov.

Krok 5: Relevantné kódy pre všetko

Chcel by som poďakovať spoločnosti Electronic Lifes MFG (webová stránka tu !!) za knižnicu FFT s pevným bodom, ktorú som použil v tomto projekte. Knižnica je optimalizovaná pre rodinu mega AVR. Toto je odkaz na súbory a kódy knižnice, ktoré použil. Nižšie prikladám svoj kód. Obsahuje tiež náčrt spracovania a kód AVR C. Vezmite prosím na vedomie, že toto je konfigurácia, ktorá fungovala pre mňa a ja nepreberám žiadnu zodpovednosť, ak niečo poškodíte kvôli týmto kódom. Tiež som mal veľa problémov so snahou zaistiť, aby kód fungoval. Napríklad DDRD (Data Direction Register) má DDDx (x = 0-7) ako bitové masky namiesto konvenčných DDRDx (x = 0-7). Pri kompilácii dávajte pozor na tieto chyby. Na tieto definície má vplyv aj zmena mikrokontroléra, takže pri riešení chýb pri kompilácii dávajte pozor aj na to. A ak vás zaujíma, prečo sa priečinok s projektom nazýva DDT_Arduino_328p.rar, povedzme si, že večer, keď som začínal, bola veľká tma a bol som natoľko lenivý, že som nezapol svetlá.: P

Pokiaľ ide o náčrt spracovania, na napísanie tohto náčrtu som použil spracovanie 3.3.6. V skici budete musieť manuálne nastaviť číslo portu COM. Môžete skontrolovať komentáre v kóde.

Ak mi niekto môže pomôcť s prenosom kódov do Arduino IDE a najnovšej verzie spracovania, bol by som rád a poskytol by zásluhy aj vývojárom / prispievateľom.

Krok 6: Nastavenie

  1. Otvorte kód a skompilovajte ho s kódom #define pcvisual a komentárom #define midi_out.
  2. Otvorte xloader a prejdite na adresár s kódom, nájdite súbor.hex a napaľujte ho na nano výberom vhodnej dosky a portu COM.
  3. Otvorte skicu spracovania a spustite ju s príslušným indexom portu COM. Ak všetko pôjde dobre, mali by ste vidieť spektrum signálu na kolíku A0.
  4. Vezmite skrutkovač a otáčajte trimrom, kým nebude spektrum ploché (DC zložka by mala byť blízko nuly). Potom na dosku nevkladajte žiadny signál. (Nepripájajte modul mikrofónu).
  5. Teraz použite ľubovoľný nástroj generátora ťahania, ako je tento, na vstup do dosky z mikrofónu a sledujte spektrum.
  6. Ak nevidíte rozsiahlu frekvenciu, znížte hraničnú frekvenciu zmenou odporu 47 kiloohmov. Zvýšte tiež zisk pomocou prednastaveného hrnca 10 kiloohmov. Zmenou týchto parametrov sa pokúste dosiahnuť plochý a výrazný výstup rozmítania. Toto je zábavná časť (malý bonus!), Hrajte svoje obľúbené piesne a užívajte si ich spektrum v reálnom čase. (Pozri si video)
  7. Teraz skompilovajte vložený kód C tentoraz s komentárom #define pcvisual a komentárom #define midi_out.
  8. Znova načítajte nový kompilovaný kód do arduino Nano.
  9. Otvorte LoopMidi a vytvorte nový port.
  10. Otvorte FL studio alebo iný softvér rozhrania MIDI a zaistite, aby bol v nastaveniach portu MIDI viditeľný port midi.
  11. Otvorené bezsrsté MIDI s pripojeným arduinom. Vyberte výstupný port ako port LoopMidi. Prejdite na nastavenia a nastavte prenosovú rýchlosť na 115 200. Teraz vyberte COM port zodpovedajúci Arduino Nano a otvorte port.
  12. Zahrajte si „čisté“tóny v blízkosti mikrofónu a mali by ste počuť zodpovedajúci tón v softvéri MIDI. Ak neexistuje žiadna odpoveď, skúste znížiť up_threshold definovaný v kóde C. Ak sa poznámky spúšťajú náhodne, zvýšte prahovú hodnotu up_threshold.
  13. Vezmite si klavír a vyskúšajte si, ako rýchly je váš systém !! Najlepšie na tom je, že v zlátivej zóne poznámok dokáže pohodlne ľahko detekovať viacnásobné súčasné stlačenie klávesov.

Poznámka: Keď je na port COM prístupná jedna aplikácia, nemôže ju čítať iná aplikácia. Ak napríklad Hairless MIDI číta COM port, Xloader nebude môcť flashovať dosku

Krok 7: Výsledky/Videá

To je zatiaľ chlapci! Dúfam, že sa vám to páči. Ak máte v rámci projektu nejaké návrhy alebo vylepšenia, dajte mi vedieť v sekcii komentárov. Mier!

Odporúča: