Tartalomjegyzék:

Valós idejű audio-MIDI konverter: 7 lépés
Valós idejű audio-MIDI konverter: 7 lépés

Videó: Valós idejű audio-MIDI konverter: 7 lépés

Videó: Valós idejű audio-MIDI konverter: 7 lépés
Videó: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, November
Anonim
Valós idejű audio-MIDI átalakító
Valós idejű audio-MIDI átalakító

Namaste nép! Ez egy olyan projekt, amelyen az egyik kurzusomon (Real-Time Digital Signal Processing) dolgoztam az alapképzésben. A projekt célja egy DSP rendszer létrehozása, amely "hallgatja" az audioadatokat, és a megfelelő jegyzetek MIDI -üzeneteit adja ki az UART -on keresztül. Erre a célra az Arduino Nano -t használták. Röviden: a mikrovezérlő FFT-t végez a bejövő audio adatokon, elemzi a csúcsokat, és megfelelő MIDI üzenetet küld. Ne aggódjon azonban a MOSFET -ek miatt, mert azok egy másik projekthez tartoznak (amelyet később az oktatható anyagokról is feltesznek), és nem szükségesek ehhez a projekthez. Szóval kezdjük már !!

1. lépés: Szükséges összetevők

Szükséges alkatrészek
Szükséges alkatrészek

A projekt létrehozásához a következő összetevőkre lesz szükségünk, bár ezek közül sok általános, és helyettesíthetők megfelelőikkel. Tekintse meg a kapcsolási rajzot is a jobb kivitelezések kidolgozásához és kereséséhez.

Komponens mennyiség

1. Elektret mikrofon. 1

2. 30 Kilo Ohm ellenállás. 1

3. 150 kilométeres ellenállás. 1

4. 100 ohmos ellenállás. 1

5. 2.2 Kiló Ohmos ellenállások. 3

6. 10 Kilo Ohm előre beállított edény. 1

7. 10 Kilo Ohm trimmer edény. 1

8. 47 Kilo Ohm sztereó edény. 1

9. 470 Ohmos ellenállások. 2

10. 0.01uF kondenzátorok. 2

11. 2.2uF kondenzátorok. 3

12. 47uF kondenzátorok. 2

13. 1000uF kondenzátor. 1

14. 470uF kondenzátor. 1

15. 7805 feszültségszabályozó. 1

16. Női és férfi fejléc. Egyenként 1

17. Hordó Jack csatlakozó. 1

18. 12 V 1 A -os egyenáramú adapter. 1

19. SPST kapcsoló. (Nem kötelező) 1

20. Perfboard. 1

2. lépés: Műszaki adatok

Műszaki adatok
Műszaki adatok

Mintavételi gyakoriság: 3840 minta/sec

Minták száma FFT -nként: 256

Frekvencia felbontás: 15Hz

Frissítési frekvencia: kb. 15 Hz

A hangjegyek alsó és magasabb skálája nincs megfelelően rögzítve. Az alacsonyabb hangok alacsony frekvencia felbontásban szenvednek, míg a magasabb frekvenciák alacsony mintavételi gyakoriságban. Az arduino memóriája már kimerült, így nincs mód jobb felbontásra. A jobb felbontás pedig csökkentett frissítési gyakorisággal jár, így elkerülhetetlen a kompromisszum. Heisenberg bizonytalansági elvének laikus változata.

Az elsődleges nehézség a hangok közötti exponenciális távolság (ahogy az ábrán is látható. Minden impulzus a frekvencia tengelyén egy hangjegy). Az olyan algoritmusok, mint az LFT segíthetnek, de ez egy kicsit fejlett és kicsit bonyolult egy olyan eszközhöz, mint az arduino Nano.

3. lépés: Áramköri diagramok

Áramköri diagramok
Áramköri diagramok
Áramköri diagramok
Áramköri diagramok
Áramköri diagramok
Áramköri diagramok
Áramköri diagramok
Áramköri diagramok

Megjegyzés: Ne zavarjon a képeken látható három MOSFET és a csavaros kapcsok. Ezek nem szükségesek ehhez a projekthez. Vegye figyelembe, hogy a mikrofon bemeneti kártya eltávolítható vagy moduláris. Az alábbiakban a különböző blokkok kis leírása található.

1) A két 470 ohmos ellenállás kombinálja a sztereó audio jelet a mono hangjelhez. Győződjön meg arról, hogy a bemeneti jel földelése a virtuális földhöz (vg az kapcsolási rajzon), nem pedig az áramkör földeléséhez vezet.

2) A következő mondat egy másodrendű sallen kulcsos aluláteresztő szűrő, amely felelős a bemeneti jel sáv korlátozásáért az aliasozás elkerülése érdekében. Mivel csak +12V tápellátással dolgozunk, az op-erősítőt torzítjuk egy RC feszültségosztó elkészítésével. amely becsapja az op -erősítőt, hogy azt gondolja, hogy a tápegység 6 0-6 voltos tápegység (kettős sín), ahol vg az op erősítő földi referenciája.

3) Ekkor a kimenet aluláteresztő szűrő, hogy blokkolja a 6 voltos egyenáramú eltolást, és körülbelül 0,55 voltos DC -vel párosul, mert az ADC úgy van konfigurálva, hogy a belső 1,1 V -ot használja Vref -ként.

Megjegyzés: Az elektret mikrofon előerősítője nem a legjobb áramkör az interneten. Az op-amp-et tartalmazó áramkör jobb választás lett volna. Szeretnénk, ha a frekvenciaválasz a lehető legegyenletesebb lenne. A 47 kilós ohmos sztereó edényt a határfrekvencia meghatározására használják, amelynek általában a mintavételi frekvencia felének kell lennie. A 10 kilós ohmos előbeállítás (a kis fej fehér fejjel) a szűrő erősítésének és Q -értékének beállítására szolgál. A 10 kilós ohmos trimmer edényt (egy fémes hangológombbal, amely úgy néz ki, mint egy kis laposfejű csavar) arra használják, hogy a feszültséget a Vref fele közelébe állítsák.

Megjegyzés: Amikor a Nanót a PC -hez csatlakoztatja tartsa nyitva az SPST kapcsolót, különben zárva. Különösen ügyeljen arra, hogy ennek elmulasztása károsíthatja az áramkört/számítógépet/feszültségszabályozót vagy a fentiek bármely kombinációját

4. lépés: Szükséges alkalmazások és IDE -k

Szükséges alkalmazások és IDE -k
Szükséges alkalmazások és IDE -k
Szükséges alkalmazások és IDE -k
Szükséges alkalmazások és IDE -k
Szükséges alkalmazások és IDE -k
Szükséges alkalmazások és IDE -k
Szükséges alkalmazások és IDE -k
Szükséges alkalmazások és IDE -k
  1. Az Arduino Nano kódolásához a primitív AVR stúdió 5.1 -el mentem, mert úgy tűnik, hogy működik nekem. A telepítőt itt találja.
  2. Az Arduino Nano programozásához Xloadert használtam. Nagyon könnyű használni a könnyű eszközt.hex fájlok Arduinos -ra való írására. Itt megkaphatja.
  3. A kis bónusz mini projekthez és az áramkör hangolásához feldolgozást használtam. Innen szerezheti be, bár minden módosítás során jelentős változások történnek, így előfordulhat, hogy az elavult függvényekkel kell babrálnia a vázlat működéséhez.
  4. FL studio vagy bármely más MIDI feldolgozó szoftver. Innen ingyenesen letöltheti az FL Studio korlátozott hozzáférésű verzióját.
  5. A Loop MIDI virtuális MIDI portot hoz létre, és az FL studio úgy érzékeli, mintha MIDI eszköz lenne. Szerezzen innen egy példányt.
  6. A szőrtelen MIDI -t MIDI -üzenetek olvasására használják a COM -portról, és elküldik a hurok -MIDI -portra. Ezenkívül valós idejű hibakeresést végez a MIDI-üzenetekben, ami megkönnyíti a hibakeresést. Szerezzen be szőrtelen MIDI -t innen.

5. lépés: Mindenre vonatkozó kódok

Szeretném megköszönni az Electronic Lifes MFG -nek (Weboldal itt !!) a fixpontú FFT könyvtárat, amelyet ebben a projektben használtam. A könyvtár mega AVR családra van optimalizálva. Ez a link az általa használt könyvtári fájlokhoz és kódokhoz. Alább csatolom a kódomat. Ez tartalmazza a feldolgozási vázlatot és az AVR C kódot is. Felhívjuk figyelmét, hogy ez a konfiguráció működött számomra, és nem vállalok felelősséget, ha bármit megsértesz ezek miatt a kódok miatt. Ezenkívül sok problémám volt a kód működésével kapcsolatban. Például a DDRD (Data Direction Register) DDDx (x = 0-7) bitmaszkot tartalmaz a hagyományos DDRDx (x = 0-7) helyett. Ügyeljen ezekre a hibákra fordítás közben. A mikrovezérlő megváltoztatása is befolyásolja ezeket a definíciókat, ezért figyelje ezt is, miközben fordítási hibákat kezel. És ha kíváncsi, miért hívják a projektmappát DDT_Arduino_328p.rar -nak, akkor mondjuk azt, hogy este nagyon sötét volt, amikor elkezdtem, és elég lusta voltam ahhoz, hogy ne kapcsoljam fel a villanyt.: P

A feldolgozási vázlathoz érkezve a 3.3.6 feldolgozást használtam a vázlat megírásához. A COM port számát kézzel kell beállítani a vázlatban. Ellenőrizheti a megjegyzéseket a kódban.

Ha valaki tud segíteni a kódok Arduino IDE -be és a legújabb feldolgozási verzióba történő átvitelében, örülnék, és a fejlesztőknek / közreműködőknek is adnék hitelt.

6. lépés: Beállítása

  1. Nyissa meg a kódot, és fordítsa le a kódot a #define pcvisual megjegyzés nélküli és #define midi_out megjegyzéssel.
  2. Nyissa meg az xloader programot, és keresse meg a kódot tartalmazó könyvtárat, keresse meg a.hex fájlt, és égesse el nano fájlba a megfelelő tábla és COM port kiválasztásával.
  3. Nyissa meg a feldolgozási vázlatot, és futtassa a megfelelő COM portindexsel. Ha minden jól megy, látnia kell a jel spektrumát az A0 érintkezőn.
  4. Szerezzen be egy csavarhúzót, és forgassa el a vágóedényt, amíg a spektrum lapos lesz (az egyenáramú komponensnek közel kell lennie a nullához). Ekkor ne vigyen be semmilyen jelet a táblára. (Ne csatlakoztassa a mikrofon modult).
  5. Most használjon bármilyen ehhez hasonló sweep generátor eszközt, hogy bemenetet adjon a táblának a mikro-telefonról, és figyelje a spektrumot.
  6. Ha nem lát frekvenciát, csökkentse a határfrekvenciát a 47 kilométeres ellenállás megváltoztatásával. Növelje a nyereséget is a 10 kilós ohmos előre beállított edény használatával. Próbálja meg egyenletes és kiemelkedő sweep kimenetet elérni ezen paraméterek megváltoztatásával. Ez a szórakoztató rész (a kis bónusz!), Játssza le kedvenc dalait és élvezze a valós idejű spektrumukat. (Nézd meg a videót)
  7. Most fordítsa össze újra a beágyazott C kódot, ezúttal #define pcvisual megjegyzéssel és #define midi_out megjegyzés nélkül.
  8. Töltse be újra az új lefordított kódot az arduino Nano -ra.
  9. Nyissa meg a LoopMidi programot, és hozzon létre egy új portot.
  10. Nyissa meg az FL stúdiót vagy más MIDI interfész szoftvert, és győződjön meg arról, hogy a hurok midi portja látható a MIDI port beállításaiban.
  11. Nyitott szőrtelen MIDI, arduino csatlakoztatva. Válassza ki a kimeneti portot a LoopMidi porthoz. Nyissa meg a beállításokat, és állítsa a Baud sebességet 115200 értékre. Most válassza ki az Arduino Nano COM -portját, és nyissa meg a portot.
  12. Játssz néhány "tiszta" hangot a mikrofon közelében, és hallani kell a megfelelő hangot a MIDI szoftverben is. Ha nincs válasz, próbálja meg csökkenteni a C -kódban meghatározott up_threshold értéket. Ha a jegyzetek véletlenszerűen aktiválódnak, akkor növelje az up_threshold értéket.
  13. Szerezd meg a zongorát, és teszteld, milyen gyors a rendszer !! A legjobb az, hogy a jegyzetek aranysárga zónájában kényelmesen felismeri a több egyidejű gombnyomást.

Megjegyzés: Ha a COM porthoz egy alkalmazás fér hozzá, akkor egy másik nem tudja olvasni. Például, ha a szőrtelen MIDI COM portot olvas, az Xloader nem tudja villogni a táblát

7. lépés: Eredmények/videók

Egyelőre ennyi srácok! Remélem tetszik. Ha bármilyen javaslata vagy fejlesztése van a projektben, tudassa velem a megjegyzések részben. Béke!

Ajánlott: