Sisukord:

Reaalajas heli MIDI-muunduriks: 7 sammu
Reaalajas heli MIDI-muunduriks: 7 sammu
Anonim
Reaalajas heli-MIDI muundur
Reaalajas heli-MIDI muundur

Namaste inimesed! See on projekt, mille kallal töötasin ühel oma bakalaureuseõppe kursusel (reaalajas digitaalsignaali töötlemine). Projekti eesmärk on luua DSP -süsteem, mis "kuulab" audioandmeid ja väljastab UART -i kaudu vastavate märkmete MIDI -sõnumeid. Selleks kasutati Arduino Nano. Lühidalt, mikrokontroller teeb sissetulevate heliandmete suhtes FFT-d, analüüsib piike ja saadab sobiva MIDI-sõnumi. Ärge muretsege MOSFETide pärast, sest need on mõeldud mõnele muule projektile (mis esitatakse hiljem ka juhendite kohta) ja pole selle projekti jaoks nõutavad. Nii et alustame juba !!

Samm: nõutavad komponendid

Nõutavad komponendid
Nõutavad komponendid

Selle projekti loomiseks vajame järgmisi komponente, kuigi paljud neist on üldised ja neid saab asendada nende ekvivalentidega. Vaadake ka vooluahelat, et välja töötada ja otsida paremaid rakendusi.

Komponendi kogus

1. Elektreetmikrofon. 1

2. 30 Kilo oomi takisti. 1

3. 150 kilo oomi takisti. 1

4. 100 oomi takisti. 1

5. 2.2 Kilo oomi takistid. 3

6. 10 Kilo Ohmi eelseadistatud pott. 1

7. 10 Kilo oomi trimmeripott. 1

8. 47 Kilo Ohmi stereopott. 1

9. 470 oomi takistid. 2

10. 0,01uF kondensaatorid. 2

11. 2.2uF kondensaatorid. 3

12. 47uF kondensaatorid. 2

13. 1000uF kondensaator. 1

14. 470uF kondensaator. 1

15. 7805 pingeregulaator. 1

16. Naiste ja meeste päise riba. 1 iga

17. Tünnipistiku pistik. 1

18. 12 V 1 ampri alalisvooluadapter. 1

19. SPST lüliti. (Valikuline) 1

20. Perfboard. 1

2. samm: tehnilised andmed

Tehnilised kirjeldused
Tehnilised kirjeldused

Proovivõtu sagedus: 3840 proovi/sek

Proovide arv FFT kohta: 256

Sageduse eraldusvõime: 15 Hz

Värskendussagedus: umbes 15 Hz

Muusika nootide madalam ja kõrgem skaala pole õigesti jäädvustatud. Madalamad noodid kannatavad madala sagedusega eraldusvõime all, kõrgemad sagedused aga madala diskreetimissagedusega. Arduino mälu on juba otsas, nii et paremat eraldusvõimet pole võimalik saada. Ja parema eraldusvõimega kaasneb vähendatud värskendussagedus, nii et kompromiss on vältimatu. Laisen versioon Heisenbergi määramatuse printsiibist.

Esmane raskus on eksponentsiaalne vahekaugus nootide vahel (Nagu jooniselt näha. Iga impulss sagedusteljel on noot). Sellised algoritmid nagu LFT võivad aidata, kuid see on natuke arenenud ja natuke keeruline sellise seadme jaoks nagu arduino Nano.

3. samm: vooluahela skeemid

Lülitusskeemid
Lülitusskeemid
Lülitusskeemid
Lülitusskeemid
Lülitusskeemid
Lülitusskeemid
Lülitusskeemid
Lülitusskeemid

Märkus: Ärge laske end häirida piltidel olevatest kolmest MOSFET -ist ja kruviklemmidest. Neid ei ole selle projekti jaoks vaja. Pange tähele, et mikrofoni sisendplaat on eemaldatav või modulaarne. Allpool on toodud erinevate plokkide väike kirjeldus.

1) Kaks 470 oomi takistit ühendavad stereo helisignaali mono helisignaaliga. Veenduge, et signaali maandus läheb virtuaalsele maandusele (vooluahela skeemil vg), mitte vooluahela maandusele.

2) Järgmine plokk on teise astme sallen-võtme madalpääsfilter, mis vastutab sisendsignaali ribalaiuse piiramise eest, et vältida varjunime. Kuna töötame ainult +12v toiteallikaga, kallutame op-võimendit, tehes RC pingejaguri. mis petab op -võimendi arvama, et toiteallikaks on 6 0–6 volti (kaheraudtee), kus vg on op -võimendi maapealne võrdlusalus.

3) Seejärel on väljund madalpääsfiltreeritud, et blokeerida 6 -voldine alalisvoolu nihe ja ühendatud umbes 0,55 -voldise alalisvooluga, kuna ADC on konfigureeritud kasutama sisemist 1,1 v kui Vref.

Märkus. Elektreetmikrofoni eelvõimendi ei ole Interneti parim vooluring. Optilise võimendusega lülitus oleks olnud parem valik. Soovime, et sagedusreaktsioon oleks võimalikult tasane. 47 kilo oomi stereopotti kasutatakse piirisageduse määratlemiseks, mis peaks tavaliselt olema pool proovivõtu sagedusest. Filtri võimenduse ja Q -väärtuse häälestamiseks kasutatakse 10 -kilose oomi eelseadistust (väike pea valge peaga). 10 -kilose oomise trimmeripotiga (üks metallist häälestusnupuga, mis näeb välja nagu väike lameda peaga kruvi) kasutatakse pinge seadistamiseks poole Vrefi lähedale.

Märkus. Kui ühendate Nano PC -ga hoia SPST lülitit lahti muidu suletuna. Olge selle eest eriti ettevaatlik, kui te seda ei tee, võib see kahjustada vooluahelat/arvutit/pingeregulaatorit või ülaltoodud kombinatsioone

4. samm: vajalikud rakendused ja IDE -d

Vajalikud rakendused ja IDE -d
Vajalikud rakendused ja IDE -d
Vajalikud rakendused ja IDE -d
Vajalikud rakendused ja IDE -d
Vajalikud rakendused ja IDE -d
Vajalikud rakendused ja IDE -d
Vajalikud rakendused ja IDE -d
Vajalikud rakendused ja IDE -d
  1. Arduino Nano kodeerimiseks läksin koos primitiivse AVR stuudioga 5.1, sest see tundub mulle sobivat. Paigaldaja leiate siit.
  2. Arduino Nano programmeerimiseks kasutasin Xloaderit. Selle tõesti lihtne kasutada kerget tööriista.hex -failide põletamiseks Arduinosele. Selle saate siit.
  3. Väikese boonusminiprojekti ja vooluahela häälestamiseks kasutasin töötlemist. Selle saate siit, kuigi tehke igas muudatuses suuri muudatusi, nii et visandi toimimiseks peate võib -olla aegunud funktsioonidega nokitsema.
  4. FL stuudio või mõni muu MIDI töötlustarkvara. Siit saate tasuta saada FL Studio piiratud juurdepääsu versiooni.
  5. Loop MIDI loob virtuaalse MIDI -pordi ja FL studio tuvastab selle nagu MIDI -seadme. Hankige siit koopia.
  6. Karvutu MIDI -d kasutatakse COM -pordist MIDI -sõnumite lugemiseks ja MIDI -silmuspordi saatmiseks. Samuti silub see reaalajas MIDI-sõnumeid, mis muudab silumise mugavaks. Hankige siit karvutu MIDI.

Samm: asjakohased koodid kõige jaoks

Tahaksin tänada Electronic Lifes MFG -d (veebisait siin !!) fikseeritud punktiga FFT raamatukogu eest, mida ma selles projektis kasutasin. Raamatukogu on optimeeritud mega AVR perekonna jaoks. See on link raamatukogu failidele ja koodidele, mida ta kasutas. Lisan oma koodi allpool. See sisaldab ka töötlemise visandit ja AVR C koodi. Pange tähele, et see konfiguratsioon töötas minu jaoks ja ma ei võta endale mingit vastutust, kui te nende koodide tõttu midagi kahjustate. Lisaks oli mul palju probleeme, et kood tööle saada. Näiteks DDRD-l (andmesuunaregister) on tavalise DDRDx (x = 0-7) asemel bitimaskidena DDDx (x = 0-7). Pange neid vigu kompileerimise ajal tähele. Ka mikrokontrolleri muutmine mõjutab neid määratlusi, nii et jälgige seda ka kompileerimisvigade käsitlemisel. Ja kui te ei tea, miks on projekti kausta nimi DDT_Arduino_328p.rar, siis ütleme nii, et õhtul, kui ma alustasin, oli väga pime ja ma olin piisavalt laisk, et mitte tulesid sisse lülitada.: P

Töötlemise eskiisi juurde tulles kasutasin selle eskiisi kirjutamiseks töötlust 3.3.6. Peate visandil käsitsi määrama COM -pordi numbri. Koodis olevaid kommentaare saate kontrollida.

Kui keegi aitab mul koodid Arduino IDE -sse ja uusimasse töötlusversiooni teisaldada, oleksin rõõmus ja kiidan ka arendajaid ja kaasautoreid.

6. toiming: selle seadistamine

  1. Avage kood ja koostage kood #define pcvisual kommenteerimata ja #define midi_out kommenteeritud.
  2. Avage xloader ja sirvige koodiga kataloogi, sirvige.hex -faili ja põletage see nano -failiks, valides sobiva tahvli ja COM -pordi.
  3. Avage töötlemise visand ja käivitage see sobiva COM -pordi indeksiga. Kui kõik läheb hästi, peaksite nägema pinge A0 signaali spektrit.
  4. Hankige kruvikeeraja ja keerake trimmeripotti, kuni spekter on tasane (alalisvoolu komponent peaks olema nullilähedane). Ärge sisestage tahvlile mingit signaali. (Ärge kinnitage mikrofonimoodulit).
  5. Nüüd kasutage mis tahes sellist pühkimisgeneraatori tööriista, et anda mikrotelefonilt tahvlile sisend ja jälgida spektrit.
  6. Kui te ei näe sageduste liikumist, vähendage katkestamissagedust, muutes 47 kilo oomi takistust. Suurendage võimendust ka 10 -kilose oomi eelseadistatud potti kasutades. Proovige neid parameetreid muutes saada ühtlane ja silmapaistev pühkimisvõimsus. See on lõbus osa (väike boonus!), Mängige oma lemmiklaule ja nautige nende reaalajaspektrit. (Vaata videot)
  7. Nüüd kompileerige manustatud C -kood seekord uuesti, #define pcvisual kommenteeris ja #define midi_out kommenteerimata.
  8. Laadige uus kompileeritud kood uuesti arduino Nano peale.
  9. Avage LoopMidi ja looge uus port.
  10. Avage FL stuudio või muu MIDI -liidese tarkvara ja veenduge, et MIDI -pordi seadetes on silmuse midi -port nähtav.
  11. Avatud karvutu MIDI, ühendatud arduino. Valige LoopMidi pordiks väljundport. Minge seadete juurde ja seadke Baudi sageduseks 115200. Nüüd valige Arduino Nano jaoks vastav COM -port ja avage port.
  12. Mängige mikrofoni lähedal mõnda "puhast" tooni ja peaksite kuulma ka vastavat noodi tabamust MIDI tarkvaras. Kui vastust ei tule, proovige C -koodis määratletud künnist alandada. Kui noodid käivitatakse juhuslikult, suurendage künnist üles.
  13. Hankige oma klaver ja proovige, kui kiire on teie süsteem !! Parim on see, et kuldse lukuga tsoonis suudab see hõlpsasti tuvastada mitu samaaegset klahvivajutust.

Märkus. Kui COM -pordile pääseb juurde üks rakendus, ei saa teine seda lugeda. Näiteks kui karvutu MIDI loeb COM -porti, ei saaks Xloader tahvlit välgutada

7. samm: tulemused/videod

See on praegu poisid! Loodan, et sulle meeldib. Kui teil on projekti kohta ettepanekuid või parandusi, andke mulle sellest kommentaaride osas teada. Rahu!

Soovitan: