Talaan ng mga Nilalaman:

Melody: 8 Hakbang (na may Mga Larawan)
Melody: 8 Hakbang (na may Mga Larawan)

Video: Melody: 8 Hakbang (na may Mga Larawan)

Video: Melody: 8 Hakbang (na may Mga Larawan)
Video: Pagsasanay sa pagbasa ng mga pangungusap | Filipino Kinder | Grade 1 & 2 | Practice Reading 2024, Nobyembre
Anonim
Image
Image
Pag-unawa sa Daloy
Pag-unawa sa Daloy

Sa tabi ng maraming mga pakinabang at teknolohikal na solusyon na nagpapahintulot sa trabaho mula sa bahay, mananatili ang kahirapan sa pagbubuo at paglikha ng suporta sa buhay sa mga katrabaho. Ang MELODY ay isang digital-pisikal na aparato na nagbibigay-daan sa paglikha ng magkakasamang maikling musika na jam. Ang mga katrabaho ay nag-uugnay ng oras at ang aparato ay nagtatakda ng isang session ng jam na may mga pagliko at iba't ibang mga random na tunog. Ang unang kalahok ay nagtatakda ng isang tukoy na ritmo, pagkatapos kung saan ang bawat kalahok ay nagdaragdag ng kanilang sariling seksyon ng musikal na naaayon sa itinakdang ritmo. Upang gawing mas madali para sa mga gumagamit na walang background sa musikal, tinutulungan sila ng software na makasabay sa pamamagitan ng pag-sample ng kanilang mga pag-click at pagsasaayos sa naaangkop na ritmo. Nagtatapos ang sesyon pagkalipas ng halos 3 minuto kapag natapos na ng lahat ng mga kalahok ang pag-record ng kanilang bahagi.

Paano ito gumagana?

Ang Melody ay batay sa hardware ng ESP2866, na nakikipag-usap sa isang Node-Red server sa paglipas ng MQTT protocol. Isasalin ng aparato ang mga tala ng manlalaro sa isang string ng mga character na ipinadala sa server at mula sa server pabalik sa iba pang mga manlalaro. Pinapayagan nitong maglaro at pakinggan ang lahat nang walang pag-abala mula sa kanilang koneksyon sa network.

Si Melody ay may dalawang pangunahing mga tagapagpahiwatig ng visual. Ang una ay isang LED strip na ipaalam sa manlalaro kung kailan nagsisimula ang Loop at kung kailan ito magtatapos at ipahiwatig kung turn ng player. Ang pangalawa ay isang LED display sa gitna ng produkto, na ginagamit upang maipakita nang biswal ang mayroon nang tune. Ang isang countdown mula 3 hanggang 1 ay nagsasaad na magsimulang maglaro at isang display ng timings ang magdidirekta sa gumagamit kung kailan at kung paano niya nais mag-ambag sa Melody ng pangkat. Awtomatikong nai-save ang recording sa ulap ng kumpanya para magamit sa hinaharap.

Ang proyektong ito ay dinisenyo ng apat na mag-aaral sa Media inovasi lab (MiLab) sa interdisciplinary Center Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar, at Gad Stern. Sa tulong ni Zvika Markfeld, Netta Ofer at Michal Leschinsky at ng patnubay nina Noa Morag at Oren Zuckerman.

salamat kay Tom Granot para sa paglikha ng isang mahusay na itinuro na nakatulong sa akin na malaman kung paano ipatupad ang ilan sa mga bagay dito (ang ilan sa mga hakbang dito ay na-modelo pagkatapos ng mahusay na itinuro na ito).

Mga gamit

  • 3d printer
  • ESP8266
  • 7 mga pindutan
  • 8X8 LED matrix
  • WS2812B LED Strip
  • I2S amplifier
  • Babae 1/8 "(3.5mm) 4 Pole Audio Jack
  • 4X 1K risistor
  • Resistor ng 1X3K

Hakbang 1: Pag-unawa sa Daloy

Pag-unawa sa Daloy
Pag-unawa sa Daloy
Pag-unawa sa Daloy
Pag-unawa sa Daloy

Sa proyektong ito sinubukan naming harapin ang ilang mga isyu:

  1. Paano namin ito magagawa sa online, upang ang mga manlalaro ay maaaring maglaro nang sabay?
  2. Paano tayo makakaligid sa mga latency ng internet at lumikha ng isang seamless na karanasan?
  3. Paano namin gagawing maganda ang tunog ng musika kahit para sa mga taong walang background sa musikal?

Oras at serialization ng musika

Upang malutas ang unang isyu tiningnan namin ang MIDI protocol at sinubukan itong gamitin, ngunit nakita namin na mas matatag ito kung gayon ang talagang kailangan namin ay talagang nais naming gawing simple upang mabuo namin ang unang gumaganang prototype. Kaya kumuha kami ng inspirasyon mula sa MIDI at ginawa ang aming loop ng musikal na kinakatawan ng isang string ng mga numero (mula 0-5) beses sa laki ng mga loop na oras ng mga manlalaro (ipapaliwanag namin ang lahat ng matematika ng musika sa paglaon).

Sa musika, pinaghiwalay namin ang mga ritmo sa mga musikang bar. Ang bawat bar ay karaniwang isang maliit na oras na segment na pipiliin naming gumamit ng 4/4 (nangangahulugang 4 na beats sa isang musikal na bar) - ang pinakakaraniwan.

Ang bawat pagtalo ay nahahati sa 4 na mga sampling window upang ang bawat tala na nilalaro ay awtomatikong nakahanay sa isang magandang posisyon at payagan din kaming kumatawan sa isang kanta bilang isang string ng mga numero upang ipadala sa server.

Upang maging palakaibigan sa mga manlalaro nang walang background sa musika gumawa kami ng tatlong bagay:

  1. Limitahan ang bilang ng mga susi upang mag-focus ang player sa mas kaunting mga pagpipilian.
  2. Pinili namin ang mga tala sa parehong sukat na mahusay na tumutugtog nang sa gayon ay walang anumang tunog ng hindi pagkakasundo.
  3. Ang bawat pindutin ay nakatakda sa "window" ng ritmo sa gayon alien ang musika ng manlalaro sa ritmo

Mga protocol sa komunikasyon

Kaya pagkatapos nating maunawaan ang lohika sa likod ng musika, paano natin ito maikakausap sa pagitan ng aming mga manlalaro?

para doon, gumagamit kami ng MQTT, isang publish-subscribe network protocol na nagdadala ng mga mensahe sa pagitan ng mga aparato.

ang bawat manlalaro ay naka-subscribe sa dalawang mga paksa: ang loop (makuha ang pinaka-kasalukuyang loop) at ang pagliko (nakakakuha ng id ng kasalukuyang manlalaro para sa mga layunin sa pag-sync).

Sa kanilang turn kapag ang isang manlalaro ay tapos na sa pag-play ng tune ay pipindutin niya ang UP button at ang loop (ang na-update) ay ipapadala sa MQTT broker, na ibabalik ito sa lahat ng mga manlalaro sa loop channel.

ang loop na ito ay mananatiling "tulog" hanggang sa ang kasalukuyang loop ay tapos na sa paglalaro at pagkatapos ay papalitan ito. sa gayon ito ay magiging transparent sa player. Gayundin dahil ang bagong loop ay kasalukuyang nai-save nang lokal sa aparato ng manlalaro walang latency sa internet para sa musika kaya nalutas namin ang pangalawang isyu.

Hakbang 2: Pagtatakda ng Server - Ngrok

Pagtatakda ng Server - Ngrok
Pagtatakda ng Server - Ngrok
Pagtatakda ng Server - Ngrok
Pagtatakda ng Server - Ngrok

ang ngrok ay isang serbisyo sa tunneling. Pinapayagan kaming mailantad ang isang lokal na serbisyo na nagpapatakbo (sa aming kaso, Node-RED) sa labas ng mundo - nang walang abala sa pag-set up ng isang server o pakikitungo sa mga tala ng DNS. Pinapatakbo mo lang ang Node-RED sa iyong computer, at pagkatapos ay patakbuhin ang ngrok sa parehong port na tumatakbo ang Node-RED.

Iyon lang - makakakuha ka ng isang URL na magagamit mo upang ma-access ang Node-RED mula sa kahit saan sa mundo, hindi alintana kung anong network ito nakakonekta.

Pag-install at Pag-configure

  1. Mag-download ng ngrok para sa iyong operating system mula rito.
  2. Sundin ang hakbang sa pahina ng pag-download, hanggang sa hakbang na "Sunugin ito".
  3. Sa "Fire it up step", palitan ang 80 para sa 1883 - at ang http sa tcp tulad ng,./ngrok tcp 1883 depende sa iyong
  4. i-save ang URL at numero ng port (nakita sa imahe) kakailanganin namin ang, sa paglaon.

Hakbang 3: Pagtatakda ng Server - Node-Red

Pagtatakda ng Server - Node-Red
Pagtatakda ng Server - Node-Red

Ang lohika ng Server ng proyekto, ang Node-RED ay isang kapaligiran sa visual na programa na nagbibigay-daan sa iyo upang ikonekta ang iba't ibang mga software (at hardware!).

Ginawa namin dito ang lohika ng komunikasyon sa pagitan ng lahat ng mga manlalaro (pagbabahagi at pagtanggap ng mga loop at pag-uugnay ng mga pagliko)

Pag-install ng Node-Red

sundin ang mga sumusunod na hakbang upang mai-load ang aming daloy ng Node-RED sa iyong lokal na computer:

  1. Nangangailangan ang Node-RED ng Node.js, i-install ito mula rito
  2. i-install ang Node-RED mismo gamit ang mga tagubilin dito.

Ngayon na na-install mo ang Node-RED, patakbuhin ito gamit ang mga tagubilin sa hakbang sa itaas at patunayan na maaari mong makita ang isang walang laman na pahina ng canvas. Dapat itong matatagpuan sa

Kakailanganin mo ngayon i-import ang daloy na ginamit namin para sa proyektong ito, mahahanap mo ito dito at pindutin lamang ang pag-import idagdag ang JSON file at pindutin ang I-deploy.

Pag-install ng Node-Red:

kung titingnan mo ang imahe na naka-attach sa hakbang na ito maaari mong makita na mayroon kaming 2 pangunahing "mga pagkilos" nakakatanggap kami ng isang kasalukuyang loop mula sa isa sa aming mga manlalaro at pagkatapos ay maihatid namin ito sa lahat ng iba pang mga manlalaro. bilang karagdagan, nai-broadcast namin ang bagong pagliko sa lahat ng mga manlalaro. kaya't ang laro ay mananatiling naka-sync.

Hakbang 4: Pagtatakda ng Server - MQTT (Mosquitto)

Itinatakda ang Server - MQTT (Mosquitto)
Itinatakda ang Server - MQTT (Mosquitto)

Dahil ang Node-RED ay walang sariling MQTT broker, at kakailanganin naming makipag-usap sa aming mga sensor at activator sa MQTT, gagamit kami ng isang nakatuong MQTT broker. Dahil inirerekumenda ng Node-RED si Mosquitto, ito ang gagamitin namin. Tingnan dito para sa ilang impormasyon tungkol sa MQTT at kung bakit ito madalas ginagamit sa mga proyekto ng IoT.

Pag-install at Pag-configure

  1. Mag-download ng Mosquitto mula rito at i-install ito, lahat ayon sa iyong operating system.
  2. Karaniwan, kailangan mong sundin ang mga tagubilin dito upang ikonekta ang Node-RED sa Mosquitto. Gayunpaman, kung ginamit mo ang aming daloy, naka-pre-configure na ito para sa iyo. Hangga't na-install mo nang maayos ang daloy at Mosquitrro, at tumatakbo ang Mosquitto sa port 1883 (kung saan ito tumatakbo bilang default), dapat itong gumana sa kahon.
  3. Tandaan na nangangahulugan ito na ang MQTT broker at ang iyong Node-RED server ay tumatakbo sa parehong machine. Kapaki-pakinabang ito para sa pagpapagaan ng komunikasyon sa loob ng system. Tingnan ang tala sa ibaba para sa karagdagang impormasyon.

Pagsubaybay sa trapiko ng MQTT

Gumamit ako ng MQTTfx upang subaybayan ang trapiko, ito ay isang mahusay na tool na may isang napaka-simpleng GUI.

Hakbang 5: Ang Code

Ang Code
Ang Code

mahahanap mo ang code sa GitHub (kasama ang lahat ng mga file ng data at ang config.h)

Mga dependency:

bago i-load ang code sa esp2866 kakailanganin mong mag-install ng ilang mga aklatan:

  1. libmad-8266 (i-decode ang musika mula sa SPIFF at sa I2S)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

I-upload ang mga tunog sa ESP gamit ang SPIFF:

  1. sundin ang mahusay na itinuturo na ito.
  2. idagdag ang folder ng data sa direktoryo ng source code.
  3. Sa Arduino IDE sa ilalim ng Mga Tool baguhin ang laki ng Flash sa "4MB (FS: 3MB TOA: ~ 512KB)"
  4. Sa ilalim din ng Tools Press ESP2866 Sketch Data Upload

Pagtatakda ng mga parameter:

pagkatapos nito pumunta sa config.h file at idagdag ang kinakailangang data tulad ng mga kredensyal ng WIFI at ang ngrok URL at port mula sa nakaraang hakbang (suriin ang nakalakip na larawan para sa sanggunian).

p.s - Nagdagdag pa ako ng tampok na awtomatikong kumonekta upang matulungan kang itakda ang WIFI at ngrok data mula sa iyong smart-phone, dahil ito ay isang unang katibayan lamang ng konsepto, nais kong idagdag ito sa ilang araw.

Itakda ang halaga ng manlalaro na nais mo (ang larong ito ay pinakamahusay na gumagana para sa 2-3 mga manlalaro at sa labas ng kahon na ito ay puno ng isang hanay ng mga tunog para sa 2 mga manlalaro). ngunit maaaring madaling ayusin para sa higit pa:

para sa bawat manlalaro magdagdag ng isa pang daloy sa node-red upang mai-publish ang isang loop sa ilalim ng isang paksa na tukoy sa gumagamit.

Gayundin, maaari mong i-edit ang tunog ng musikal sa pamamagitan ng canging ng array na ito sa iyong pasadyang mga tunog:

dito makikita mo ang 3 mga uri ng mga instrumento (Chrods para sa player 0, Lead para sa player 1, at Bass para sa player 2)

const char * path [NUMofNotes] = {"/blank1.wav", "/Chords_Am.wav", "/Chords_F.wav", "/Chords_C.wav", "/Chords_G.wav", "/Chords_Dm.wav", "/blank2.wav", "/Lead_C.wav", "/Lead_D.wav", "/Lead_E.wav", "/Lead_G.wav", "/Lead_A.wav", "/blank0.wav", "/Bass_C3.wav", "/Bass_D3.wav", "/Bass_F3.wav", "/Bass_G3.wav", "/Bass_A3.wav"};

Hakbang 6: I-print ang 3D Model

I-print ang 3D Model
I-print ang 3D Model
I-print ang 3D Model
I-print ang 3D Model
I-print ang 3D Model
I-print ang 3D Model
I-print ang 3D Model
I-print ang 3D Model

Para sa unang hakbang, i-download ang STL at i-print ang mga ito.

pagkatapos alisin ang mga suporta at marahil kaunting sanding (depende sa resolusyon ng printer)

pintura ito sa nais na kulay

Hakbang 7: Assembling at Welding

Assembling at Welding
Assembling at Welding

Kaya karaniwang narito kung saan nangyayari ang totoong mahika.

maaari mong sundin ang mga iskema na ito at magkasama ang lahat.

isipin na maaari mong baguhin ang posisyon ng mga PIN tandaan lamang na baguhin ito sa code din.

ang A0 at ang I2S ay medyo maayos sa lugar:

dahil ang A0 ay para sa tulay ng resistor (ginagamit namin ang pagkakaiba sa kasalukuyan upang malaman kung aling pindutan mula sa 5 ang pinindot - katulad ng mga Instructable na ito.

ang I2S ay may isang tukoy na pag-coding maaari mo itong makita dito

Hakbang 8: Maglaro ng Ilang Loops Sa Iyong Mga Kaibigan

Inirerekumendang: