Sisällysluettelo:

Reaaliaikainen ääni-MIDI-muunnin .: 7 vaihetta
Reaaliaikainen ääni-MIDI-muunnin .: 7 vaihetta

Video: Reaaliaikainen ääni-MIDI-muunnin .: 7 vaihetta

Video: Reaaliaikainen ääni-MIDI-muunnin .: 7 vaihetta
Video: ⚡️ EN ANNA periksi! Amazon 2.0 | Verkkokauppa tyhjästä - Osa 3 2024, Marraskuu
Anonim
Reaaliaikainen ääni-MIDI-muunnin
Reaaliaikainen ääni-MIDI-muunnin

Namaste ihmiset! Tämä on projekti, jota työskentelin yhdellä kurssillani (reaaliaikainen digitaalinen signaalinkäsittely) kandidaatin ohjelmassa. Hankkeen tavoitteena on tehdä DSP -järjestelmä, joka "kuuntelee" äänidataa ja lähettää MIDI -viestit vastaavista muistiinpanoista UART: n kautta. Tähän tarkoitukseen käytettiin Arduino Nanoa. Lyhyesti sanottuna mikro-ohjain tekee FFT: n saapuvalle äänidatalle ja analysoi huippuja ja lähettää sopivan MIDI-viestin. Älä kuitenkaan välitä MOSFET -laitteista, koska ne ovat tarkoitettu johonkin muuhun projektiin (joka julkaistaan myöhemmin myös ohjeissa) eikä niitä vaadita tässä projektissa. Joten aloitetaan jo !!

Vaihe 1: Tarvittavat komponentit

Tarvittavat komponentit
Tarvittavat komponentit

Tarvitsemme seuraavia komponentteja tämän projektin rakentamiseksi, vaikka monet näistä ovat yleisiä ja voidaan korvata vastaavilla. Katso myös piirikaavio selvittääksesi ja etsiä parempia toteutuksia.

Komponentin määrä

1. Elektreettimikrofoni. 1

2. 30 kilon ohmin vastus. 1

3. 150 kilon ohmin vastus. 1

4. 100 ohmin vastus. 1

5. 2.2 Kilon ohmin vastukset. 3

6. 10 Kilo Ohmin esiasetettu potti. 1

7. 10 Kilo Ohmin trimmeripannu. 1

8. 47 Kilo Ohmin stereopata. 1

9. 470 ohmin vastukset. 2

10. 0.01uF kondensaattorit. 2

11. 2.2uF kondensaattorit. 3

12. 47uF kondensaattorit. 2

13. 1000uF kondensaattori. 1

14. 470uF kondensaattori. 1

15. 7805 jännitesäädin. 1

16. Naaras ja uros otsikkolista. 1 kpl

17. Barrel Jack -liitin. 1

18. 12 V 1 ampeerin tasavirtasovitin. 1

19. SPST -kytkin. (Valinnainen) 1

20. Perfboard. 1

Vaihe 2: Tekniset tiedot

Tekniset tiedot
Tekniset tiedot

Näytteenottotaajuus: 3840 näytettä/sekunti

Näytteiden lukumäärä per FFT: 256

Taajuustarkkuus: 15 Hz

Virkistystaajuus: Noin 15 Hz

Nuottien alemmat ja korkeammat asteikot eivät tallennu oikein. Alemmat nuotit kärsivät matalan taajuuden resoluutiosta, kun korkeammat taajuudet kärsivät alhaisista näytteenottotaajuuksista. Arduino -muisti on jo lopussa, joten parempaa resoluutiota ei voi saada. Ja parempi resoluutio tulee alennetun virkistystaajuuden kustannuksella, joten vaihto on väistämätöntä. Maallikkoversio Heisenbergin epävarmuusperiaatteesta.

Ensisijainen vaikeus on eksponentiaalinen etäisyys nuottien välillä (Kuten kuvassa näkyy. Jokainen impulssi taajuusakselilla on nuotti). LFT: n kaltaiset algoritmit voivat auttaa, mutta se on hieman kehittynyt ja vähän monimutkainen laitteelle, kuten arduino Nano.

Vaihe 3: Piirikaaviot

Piirikaaviot
Piirikaaviot
Piirikaaviot
Piirikaaviot
Piirikaaviot
Piirikaaviot
Piirikaaviot
Piirikaaviot

Huomaa: Älä häiritse kuvien kolmea MOSFETia ja ruuviliittimiä. Niitä ei vaadita tässä projektissa. Huomaa, että mikrofonin tulokortti on irrotettava tai modulaarinen. Pieni kuvaus eri lohkoista on alla.

1) Kaksi 470 ohmin vastusta yhdistävät stereoäänisignaalin monoäänisignaaliksi. Varmista, että signaalin maadoitus menee virtuaaliseen maahan (piirikaaviossa vg) eikä piirin maahan.

2) Seuraava lohko on toisen asteen sallen-key-alipäästösuodatin, joka vastaa tulosignaalin kaistanrajoituksesta aliasoinnin välttämiseksi. Koska työskentelemme vain +12 V: n jännitteellä, painotamme op-vahvistinta tekemällä RC-jännitteenjakajan. joka huijaa op -vahvistimen ajattelemaan, että syöttöjännite on 6 0–6 voltin syöttöjännite (dual rail), jossa vg on op -vahvistimen maan viite.

3) Sitten lähtö on alipäästösuodatettu estämään 6 voltin DC -siirtymä ja yhdistettynä noin 0,55 voltin tasavirtaan, koska ADC konfiguroidaan käyttämään sisäistä 1,1 V: tä Vref: nä.

Huomaa: Elektreettimikrofonin esivahvistin ei ole paras piiri Internetissä. Piiri, jossa on op-amp, olisi ollut parempi valinta. Haluamme taajuusvasteen olevan mahdollisimman tasainen. 47 kilon ohmin stereopataa käytetään rajataajuuden määrittämiseen, jonka pitäisi tyypillisesti olla puolet näytteenottotaajuudesta. 10 kilon ohmin esiasetusta (pieni potti, jossa on valkoinen pää) käytetään säätämään vahvistusta ja suodattimen Q -arvoa. 10 kilon ohmin trimmeripannu (jossa on metallinen viritysnuppi, joka näyttää pieneltä litteältä pääruuvilta) käytetään asettamaan jännite lähes puoleen Vrefistä.

Huomautus: Kun liität nanon P. C. pidä SPST -kytkin auki muuten suljettuna. Ole erityisen varovainen, jos näin ei tehdä, se voi vahingoittaa piiriä/tietokonetta/jännitesäädintä tai mitä tahansa edellä mainittujen yhdistelmää

Vaihe 4: Tarvittavat sovellukset ja IDE: t

Tarvittavat sovellukset ja IDE: t
Tarvittavat sovellukset ja IDE: t
Tarvittavat sovellukset ja IDE: t
Tarvittavat sovellukset ja IDE: t
Tarvittavat sovellukset ja IDE: t
Tarvittavat sovellukset ja IDE: t
Tarvittavat sovellukset ja IDE: t
Tarvittavat sovellukset ja IDE: t
  1. Arduino Nanon koodaamiseen menin primitiivisen AVR -studion 5.1 kanssa, koska se näyttää toimivan minulle. Asentajan löydät täältä.
  2. Arduino Nanon ohjelmointiin käytin Xloaderia. Sen todella helppokäyttöinen kevyt työkalu polttaa.hex -tiedostoja Arduinosille. Saat sen täältä.
  3. Pientä bonusminiprojektia ja piirin viritystä varten käytin käsittelyä. Voit saada sen täältä, vaikka jokaiseen versioon tehdään suuria muutoksia, joten saatat joutua piilottamaan vanhentuneita toimintoja, jotta luonnos toimisi.
  4. FL studio tai mikä tahansa muu MIDI -käsittelyohjelmisto. Voit saada FL Studion rajoitetun version ilmaiseksi täältä.
  5. Silmukka -MIDI luo virtuaalisen MIDI -portin ja FL studio tunnistaa sen ikään kuin se olisi MIDI -laite. Hanki kopio samasta täältä.
  6. Karvatonta MIDI: tä käytetään MIDI -viestien lukemiseen COM -portista ja lähettämiseen silmukka -MIDI -porttiin. Se myös debugoi MIDI-viestit reaaliajassa, mikä tekee virheenkorjauksesta kätevää. Hanki karvaton MIDI täältä.

Vaihe 5: asiaankuuluvat koodit kaikelle

Haluan kiittää Electronic Lifes MFG: tä (Website Here !!) tässä projektissa käyttämästäni kiinteän pisteen FFT -kirjastosta. Kirjasto on optimoitu mega AVR -perheelle. Tämä on linkki kirjaston tiedostoihin ja koodeihin, joita hän käytti. Liitän koodini alla. Se sisältää myös käsittelyluonnoksen ja AVR C -koodin. Huomaa, että tämä kokoonpano toimi minulle, enkä ota mitään vastuuta, jos vahingoitat jotain näiden koodien takia. Lisäksi minulla oli paljon ongelmia yrittäessä saada koodi toimimaan. Esimerkiksi DDRD: ssä (Data Direction Register) on DDDx (x = 0-7) bittimaskeina perinteisen DDRDx: n (x = 0-7) sijaan. Varo näitä virheitä kokoamisen aikana. Myös mikro-ohjaimen vaihtaminen vaikuttaa näihin määritelmiin, joten pidä silmällä tätä myös käsitellessäsi kokoamisvirheitä. Ja jos mietit, miksi projektikansion nimi on DDT_Arduino_328p.rar, sanotaanpa vain, että illalla oli hyvin pimeää, kun aloitin, ja olin tarpeeksi laiska jättämättä valot päälle.: P

Käsittelyluonnoksen suhteen kirjoitin tämän luonnoksen käsittelyllä 3.3.6. Sinun on asetettava luonnoksessa oleva COM -portin numero manuaalisesti. Voit tarkistaa koodin kommentit.

Jos joku voi auttaa minua siirtämään koodit Arduino IDE: hen ja uusimpaan käsittelyversioon, olisin iloinen ja kiitän myös kehittäjiä / avustajia.

Vaihe 6: Asenna se

  1. Avaa koodi ja käännä koodi #define pcvisual kommentoimatta ja #define midi_out kommentoi.
  2. Avaa xloader ja selaa hakemistoon koodilla, selaa.hex -tiedostoon ja polta se nanoksi valitsemalla sopiva levy ja COM -portti.
  3. Avaa käsittelyluonnos ja suorita se sopivalla COM -porttihakemistolla. Jos kaikki menee hyvin, sinun pitäisi pystyä näkemään signaalin spektri nastassa A0.
  4. Hanki ruuvimeisseli ja käännä trimmeripannua, kunnes spektri on tasainen (DC -komponentin tulisi olla lähellä nollaa). Älä syötä sitten mitään signaalia kortille. (Älä kiinnitä mikrofonimoduulia).
  5. Käytä nyt mitä tahansa tällaista pyyhkäisygeneraattorityökalua syöttääksesi kortille mikro-puhelimesta ja tarkkaile taajuuksia.
  6. Jos et näe taajuuksien pyyhkäisyä, vähennä rajataajuutta muuttamalla 47 kilon ohmin vastusta. Lisää myös vahvistusta käyttämällä 10 kilon ohmin esiasetettua pottia. Yritä saada tasainen ja näkyvä pyyhkäisyteho muuttamalla näitä parametreja. Tämä on hauska osa (pieni bonus!), Soita suosikkikappaleitasi ja nauti niiden reaaliaikaisesta taajuudesta. (Katso video)
  7. Käännä nyt upotettu C -koodi uudelleen tällä kertaa #define pcvisual kommentoi ja #define midi_out kommentoimatta.
  8. Lataa uusi koottu koodi arduino Nano -laitteeseen.
  9. Avaa LoopMidi ja luo uusi portti.
  10. Avaa FL studio tai muu MIDI -liitäntäohjelmisto ja varmista, että silmukan midi -portti näkyy MIDI -portin asetuksissa.
  11. Avoin karvaton MIDI, johon on liitetty arduino. Valitse lähtöportiksi LoopMidi -portti. Siirry asetuksiin ja aseta Baud -nopeudeksi 115200. Valitse nyt Arduino Nanoa vastaava COM -portti ja avaa portti.
  12. Soita "puhtaita" ääniä mikrofonin lähellä ja kuulet vastaavan nuotin osuman myös MIDI -ohjelmistossa. Jos vastausta ei tule, yritä laskea C -koodissa määritettyä ylärajaa. Jos nuotit laukaistaan satunnaisesti, nosta ylärajaa.
  13. Hanki pianosi ja testaa kuinka nopea järjestelmäsi on !! Parasta on, että muistiinpanojen kullanvärisellä lukitusalueella se voi helposti tunnistaa useita samanaikaisia näppäimen painalluksia helposti.

Huomautus: Kun yksi sovellus käyttää COM -porttia, toinen ei voi lukea sitä. Esimerkiksi jos karvaton MIDI lukee COM -porttia, Xloader ei pystyisi vilkkumaan taulua

Vaihe 7: Tulokset/Videot

Siinä se nyt kaverit! Toivottavasti pidät siitä. Jos sinulla on ehdotuksia tai parannuksia projektiin, kerro siitä kommenttiosassa. Rauha!

Suositeltava: