Talaan ng mga Nilalaman:

Real-time na Audio sa MIDI Converter .: 7 Mga Hakbang
Real-time na Audio sa MIDI Converter .: 7 Mga Hakbang

Video: Real-time na Audio sa MIDI Converter .: 7 Mga Hakbang

Video: Real-time na Audio sa MIDI Converter .: 7 Mga Hakbang
Video: 3-часовой марафон паранормальных и необъяснимых историй 2024, Nobyembre
Anonim
Real-time na Audio sa MIDI Converter
Real-time na Audio sa MIDI Converter

Namaste mga tao! Ito ay isang proyekto na nagtrabaho ako para sa isa sa aking mga kurso (Real-Time Digital Signal Processing) sa programa ng aking bachelor. Nilalayon ng proyekto ang paggawa ng isang sistema ng DSP na "nakikinig" ng data ng audio at naglalabas ng mga mensahe ng MIDI ng kaukulang tala sa UART. Ginamit ang Arduino Nano para sa hangaring ito. Mahabang kwento ang micro-controller ay gumagawa ng isang FFT sa papasok na audio data at gumagawa ng ilang pagtatasa ng mga tuktok at nagpapadala ng naaangkop na mensahe ng MIDI. Huwag mag-abala tungkol sa mga MOSFET bagaman dahil ang mga ito ay para sa ilang iba pang proyekto (na kung saan ay ilalagay din sa paglaon sa mga itinuturo din) at hindi kinakailangan para sa proyektong ito. Kaya't magsimula na tayo !!

Hakbang 1: Kinakailangan ang Mga Bahagi

Kinakailangan ang Mga Bahagi
Kinakailangan ang Mga Bahagi

Kakailanganin namin ang mga sumusunod na sangkap upang maitayo ang proyektong ito kahit na marami sa mga ito ay generic at maaaring mapalitan ng kanilang mga katumbas. Sumangguni rin sa diagram ng circuit upang mag-ehersisyo at manghuli para sa mas mahusay na pagpapatupad.

Dami ng Component

1. Electret Microphone. 1

2. 30 resistor ng Kilo Ohm. 1

3. 150 resistor ng Kilo Ohm. 1

4. 100 ohm risistor. 1

5. 2.2 Kilo Ohm resistors. 3

6. 10 Kilo Ohm preset na palayok. 1

7. 10 Kilo Ohm trimmer pot. 1

8. 47 Kilo Ohm stereo pot. 1

9. 470 resistors ng Ohms. 2

10. 0.01uF capacitors. 2

11. 2.2uF capacitors. 3

12. 47uF capacitors. 2

13. 1000uF capacitor. 1

14. 470uF capacitor. 1

15. regulator ng 7805 boltahe. 1

16. Babae at Lalaki na header strip. Bawat isa

17. Konektor ng Barrel Jack. 1

18. 12 V 1 Amp DC Adapter. 1

19. SPST switch. (Opsyonal) 1

20. Perfboard. 1

Hakbang 2: Mga Teknikal na Pagtukoy

Teknikal na mga detalye
Teknikal na mga detalye

Dalas ng sampling: 3840 na mga sample / sec

Bilang ng mga sample bawat FFT: 256

Paglutas ng Dalas: 15Hz

Refresh rate: Sa paligid ng 15 Hz

Ang mas mababa at mas mataas na antas ng mga tala ng musikal ay hindi nakuha nang tama. Ang mga mas mababang tala ay nagdurusa mula sa mababang resolusyon ng dalas kung saan ang mas mataas na mga frequency ay nagdurusa mula sa mababang mga rate ng pag-sample. Ang arduino ay wala na sa memorya kaya walang paraan upang makakuha ng mas mahusay na resolusyon. At ang mas mahusay na resolusyon ay darating sa halagang nabawasan ang rate ng pag-refresh kaya hindi maiiwasan ang trade-off. Layman na bersyon ng prinsipyo ng walang katiyakan sa Heisenberg.

Ang pangunahing kahirapan ay ang exponential spacing sa pagitan ng mga tala (Tulad ng nakikita sa pigura. Ang bawat salpok sa dalas ng axis ay isang musikal na tala). Maaaring makatulong ang mga algorithm tulad ng LFT ngunit medyo advanced at medyo kumplikado para sa isang aparato tulad ng arduino Nano.

Hakbang 3: Mga Diagram ng Circuit

Mga Diagram ng Circuit
Mga Diagram ng Circuit
Mga Diagram ng Circuit
Mga Diagram ng Circuit
Mga Diagram ng Circuit
Mga Diagram ng Circuit
Mga Diagram ng Circuit
Mga Diagram ng Circuit

Tandaan: Huwag mag-abala ng tatlong MOSFET at mga terminal ng tornilyo sa mga larawan. Hindi kinakailangan ang mga ito para sa proyektong ito. Pansinin na ang board ng input ng mikropono ay naaalis o kung tawagin nila itong Modular. Ang isang maliit na paglalarawan ng iba't ibang mga bloke ay ibinibigay sa ibaba.

1) Ang dalawang 470 ohm resistors ay pinagsasama ang stereo audio signal sa mono audio signal. Tiyaking ang lupa ng signal ng papunta sa virtual na lupa (vg sa circuit diagram) at hindi sa lupa ng circuit.

2) Ang susunod na bloke ay isang 2nd order sallen-key low pass filter na responsable para sa banda na nililimitahan ang signal ng pag-input upang maiwasan ang aliasing. Dahil nagtatrabaho kami sa + 12v lamang na supply ay kinukilingan namin ang op-amp sa pamamagitan ng paggawa ng isang RC voltage divider. niloloko ang op-amp sa pag-iisip na ang supply ay 6 0 -6 volts supply (dual rail) kung saan ang vg ay ang sanggunian sa lupa para sa op amp.

3) Kung gayon ang output ay mababang pumasa na na-filter upang harangan ang DC offset ng 6 volts at isinama sa DC na halos 0.55 volts dahil ang ADC ay mai-configure upang magamit ang panloob na 1.1 v bilang Vref.

Tandaan: Ang pre-amplifier para sa electret microphone ay hindi ang pinakamahusay na circuit sa internet. Ang isang circuit na kinasasangkutan ng op-amp ay naging isang mas mahusay na pagpipilian. Nais namin na ang tugon sa dalas ay maging flat hangga't maaari. Ang 47 kilo ohms stereo pot ay ginagamit upang tukuyin ang cut-off frequency na dapat ay karaniwang kalahati ng dalas ng sampling. Ang 10 kilo ohm preset (Ang maliit na palayok na may puting ulo) ay ginagamit upang ibagay ang nakuha at ang Q na halaga ng filter. Ang 10 kilo ohm trimmer pot (isa na may isang metallic tuning knob na parang isang maliit na flat head screw) ay ginagamit upang maitakda ang boltahe na mas malapit sa kalahating Vref.

Tandaan: Kapag kumokonekta ka sa Nano sa P. C. panatilihing bukas ang switch ng SPST kung hindi pa nakasara. Panatilihin ang espesyal na pangangalaga sa kabiguang gawin ito ay maaaring makapinsala sa circuit / computer / voltage regulator o anumang kombinasyon ng nasa itaas

Hakbang 4: Mga Kinakailangan na Aplikasyon at IDE

Mga Kinakailangan na Aplikasyon at IDE
Mga Kinakailangan na Aplikasyon at IDE
Mga Kinakailangan na Aplikasyon at IDE
Mga Kinakailangan na Aplikasyon at IDE
Mga Kinakailangan na Aplikasyon at IDE
Mga Kinakailangan na Aplikasyon at IDE
Mga Kinakailangan na Aplikasyon at IDE
Mga Kinakailangan na Aplikasyon at IDE
  1. Para sa pag-coding ng Arduino Nano nagpunta ako sa primitive AVR studio 5.1 dahil mukhang gagana ito para sa akin. Maaari mong makita ang installer dito.
  2. Para sa pagprograma ng Arduino Nano ginamit ko ang Xloader. Napakadali nitong gamitin ang magaan na tool sa pag-burn ng.hex file sa Arduinos. Maaari mo itong makuha dito.
  3. Para sa maliit na bonus mini na proyekto at pag-tune ng circuit na ginamit ko sa pagproseso. Maaari mo itong makuha mula rito bagaman gumawa ng mga pangunahing pagbabago sa bawat rebisyon upang maaari kang umikot sa mga hindi na ginagamit na pag-andar upang gumana ang sketch.
  4. FL studio o anumang iba pang software sa pagpoproseso ng MIDI. Maaari kang makakuha ng FL studio limitadong bersyon ng pag-access nang libre mula dito.
  5. Lumilikha ang Loop MIDI ng isang virtual na port ng MIDI at napansin ng FL studio na para bang isang aparato na MIDI. Kumuha ng isang kopya ng pareho mula rito.
  6. Ginagamit ang Hairless MIDI upang mabasa ang mga mensahe ng MIDI mula sa COM port at ipadala ito sa loop MIDI port. Nagde-debug din ito ng mga mensahe ng MIDI ng real-time na ginagawang maginhawa ang pag-debug. Kunin dito ang Hairless MIDI.

Hakbang 5: Mga May-katuturang Code para sa Lahat

Nais kong pasalamatan ang Electronic Lifes MFG (Website Dito !!) para sa nakapirming point FFT library na ginamit ko sa proyektong ito. Ang library ay na-optimize para sa mega pamilya ng AVR. Ito ang link sa mga file ng library at code na ginamit niya. Inilalakip ko ang aking code sa ibaba. Kasama rito ang pagproseso ng sketch at ang AVR C code din. Mangyaring tandaan na ito ang pagsasaayos na gumana para sa akin at hindi ako kumukuha ng anumang responsibilidad kung ano pa man kung napinsala mo ang anumang bagay dahil sa mga code na ito. Gayundin, marami akong mga isyu na sinusubukan na gumana ang code. Halimbawa, ang DDRD (Rehistro ng Direksyon ng Data) ay may DDDx (x = 0-7) bilang mga bit mask sa halip na maginoo DDRDx (x = 0-7). Abangan ang mga error na ito habang nag-iipon. Ang pagbabago rin ng micro-controller ay nakakaapekto sa mga kahulugan na ito kaya't bantayan din ito habang nakikipag-usap sa mga error sa pagtitipon. At kung nagtataka ka kung bakit ang folder ng proyekto ay tinatawag na DDT_Arduino_328p.rar, sabihin na lang natin na napakadilim sa gabi nang magsimula ako at tinatamad ako upang hindi buksan ang mga ilaw.: P

Pagdating sa pagproseso ng sketch, ginamit ko ang pagproseso ng 3.3.6 upang isulat ang sketch na ito. Kakailanganin mong itakda ang numero ng COM port sa sketch nang manu-mano. Maaari mong suriin ang mga komento sa code.

Kung may makakatulong sa akin na mai-port ang mga code sa Arduino IDE at pinakabagong bersyon ng pagproseso, matutuwa ako at magbibigay ng mga kredito sa mga nag-ambag din ng developer.

Hakbang 6: Pagse-set up nito

  1. Buksan ang code at ipunin ang code na may #define pcvisual na hindi komportable at nagkomento si #define midi_out.
  2. Buksan ang xloader at mag-browse sa direktoryo na may code, mag-browse sa.hex file at sunugin ito sa nano sa pamamagitan ng pagpili ng naaangkop na board at COM port.
  3. Buksan ang sketch ng pagpoproseso at patakbuhin ito na may naaangkop na index ng COM port. Kung maayos ang lahat dapat mong makita ang isang spectrum ng signal sa pin A0.
  4. Kumuha ng isang driver ng tornilyo at i-on ang palayan ng pantabas hanggang sa ang spectrum ay flat (ang bahagi ng DC ay dapat na malapit sa zero). Huwag maglagay ng anumang senyas sa pisara pagkatapos. (Huwag ilakip ang module ng mikropono).
  5. Gumamit ngayon ng anumang tool ng sweep generator na tulad nito upang magbigay ng input sa board mula sa micro-phone at obserbahan ang spectrum.
  6. Kung hindi mo nakikita ang isang pagwalis ng mga frequency, bawasan ang cut-off na dalas sa pamamagitan ng pagbabago ng 47 kilo ohm na paglaban. Taasan din ang nakuha sa pamamagitan ng paggamit ng 10 kilo ohm preset pot. Subukang makakuha ng isang patag at kilalang output ng walis sa pamamagitan ng pagbabago ng mga parameter na ito. Ito ang kasiya-siyang bahagi (ang maliit na bonus!), Patugtugin ang iyong mga paboritong kanta at tangkilikin ang kanilang real-time spectrum. (Panoorin ang video)
  7. I-compile muli ang naka-embed na C code sa oras na ito sa # tukuyin ang pcvisual na nagkomento at #define midi_out na hindi komportable.
  8. I-reload ang bagong naipon na code sa arduino Nano.
  9. Buksan ang LoopMidi at lumikha ng isang bagong port.
  10. Buksan ang FL studio o iba pang software ng interface ng MIDI at tiyaking makikita ang loop midi port sa mga setting ng MIDI port.
  11. Buksan ang walang buhok na MIDI na may konektado sa arduino. Piliin ang port ng output upang maging port ng LoopMidi. Pumunta sa mga setting at itakda ang rate ng Baud na maging 115200. Ngayon piliin ang COM port na naaayon sa Arduino Nano at buksan ang port.
  12. Patugtugin ang ilang mga "purong" tono malapit sa mikropono at dapat mong marinig ang katumbas na tala na na-hit sa MIDI software din. Kung walang tugon subukang babaan ang up_threshold na tinukoy sa C code. Kung ang mga tala ay napalitaw nang sapalaran pagkatapos ay taasan ang up_threshold.
  13. Kunin ang iyong piano at subukan kung gaano kabilis ang iyong system !! Ang pinakamagandang bagay ay ang nasa gintong-lock na sona ng mga tala maaari itong kumportable nang madaling makita ang maraming mga sabay-sabay na pagpindot sa key.

Tandaan: Kapag na-access ang COM port ng isang application hindi ito maaaring mabasa ng isa pa. Halimbawa kung ang Hairless MIDI ws na nagbabasa ng COM port, hindi ma-flash ng Xloader ang board

Hakbang 7: Mga Resulta / Video

Iyon lang ito para sa ngayon guys! Sana magustuhan mo. Kung mayroon kang anumang mga mungkahi o pagpapabuti sa proyekto ipaalam sa akin sa seksyon ng komento. Kapayapaan!

Inirerekumendang: