Obsah:

Převaděč zvuku na MIDI v reálném čase: 7 kroků
Převaděč zvuku na MIDI v reálném čase: 7 kroků

Video: Převaděč zvuku na MIDI v reálném čase: 7 kroků

Video: Převaděč zvuku na MIDI v reálném čase: 7 kroků
Video: Say NO to WAR! ❌ Share this video to everyone you can! 🙏 2024, Červenec
Anonim
Převaděč zvuku na MIDI v reálném čase
Převaděč zvuku na MIDI v reálném čase

Namaste lidi! Jedná se o projekt, na kterém jsem pracoval v jednom ze svých kurzů (zpracování digitálního signálu v reálném čase) v bakalářském programu. Cílem projektu je vytvořit systém DSP, který "poslouchá" zvuková data a vydává MIDI zprávy odpovídajících poznámek přes UART. K tomuto účelu bylo použito Arduino Nano. Stručně řečeno, mikrořadič provádí FFT na příchozích zvukových datech a provádí analýzu špiček a odesílá příslušnou MIDI zprávu. Nenechte se obtěžovat MOSFETy, protože jsou pro nějaký jiný projekt (který bude také uveden později na instructables) a nejsou pro tento projekt vyžadovány. Začněme tedy již !!

Krok 1: Požadované součásti

Požadované součásti
Požadované součásti

K sestavení tohoto projektu budeme potřebovat následující komponenty, ačkoli mnohé z nich jsou obecné a lze je nahradit jejich ekvivalenty. Podívejte se také do schématu zapojení, abyste zjistili, jak lépe implementovat.

Množství součásti

1. Elektretový mikrofon. 1

2. Rezistor 30 Kilo Ohm. 1

3. Rezistor 150 Kilo Ohm. 1

4. Rezistor 100 ohmů. 1

5. 2.2 Kilo Ohm odpory. 3

6. 10 Kilo Ohm přednastavený hrnec. 1

7. Zastřihovač 10 Kilo Ohm. 1

8. 47 Kilo Ohm stereo pot. 1

9. 470 ohmové odpory. 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. Regulátor napětí 7805. 1

16. Ženský a mužský proužek záhlaví. 1 každý

17. Konektor barel jack. 1

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

19. Přepínač SPST. (Volitelné) 1

20. Perfboard. 1

Krok 2: Technické specifikace

Technické specifikace
Technické specifikace

Vzorkovací frekvence: 3840 vzorků/s

Počet vzorků na FFT: 256

Frekvenční rozlišení: 15 Hz

Obnovovací frekvence: Kolem 15 Hz

Dolní a vyšší stupnice not nejsou správně zachyceny. Nižší tóny trpí nízkofrekvenčním rozlišením, kde jako vyšší frekvence trpí nízkou vzorkovací frekvencí. Arduino již nemá paměť, takže neexistuje způsob, jak dosáhnout lepšího rozlišení. A lepší rozlišení bude za cenu snížené obnovovací frekvence, takže kompromis je nevyhnutelný. Laická verze Heisenbergova principu neurčitosti.

Hlavní obtíž je exponenciální rozestup mezi notami (Jak je vidět na obrázku. Každý impuls na frekvenční ose je nota). Algoritmy jako LFT mohou pomoci, ale to je trochu pokročilé a trochu komplikované pro zařízení jako arduino Nano.

Krok 3: Schémata zapojení

Schémata zapojení
Schémata zapojení
Schémata zapojení
Schémata zapojení
Schémata zapojení
Schémata zapojení
Schémata zapojení
Schémata zapojení

Poznámka: Nenechte se obtěžovat třemi MOSFETy a šroubovými svorkami na obrázcích. Pro tento projekt nejsou povinné. Všimněte si, že vstupní deska mikrofonu je vyjímatelná nebo jak ji nazývají modulární. Níže je uveden malý popis různých bloků.

1) Dva odpory 470 ohmů kombinují stereofonní zvukový signál s mono zvukovým signálem. Zajistěte, aby zem signálu vstupovala na virtuální zem (vg ve schématu zapojení) a ne na kostru obvodu.

2) Dalším blokem je nízkoprůchodový filtr sallen-key 2. řádu, který je zodpovědný za omezení pásma vstupního signálu, aby se zabránilo aliasingu. Protože pracujeme pouze s napájením +12 V, zkreslujeme operační zesilovač vytvořením RC dělič napětí. to oklame operační zesilovač na myšlenku, že napájení je 6 0-6 voltů (dual rail), kde vg je referenční zem pro operační zesilovač.

3) Poté je výstup filtrován dolní propustí, aby blokoval stejnosměrný offset 6 voltů a spojený s DC přibližně 0,55 voltů, protože ADC bude nakonfigurován tak, aby používal interní 1,1 V jako Vref.

Poznámka: Předzesilovač pro elektretový mikrofon není nejlepší obvod na internetu. Obvod zahrnující operační zesilovač by byl lepší volbou. Přejeme si, aby frekvenční odezva byla co nejrovnější. Stereo pot 47 kiloohmů se používá k definování mezní frekvence, která by měla být typicky poloviční ze vzorkovací frekvence. Přednastavení 10 kiloohmů (Malý hrnec s bílou hlavou) slouží k vyladění zisku a hodnoty Q filtru. 10k ohmový trimr (jeden s kovovým ladicím knoflíkem, který vypadá jako malý šroub s plochou hlavou) se používá k nastavení napětí tak blízkého jako polovina Vref.

Poznámka: Když připojujete Nano k PC ponechte spínač SPST otevřený, jinak zavřený. Zvláštní pozornost věnujte tomu, že by to mohlo způsobit poškození obvodu/počítače/regulátoru napětí nebo jakékoli kombinace výše uvedených

Krok 4: Nezbytné aplikace a IDE

Nezbytné aplikace a IDE
Nezbytné aplikace a IDE
Nezbytné aplikace a IDE
Nezbytné aplikace a IDE
Nezbytné aplikace a IDE
Nezbytné aplikace a IDE
Nezbytné aplikace a IDE
Nezbytné aplikace a IDE
  1. Pro kódování Arduino Nano jsem šel s primitivním AVR studio 5.1, protože se zdá, že mi to funguje. Instalační program najdete zde.
  2. Pro programování Arduino Nano jsem použil Xloader. Je to opravdu snadno použitelný lehký nástroj pro vypalování souborů.hex na Arduinos. Můžete ho získat zde.
  3. Pro malý bonusový mini projekt a vyladění obvodu jsem použil zpracování. Můžete to získat odtud, přestože v každé revizi došlo k zásadním změnám, takže možná budete muset hrát s zastaralými funkcemi, aby skica fungovala.
  4. FL studio nebo jakýkoli jiný software pro zpracování MIDI. Odtud můžete zdarma získat verzi FL Studio s omezeným přístupem.
  5. Loop MIDI vytváří virtuální MIDI port a FL studio je detekuje, jako by to bylo MIDI zařízení. Získejte jeho kopii odtud.
  6. Bezsrsté MIDI slouží ke čtení MIDI zpráv z COM portu a jejich odesílání do MIDI portu smyčky. Rovněž ladí MIDI zprávy v reálném čase, což usnadňuje ladění. Získejte odtud MIDI bez vlasů.

Krok 5: Relevantní kódy pro všechno

Chtěl bych poděkovat společnosti Electronic Lifes MFG (Website Here !!) za knihovnu FFT s pevným bodem, kterou jsem v tomto projektu použil. Knihovna je optimalizována pro mega rodinu AVR. Toto je odkaz na soubory knihovny a kódy, které použil. Níže přikládám svůj kód. Obsahuje také skicu zpracování a kód AVR C. Vezměte prosím na vědomí, že toto je konfigurace, která pro mě fungovala, a já nenesu žádnou odpovědnost, pokud vůbec něco poškodíte kvůli těmto kódům. Také jsem měl spoustu problémů se snahou, aby kód fungoval. Například DDRD (Data Direction Register) má DDDx (x = 0-7) jako bitové masky místo konvenčních DDRDx (x = 0-7). Při kompilaci si dejte pozor na tyto chyby. Také změna mikrořadiče ovlivňuje tyto definice, takže to sledujte i při řešení chyb při kompilaci. A pokud vás zajímá, proč se složka projektu jmenuje DDT_Arduino_328p.rar, řekněme, že večer, když jsem začínal, byla velká tma a já jsem byl líný natolik, že jsem nesvítil.: P

Když jsem se dostal ke zpracování skici, použil jsem zpracování 3.3.6 k napsání této skici. V náčrtu budete muset ručně nastavit číslo portu COM. Můžete zkontrolovat komentáře v kódu.

Pokud mi někdo může pomoci přenést kódy do Arduino IDE a nejnovější verze pro zpracování, budu rád a také poskytnu kredity vývojářům / přispěvatelům.

Krok 6: Nastavení

  1. Otevřete kód a zkompilujte kód pomocí #define pcvisual bez komentáře a #define midi_out okomentováno.
  2. Otevřete xloader a přejděte do adresáře s kódem, vyhledejte soubor.hex a vypálte jej na nano výběrem vhodné desky a portu COM.
  3. Otevřete skicu zpracování a spusťte ji s příslušným indexem portu COM. Pokud vše půjde dobře, měli byste vidět spektrum signálu na pinu A0.
  4. Získejte šroubovák a otáčejte potenciometrem, dokud nebude spektrum ploché (stejnosměrná složka by se měla blížit nule). Pak na desku nevkládejte žádný signál. (Nepřipojujte modul mikrofonu).
  5. Nyní použijte jakýkoli nástroj generátoru rozmítání, jako je tento, k zadání desky z mikrofonu a sledujte spektrum.
  6. Pokud nevidíte velkou frekvenci, snižte mezní frekvenci změnou odporu 47 kiloohmů. Zesilte také použitím přednastaveného hrnce 10 kilo ohmů. Změnou těchto parametrů se pokuste získat plochý a výrazný výstup rozmítání. Toto je zábavná část (malý bonus!), Hrajte své oblíbené skladby a užívejte si jejich spektrum v reálném čase. (Podívejte se na video)
  7. Nyní zkompilujte vložený kód C tentokrát znovu s komentářem #define pcvisual a #define midi_out bez komentáře.
  8. Znovu načtěte nový kompilovaný kód do arduino Nano.
  9. Otevřete LoopMidi a vytvořte nový port.
  10. Otevřete FL studio nebo jiný software MIDI rozhraní a ujistěte se, že je v nastavení MIDI portu viditelný midi port smyčky.
  11. Otevřené bezsrsté MIDI s připojeným arduinem. Vyberte výstupní port jako port LoopMidi. Přejděte do nastavení a nastavte přenosovou rychlost na 115 200. Nyní vyberte COM port odpovídající Arduino Nano a otevřete port.
  12. Zahrajte nějaké „čisté“tóny v blízkosti mikrofonu a měli byste slyšet odpovídající notový zásah také v MIDI softwaru. Pokud není odpověď, zkuste snížit up_threshold definovaný v kódu C. Pokud se poznámky spouští náhodně, zvyšte up_threshold.
  13. Pořiďte si piano a vyzkoušejte si, jak rychlý je váš systém !! Nejlepší je, že v zóně goldy-lock poznámek dokáže pohodlně snadno detekovat více současných stisknutí kláves.

Poznámka: Když je na port COM přistupováno jednou aplikací, nelze jej přečíst jinou. Pokud například Hairless MIDI čte COM port, Xloader nebude schopen flashovat desku

Krok 7: Výsledky/Videa

To je prozatím vše, lidi! Doufám, že se vám to líbí. Pokud máte nějaké návrhy nebo vylepšení projektu, dejte mi vědět v sekci komentářů. Mír!

Doporučuje: