INHOUDSOPGAWE:

Intydse klank na MIDI-omskakelaar: 7 stappe
Intydse klank na MIDI-omskakelaar: 7 stappe

Video: Intydse klank na MIDI-omskakelaar: 7 stappe

Video: Intydse klank na MIDI-omskakelaar: 7 stappe
Video: Поездка на роскошном частном капсульном автобусе Японии 2024, November
Anonim
Intydse klank na MIDI-omskakelaar
Intydse klank na MIDI-omskakelaar

Namaste mense! Dit is 'n projek waaraan ek gewerk het vir een van my kursusse (Real-Time Digital Signal Processing) in my baccalaureusprogram. Die projek is daarop gemik om 'n DSP -stelsel te maak wat klankdata 'luister' en MIDI -boodskappe van ooreenstemmende notas oor UART uitstuur. Arduino Nano is hiervoor gebruik. Kort verhaal, die mikrobeheerder doen 'n FFT oor inkomende klankdata en ontleed die pieke en stuur die gepaste MIDI-boodskap. Moenie bekommerd wees oor die MOSFET's nie, want dit is vir 'n ander projek (wat ook later op instruksies aangebring word) en word nie benodig vir hierdie projek nie. So laat ons nou al begin !!

Stap 1: Vereiste komponente

Komponente benodig
Komponente benodig

Ons benodig die volgende komponente om hierdie projek te bou, hoewel baie hiervan algemeen is en met hul ekwivalente vervang kan word. Verwys ook na die kringdiagram om uit te werk en te soek na beter implementerings.

Komponent Hoeveelheid

1. Electret -mikrofoon. 1

2. 30 Kilo Ohm weerstand. 1

3. 150 Kilo Ohm weerstand. 1

4. 100 ohm weerstand. 1

5. 2.2 Kilo Ohm weerstande. 3

6. 10 Kilo Ohm vooraf ingestelde pot. 1

7. 10 Kilo Ohm trimmerpot. 1

8. 47 Kilo Ohm stereo pot. 1

9. 470 Ohm weerstande. 2

10. 0.01uF kapasitors. 2

11. 2.2uF kapasitors. 3

12. 47uF kapasitors. 2

13. 1000uF kapasitor. 1

14. 470uF kapasitor. 1

15. 7805 spanningsreguleerder. 1

16. Vroulike en manlike kopstrook. 1 elk

17. Vat -aansluiting. 1

18. 12 V 1 Amp DC -adapter. 1

19. SPST -skakelaar. (Opsioneel) 1

20. Perfboard. 1

Stap 2: Tegniese spesifikasies

Tegniese spesifikasies
Tegniese spesifikasies

Bemonsteringsfrekwensie: 3840 monsters/sek

Aantal monsters per FFT: 256

Frekwensie -resolusie: 15Hz

Opfrissnelheid: ongeveer 15 Hz

Die onderste en hoër toonlere van die musieknote word nie korrek vasgelê nie. Laer note het 'n lae frekwensie -resolusie, terwyl hoër frekwensies onder lae bemonsteringssnelhede ly. Die arduino is reeds uit die geheue, so daar is geen manier om 'n beter resolusie te kry nie. En 'n beter resolusie kos 'n verlaagde verversingssnelheid, sodat afruil onvermydelik is. Leke weergawe van Heisenberg se onsekerheidsbeginsel.

Die primêre probleem is die eksponensiële spasiëring tussen note (Soos gesien in die figuur. Elke impuls op frekwensie -as is 'n musieknoot). Algoritmes soos LFT kan help, maar dit is 'n bietjie gevorderd en bietjie ingewikkeld vir 'n toestel soos arduino Nano.

Stap 3: Kringdiagramme

Kringdiagramme
Kringdiagramme
Kringdiagramme
Kringdiagramme
Kringdiagramme
Kringdiagramme
Kringdiagramme
Kringdiagramme

Let wel: Moenie die drie MOSFET's en die skroefaansluitings op die foto's pla nie. Hulle is nie nodig vir hierdie projek nie. Let op dat die invoerbord van die mikrofoon verwyderbaar is of soos hulle dit modulêr noem. 'N Klein beskrywing van die verskillende blokke word hieronder gegee.

1) Die twee resistors van 470 ohm kombineer die stereo -klanksein met die mono -klanksein. Maak seker dat die seingrond na virtuele grond gaan (vg in die stroombaan -diagram) en nie na die grond van die stroombaan nie.

2) Die volgende blok is 'n 2de-orde lae-pasfilter met 'n deurlopende sleutel, wat verantwoordelik is vir die bandbeperking van die insetsein om aliasing te voorkom. Aangesien ons met slegs +12V-voeding werk, span ons die op-amp in deur 'n RC-spanningsverdeler te maak. dit dwaas die op -amp om te dink dat die toevoer 6 0 -6 volt is (dubbele spoor), waar vg die grondverwysing vir die op amp is.

3) Dan word die uitset laagdoorlaat gefiltreer om 'n gelykverskyning van 6 volt te blokkeer, en tesame met 'n gelykstroom van ongeveer 0,55 volt, omdat die ADC gekonfigureer sal word om die interne 1.1 v as Vref te gebruik.

Opmerking: die voorversterker vir die elektretmikrofoon is nie die beste stroombaan op die internet nie. 'N Kring met op-amp sou 'n beter keuse gewees het. Ons wil hê dat die frekwensierespons so plat as moontlik moet wees. Die stereopot van 47 kilo ohm word gebruik om die afsnyfrekwensie te definieer, wat gewoonlik die helfte van die bemonsteringsfrekwensie moet wees. Die vooraf ingestelde 10 kilo ohm (die klein pot met wit kop) word gebruik om die versterking en die Q -waarde van die filter af te stel. Die trimmerpot van 10 kilo ohm (een met 'n metaalknop wat soos 'n klein platkopskroef lyk) word gebruik om die spanning so na as die helfte van die Vref te stel.

Nota: as u die Nano aan P. C. hou die SPST -skakelaar oop, anders gesluit. Let veral daarop dat dit nie die kring/rekenaar/spanningsreguleerder of enige kombinasie van die bogenoemde kan benadeel nie

Stap 4: Nodige toepassings en IDE's

Nodige toepassings en IDE's
Nodige toepassings en IDE's
Nodige toepassings en IDE's
Nodige toepassings en IDE's
Nodige toepassings en IDE's
Nodige toepassings en IDE's
Nodige toepassings en IDE's
Nodige toepassings en IDE's
  1. Vir die kodering van die Arduino Nano het ek met die primitiewe AVR studio 5.1 gegaan, want dit lyk asof dit vir my werk. U kan die installeerder hier vind.
  2. Vir die programmering van die Arduino Nano het ek Xloader gebruik. Dit is baie maklik om 'n ligte instrument te gebruik om.hex -lêers na Arduinos te verbrand. U kan dit hier kry.
  3. Vir 'n klein bonus, 'n mini -projek en die afstelling van die stroombaan wat ek gebruik het. U kan dit hiervandaan kry, alhoewel daar groot veranderinge in elke hersiening is, sodat u miskien moet funksioneer met afgedankte funksies om die skets te laat werk.
  4. FL studio of enige ander MIDI -verwerkingsagteware. U kan die weergawe van FL studio met beperkte toegang gratis hier kry.
  5. Loop MIDI skep 'n virtuele MIDI -poort en word deur FL studio opgespoor asof dit 'n MIDI -toestel is. Kry hier 'n afskrif daarvan.
  6. Haarlose MIDI word gebruik om MIDI -boodskappe vanaf die COM -poort te lees en dit na die MIDI -poort te stuur. Dit ontfout ook MIDI-boodskappe intyds, wat ontfouting gemaklik maak. Kry Hairless MIDI hiervandaan.

Stap 5: Relevante kodes vir alles

Ek bedank Electronic Lifes MFG (webwerf hier !!) vir die vaste punt FFT -biblioteek wat ek in hierdie projek gebruik het. Die biblioteek is geoptimaliseer vir 'n mega -AVR -gesin. Dit is die skakel na biblioteeklêers en kodes wat hy gebruik het. Ek heg my kode hier onder aan. Dit bevat ook die verwerkingsskets en die AVR C -kode. Let asseblief daarop dat dit die konfigurasie is wat vir my gewerk het, en ek neem geen enkele verantwoordelikheid as u iets as gevolg van hierdie kodes beskadig nie. Ek het ook baie probleme ondervind om die kode te laat werk. Byvoorbeeld, DDRD (Data Direction Register) het DDDx (x = 0-7) as bitmaskers in plaas van die konvensionele DDRDx (x = 0-7). Let op hierdie foute tydens die opstel. Die verandering van die mikrobeheerder beïnvloed hierdie definisies, dus hou dit ook dop terwyl u kompilasiefoute hanteer. En as u wonder hoekom die projekmap DDT_Arduino_328p.rar heet, laat ons maar sê dat dit baie donker was in die aand toe ek begin en ek was lui genoeg om nie die ligte aan te skakel nie.: P

By die verwerkingskets het ek die verwerking 3.3.6 gebruik om hierdie skets te skryf. U moet die COM -poortnommer handmatig in die skets stel. U kan die opmerkings in die kode nagaan.

As iemand my kan help om die kodes na Arduino IDE en die nuutste verwerkingsweergawe oor te dra, sal ek bly wees en ek sal ook krediete gee aan die ontwikkelaars / bydraers.

Stap 6: Stel dit op

  1. Maak die kode oop en stel die kode saam met #define pcvisual ongekommenteer en #define midi_out kommentaar gelewer.
  2. Maak xloader oop en blaai na die gids met kode, blaai na die.hex -lêer en brand dit na nano deur die toepaslike bord en COM -poort te kies.
  3. Maak die verwerkingskets oop en voer dit uit met die toepaslike COM -poortindeks. As alles goed verloop, moet u 'n spektrum van die sein op pen A0 sien.
  4. Kry 'n skroewedraaier en draai die trimmerpot totdat die spektrum plat is (DC -komponent moet naby nul wees). Moet dan geen sein op die bord invoer nie. (Moenie die mikrofoonmodule aanheg nie).
  5. Gebruik nou 'n sweepgenerator-instrument soos hierdie om insette op die bord van die mikrofoon te lewer en die spektrum waar te neem.
  6. As u nie 'n sweep van frekwensies sien nie, verminder die afsnyfrekwensie deur die weerstand van 47 kilo ohm te verander. Verhoog ook die wins met die vooraf ingestelde pot van 10 kilo ohm. Probeer 'n plat en prominente sweepuitset verkry deur hierdie parameters te verander. Dit is die prettige deel (die klein bonus!), Speel u gunsteling liedjies en geniet hul intydse spektrum. (Kyk die video)
  7. Stel nou hierdie keer die ingebedde C -kode saam met #define pcvisual commented en #define midi_out uncommented.
  8. Laai die nuwe saamgestelde kode op arduino Nano.
  9. Maak LoopMidi oop en skep 'n nuwe poort.
  10. Maak FL studio of ander MIDI -koppelvlakprogrammatuur oop en maak seker dat die midi -poort van die lus sigbaar is in die MIDI -poortinstellings.
  11. Oop haarlose MIDI met arduino verbind. Kies die uitvoerpoort om die LoopMidi -poort te wees. Gaan na instellings en stel die Baud -koers op 115200. Kies nou die COM -poort wat ooreenstem met Arduino Nano en maak die poort oop.
  12. Speel 'n paar "suiwer" klanke naby die mikrofoon, en u moet ook die ooreenstemmende noot in die MIDI -sagteware hoor. As daar geen reaksie is nie, probeer om die op_drempel wat in die C -kode gedefinieer word, te verlaag. As die notas lukraak geaktiveer word, verhoog die up_threshold.
  13. Kry jou klavier en toets hoe vinnig jou stelsel is !! Die beste ding is dat dit in die goue slot-sone van note maklik verskeie gelyktydige druk op die toets maklik kan opspoor.

Opmerking: as een toepassing toegang tot die COM -poort het, kan dit nie deur 'n ander gelees word nie. As Hairless MIDI byvoorbeeld die COM -poort lees, kan Xloader nie die bord flits nie

Stap 7: Resultate/video's

Dis nou eers ouens! Hoop jy hou daarvan. As u voorstelle of verbeterings in die projek het, laat weet my in die kommentaarafdeling. Vrede!

Aanbeveel: