Turinys:

Realaus laiko garso į MIDI keitiklis .: 7 žingsniai
Realaus laiko garso į MIDI keitiklis .: 7 žingsniai

Video: Realaus laiko garso į MIDI keitiklis .: 7 žingsniai

Video: Realaus laiko garso į MIDI keitiklis .: 7 žingsniai
Video: Zeitgeist: Judame Pirmyn (2011) 2024, Liepa
Anonim
Realaus laiko garso ir MIDI keitiklis
Realaus laiko garso ir MIDI keitiklis

Namaste žmonės! Tai projektas, kurį dirbau viename iš savo bakalauro programos kursų (skaitmeninio signalo apdorojimas realiuoju laiku). Projekto tikslas - sukurti DSP sistemą, kuri „klausytų“garso duomenų ir perduotų atitinkamų užrašų MIDI pranešimus per UART. Šiuo tikslu buvo naudojamas „Arduino Nano“. Trumpai tariant, mikrovaldiklis atlieka FFT įeinančius garso duomenis ir atlieka tam tikrų smailių analizę bei siunčia atitinkamą MIDI pranešimą. Vis dėlto nesijaudinkite dėl MOSFET, nes jie yra skirti kitam projektui (kuris taip pat bus pateiktas vėliau kaip instrukcijos) ir nėra būtini šiam projektui. Taigi pradėkime jau !!

1 žingsnis: reikalingi komponentai

Privalomi komponentai
Privalomi komponentai

Šiam projektui sukurti mums reikės šių komponentų, nors daugelis jų yra bendri ir gali būti pakeisti jų atitikmenimis. Taip pat žiūrėkite grandinės schemą, kad išsiaiškintumėte ir ieškotumėte geresnių įgyvendinimo būdų.

Komponento kiekis

1. Elektretinis mikrofonas. 1

2. 30 Kilo omų rezistorius. 1

3. 150 Kilo omo rezistorius. 1

4. 100 omų rezistorius. 1

5. 2.2 Kilo omų rezistoriai. 3

6. 10 Kilo Ohm iš anksto nustatytas puodas. 1

7. 10 Kilo omų žoliapjovės puodas. 1

8. 47 Kilo Ohm stereo puodas. 1

9. 470 omų rezistoriai. 2

10. 0.01uF kondensatoriai. 2

11. 2.2uF kondensatoriai. 3

12. 47uF kondensatoriai. 2

13. 1000uF kondensatorius. 1

14. 470uF kondensatorius. 1

15. 7805 įtampos reguliatorius. 1

16. Moterų ir vyrų antraštės juostelė. Po 1

17. „Barrel Jack“jungtis. 1

18. 12 V 1 A nuolatinės srovės adapteris. 1

19. SPST jungiklis. (Neprivaloma) 1

20. Perfboard. 1

2 žingsnis: Techninės specifikacijos

Techninės specifikacijos
Techninės specifikacijos

Mėginių ėmimo dažnis: 3840 mėginių per sekundę

Mėginių skaičius per FFT: 256

Dažnio skiriamoji geba: 15 Hz

Atnaujinimo dažnis: apie 15 Hz

Apatinės ir aukštesnės muzikos natų skalės nėra užfiksuotos teisingai. Žemesnės natos kenčia nuo žemo dažnio skiriamosios gebos, o aukštesnės - dėl žemo atrankos dažnio. „Arduino“atmintyje jau nėra atminties, todėl nėra galimybės gauti geresnės skiriamosios gebos. Dėl geresnės skiriamosios gebos sumažės atnaujinimo dažnis, todėl kompromisas yra neišvengiamas. Laymano Heisenbergo neapibrėžtumo principo versija.

Pagrindinis sunkumas yra eksponentinis tarpas tarp natų (Kaip matyti paveikslėlyje. Kiekvienas impulsas dažnio ašyje yra muzikos nata). Tokie algoritmai kaip LFT gali padėti, tačiau tai yra šiek tiek pažengę ir šiek tiek sudėtingi tokiam įrenginiui kaip „arduino Nano“.

3 žingsnis: grandinės schemos

Grandinių schemos
Grandinių schemos
Grandinių schemos
Grandinių schemos
Grandinių schemos
Grandinių schemos
Grandinių schemos
Grandinių schemos

Pastaba: nesijaudinkite dėl trijų MOSFET ir nuotraukose esančių varžtų gnybtų. Šiam projektui jie nereikalingi. Atkreipkite dėmesį, kad mikrofono įvesties plokštė yra nuimama arba vadinama moduline. Žemiau pateikiamas nedidelis įvairių blokų aprašymas.

1) Du 470 omų rezistoriai sujungia stereo garso signalą su mono garso signalu. Įsitikinkite, kad įėjimo į žemę eina į virtualų įžeminimą (grandinės schemoje - vg), o ne į grandinės įžeminimą.

2) Kitas blokas yra 2-os eilės sallen-key žemo dažnio filtras, kuris yra atsakingas už juostos ribojimą, kad būtų išvengta įvesties. Kadangi dirbame tik su +12 V maitinimo šaltiniu, mes pakreipiame op-amp, sukurdami RC įtampos skirstytuvą. tai suklaidina op -amp manyti, kad maitinimas yra 6 0–6 voltų maitinimas (dvigubas bėgis), kur vg yra pagrindinė operacinio stiprintuvo nuoroda.

3) Tada išėjimas yra žemo dažnio filtras, blokuojantis 6 voltų nuolatinės srovės poslinkį ir sujungtas su maždaug 0,55 voltų nuolatine srove, nes ADC bus sukonfigūruotas naudoti vidinę 1,1 v kaip Vref.

Pastaba: elektretinio mikrofono išankstinis stiprintuvas nėra geriausia grandinė internete. Grandinė, kurioje yra op-amp, būtų buvęs geresnis pasirinkimas. Mes norime, kad dažnio atsakas būtų kuo lygesnis. 47 kilogramų omų stereofoninis katilas naudojamas nustatyti ribinį dažnį, kuris paprastai turėtų būti pusė mėginių ėmimo dažnio. Iš anksto nustatytas 10 kg omų (mažas puodelis su balta galvute) naudojamas filtro stiprinimui ir Q reikšmei sureguliuoti. 10 kg omų žoliapjovės puodas (vienas su metaline derinimo rankenėle, atrodančia kaip mažas plokščias galvutės varžtas) naudojamas įtampai nustatyti iki pusės Vref.

Pastaba: jungdami „Nano“prie P. C. laikykite SPST jungiklį atvirą, kitaip uždarytą. Būkite ypač atsargūs, jei to nepadarysite, galite pakenkti grandinei/kompiuteriui/įtampos reguliatoriui arba bet kuriam aukščiau išvardintam deriniui

4 žingsnis: būtinos programos ir IDE

Būtinos programos ir IDE
Būtinos programos ir IDE
Būtinos programos ir IDE
Būtinos programos ir IDE
Būtinos programos ir IDE
Būtinos programos ir IDE
Būtinos programos ir IDE
Būtinos programos ir IDE
  1. Norėdami koduoti „Arduino Nano“, nuėjau su primityvia AVR studija 5.1, nes man atrodo, kad ji man tinka. Diegimo programą galite rasti čia.
  2. „Arduino Nano“programavimui naudojau „Xloader“. Tai tikrai lengva naudoti lengvas įrankis įrašyti.hex failus į Arduinos. Jį galite gauti čia.
  3. Mažam papildomam mini projektui ir grandinės derinimui naudojau apdorojimą. Jį galite gauti iš čia, nors kiekvienoje peržiūroje yra esminių pakeitimų, todėl, norint, kad eskizas veiktų, gali tekti nenaudoti funkcijų.
  4. FL studija ar bet kuri kita MIDI apdorojimo programinė įranga. Čia galite nemokamai gauti „FL studio“ribotos prieigos versiją.
  5. „Loop MIDI“sukuria virtualų MIDI prievadą ir „FL studio“jį aptinka tarsi MIDI įrenginį. Gaukite to paties kopiją iš čia.
  6. Plikas MIDI naudojamas skaityti MIDI pranešimus iš COM prievado ir siųsti juos į ciklinį MIDI prievadą. Jis taip pat derina MIDI pranešimus realiuoju laiku, todėl derinimas yra patogus. Gaukite MIDI be plaukų iš čia.

5 žingsnis: atitinkami kodai viskam

Norėčiau padėkoti „Electronic Lifes MFG“(svetainė čia !!) už fiksuoto taško FFT biblioteką, kurią panaudojau šiame projekte. Biblioteka yra optimizuota mega AVR šeimai. Tai nuoroda į bibliotekos failus ir kodus, kuriuos jis naudojo. Žemiau pridedu savo kodą. Jame taip pat yra apdorojimo eskizas ir AVR C kodas. Atminkite, kad tokia konfigūracija man tiko ir aš neprisiimu jokios atsakomybės, jei sugadinsite ką nors dėl šių kodų. Be to, turėjau daug problemų bandydamas priversti kodą veikti. Pavyzdžiui, DDRD (duomenų krypties registras) turi DDDx (x = 0-7) kaip bitų kaukes, o ne įprastą DDRDx (x = 0-7). Rinkdamiesi atkreipkite dėmesį į šias klaidas. Mikrovaldiklio keitimas taip pat daro įtaką šioms apibrėžtims, todėl taip pat stebėkite, kai susiduriate su kompiliavimo klaidomis. Ir jei jums įdomu, kodėl projekto aplankas vadinamas DDT_Arduino_328p.rar, tai sakykime, kad vakare, kai pradėjau, buvo labai tamsu ir aš buvau pakankamai tingus, kad neįjungčiau šviesos.: P

Atėjęs prie apdorojimo eskizo, šiam eskizui parašyti naudojau apdorojimą 3.3.6. Eskize turėsite rankiniu būdu nustatyti COM prievado numerį. Kode esančius komentarus galite patikrinti.

Jei kas nors gali man padėti perkelti kodus į „Arduino IDE“ir naujausią apdorojimo versiją, aš džiaugiuosi ir suteiksiu kreditus kūrėjams ir bendraautoriams.

6 veiksmas: nustatykite

  1. Atidarykite kodą ir sukompiliuokite kodą naudodami #define pcvisual nekomentuojamą ir #define midi_out.
  2. Atidarykite „xloader“ir suraskite katalogą su kodu, suraskite.hex failą ir įrašykite jį į nano, pasirinkdami atitinkamą plokštę ir COM prievadą.
  3. Atidarykite apdorojimo eskizą ir paleiskite jį naudodami atitinkamą COM prievado indeksą. Jei viskas gerai, turėtumėte matyti signalo spektrą A0 kaištyje.
  4. Gaukite atsuktuvą ir pasukite žoliapjovės puodą, kol spektras bus plokščias (nuolatinės srovės komponentas turi būti artimas nuliui). Tada neveskite jokio signalo į plokštę. (Nepritvirtinkite mikrofono modulio).
  5. Dabar naudokite bet kurį tokį šlavimo generatoriaus įrankį, kad įvestumėte plokštę iš mikro telefono ir stebėtumėte spektrą.
  6. Jei nematote dažnių šuolio, sumažinkite ribinį dažnį, pakeisdami 47 kg omo varžą. Taip pat padidinkite padidėjimą naudodami 10 kg omo iš anksto nustatytą puodą. Pakeisdami šiuos parametrus, pabandykite gauti vienodą ir pastebimą valymo rezultatą. Tai linksmoji dalis (maža premija!), Paleiskite mėgstamas dainas ir mėgaukitės jų realaus laiko spektru. (Žiūrėti video įrašą)
  7. Dabar šį kartą dar kartą surinkite įterptąjį C kodą, pakomentuodami #define pcvisual ir nekomentuodami #define midi_out.
  8. Iš naujo įkelkite sukurtą kodą į arduino Nano.
  9. Atidarykite „LoopMidi“ir sukurkite naują prievadą.
  10. Atidarykite „FL studio“ar kitą MIDI sąsajos programinę įrangą ir įsitikinkite, kad „MIDI“prievado nustatymuose matomas kilpos midi prievadas.
  11. Atviras beplaukis MIDI su prijungtu arduino. Pasirinkite išvesties prievadą kaip „LoopMidi“prievadą. Eikite į nustatymus ir nustatykite „Baud“greitį 115200. Dabar pasirinkite COM prievadą, atitinkantį „Arduino Nano“, ir atidarykite prievadą.
  12. Paleiskite „grynus“tonus šalia mikrofono ir turėtumėte išgirsti atitinkamą natos smūgį MIDI programinėje įrangoje. Jei atsakymo nėra, pabandykite sumažinti C kode nustatytą slenkstį. Jei užrašai suaktyvinami atsitiktinai, padidinkite slenkstį.
  13. Gaukite pianiną ir patikrinkite, kaip greitai veikia jūsų sistema !! Geriausia tai, kad aukso spalvos užrakinimo zonoje jis gali patogiai aptikti kelis vienu metu paspaudžiamus klavišus.

Pastaba: Kai COM prievadą pasiekia viena programa, jo negali perskaityti kita programa. Pavyzdžiui, jei beplaukis MIDI skaito COM prievadą, „Xloader“negalėtų blykstelėti plokštės

7 veiksmas: rezultatai/vaizdo įrašai

Tai kol kas vaikinai! Tikimės, kad jums patiks. Jei turite pasiūlymų ar patobulinimų projekte, praneškite man komentarų skiltyje. Ramybės!

Rekomenduojamas: