สารบัญ:

ทำนอง: 8 ขั้นตอน (พร้อมรูปภาพ)
ทำนอง: 8 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ทำนอง: 8 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: ทำนอง: 8 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: การใช้งานชุดแยกไลน์คาราโอเกะ 8 Ch รุ่นใหม่เสียงดีกว่าเดิม 2024, กรกฎาคม
Anonim
Image
Image
เข้าใจกระแส
เข้าใจกระแส

นอกจากข้อดีและวิธีแก้ปัญหาทางเทคโนโลยีมากมายที่ช่วยให้ทำงานจากที่บ้านได้แล้ว ความยากลำบากในการกำหนดและสร้างการช่วยชีวิตในหมู่เพื่อนร่วมงานยังคงอยู่ MELODY เป็นอุปกรณ์ดิจิตอลกายภาพที่ช่วยให้สามารถสร้างแยมดนตรีสั้น ๆ ที่ทำงานร่วมกันได้ เพื่อนร่วมงานประสานเวลาและอุปกรณ์ตั้งค่าเซสชันติดขัดด้วยการเลี้ยวและเสียงสุ่มต่างๆ ผู้เข้าร่วมคนแรกกำหนดจังหวะเฉพาะ หลังจากนั้นผู้เข้าร่วมแต่ละคนจะเพิ่มส่วนดนตรีของตนเองที่สอดคล้องกับจังหวะที่ตั้งไว้ เพื่อให้ง่ายขึ้นสำหรับผู้ใช้ที่ไม่มีพื้นฐานทางดนตรี ซอฟต์แวร์ช่วยให้พวกเขาก้าวตามด้วยการสุ่มตัวอย่างการคลิกและปรับให้เข้ากับจังหวะที่เหมาะสม เซสชั่นจะสิ้นสุดลงหลังจากนั้นประมาณ 3 นาทีเมื่อผู้เข้าร่วมทั้งหมดบันทึกส่วนของตนเสร็จแล้ว

มันทำงานอย่างไร?

Melody ใช้ฮาร์ดแวร์ ESP2866 ซึ่งสื่อสารกับเซิร์ฟเวอร์ Node-Red ผ่านโปรโตคอล MQTT อุปกรณ์จะแปลบันทึกของผู้เล่นเป็นชุดอักขระที่ส่งไปยังเซิร์ฟเวอร์และจากเซิร์ฟเวอร์กลับไปยังผู้เล่นอื่น ซึ่งช่วยให้ทุกคนสามารถเล่นและฟังเพลงได้โดยไม่หยุดชะงักจากการเชื่อมต่อเครือข่าย

เมโลดี้มีตัวบ่งชี้ภาพหลักสองแบบ อย่างแรกคือแถบไฟ LED ที่ให้ผู้เล่นทราบเมื่อลูปเริ่มต้นและสิ้นสุดเมื่อไร และระบุว่าเป็นตาของผู้เล่นหรือไม่ ประการที่สองคือจอแสดงผล LED ที่กึ่งกลางของผลิตภัณฑ์ ซึ่งใช้เพื่อแสดงการปรับแต่งที่มีอยู่ การนับถอยหลังจาก 3 ถึง 1 หมายถึงเริ่มเล่นและการแสดงเวลาจะชี้นำผู้ใช้ว่าต้องการมีส่วนร่วมกับ Melody ของกลุ่มเมื่อใดและอย่างไร การบันทึกจะถูกบันทึกโดยอัตโนมัติไปยังระบบคลาวด์ของบริษัทเพื่อใช้ในอนาคต

โครงการนี้ออกแบบโดยนักศึกษาสี่คนที่ห้องปฏิบัติการนวัตกรรมสื่อ (MiLab) ที่ศูนย์สหวิทยาการ Herzliya (IDC): ชาฮาร์ อากัสซี, เอเดน บาร์-ทอฟ, กัล เอชชาร์ และกาด สเติร์น ด้วยความช่วยเหลือของ Zvika Markfeld, Netta Ofer และ Michal Leschinsky และคำแนะนำของ Noa Morag และ Oren Zuckerman

ขอบคุณ Tom Granot สำหรับการสร้างคำแนะนำที่ยอดเยี่ยมที่ช่วยให้ฉันเรียนรู้วิธีใช้งานบางสิ่งที่นี่ (บางขั้นตอนที่นี่จำลองตามคำแนะนำที่ยอดเยี่ยมนี้)

เสบียง

  • เครื่องพิมพ์ 3 มิติ
  • ESP8266
  • 7 ปุ่ม
  • 8X8 LED เมทริกซ์
  • WS2812B แถบ LED
  • แอมพลิฟายเออร์ I2S
  • แจ็คเสียง 4 ขั้ว 1/8" (3.5 มม.) ตัวเมีย
  • ตัวต้านทาน 4X 1K
  • ตัวต้านทาน 1X3K

ขั้นตอนที่ 1: ทำความเข้าใจโฟลว์

เข้าใจกระแส
เข้าใจกระแส
เข้าใจกระแส
เข้าใจกระแส

ในโครงการนี้ เราพยายามแก้ไขปัญหาบางอย่าง:

  1. เราจะทำออนไลน์ได้อย่างไร ให้ผู้เล่นได้เล่นไปพร้อม ๆ กัน?
  2. เราจะหลีกเลี่ยงเวลาแฝงของอินเทอร์เน็ตและสร้างประสบการณ์ที่ราบรื่นได้อย่างไร
  3. เราจะทำให้เพลงฟังดูดีแม้กับคนที่ไม่มีพื้นฐานทางดนตรีได้อย่างไร

เวลาและลำดับของเพลง

เพื่อแก้ปัญหาแรก เราดูที่โปรโตคอล MIDI และพยายามใช้ แต่เราเห็นว่ามันแข็งแกร่งกว่าที่เราต้องการจริงๆ และเราต้องการทำให้มันง่ายจริงๆ เพื่อให้เราสามารถสร้างต้นแบบการทำงานชิ้นแรกได้ ดังนั้นเราจึงใช้แรงบันดาลใจจาก MIDI และทำให้วงดนตรีของเราแสดงด้วยสตริงตัวเลข (ตั้งแต่ 0-5) คูณด้วยขนาดของลูปเวลาที่ผู้เล่น (เราจะอธิบายคณิตศาสตร์ทางดนตรีทั้งหมดในภายหลัง)

ในดนตรี เราแบ่งจังหวะออกเป็นบาร์ดนตรี โดยพื้นฐานแล้วแต่ละแท่งจะเป็นช่วงสั้นๆ เราเลือกใช้ 4/4 (หมายถึง 4 จังหวะในแถบดนตรี) ซึ่งเป็นส่วนที่ใช้บ่อยที่สุด

จากนั้นแต่ละจังหวะจะแบ่งออกเป็น 4 หน้าต่างสุ่มตัวอย่าง ดังนั้นทุกโน้ตที่เล่นจะถูกจัดตำแหน่งอัตโนมัติให้อยู่ในตำแหน่งที่ดีและยังช่วยให้เราแสดงเพลงเป็นสตริงตัวเลขเพื่อส่งไปยังเซิร์ฟเวอร์ได้

เพื่อให้เป็นมิตรกับผู้เล่นที่ไม่มีพื้นฐานทางดนตรี เราได้ทำสามสิ่ง:

  1. จำกัดจำนวนปุ่มเพื่อให้ผู้เล่นสนใจตัวเลือกน้อยลง
  2. เราเลือกโน้ตในระดับเดียวกับที่เล่นด้วยกันได้ดี ดังนั้นจึงไม่มีเสียงที่ไม่สอดคล้องกัน
  3. การกดแต่ละครั้งถูกตั้งค่าเป็น "หน้าต่าง" ของจังหวะทำให้เพลงของผู้เล่นเปลี่ยนไปตามจังหวะ

โปรโตคอลการสื่อสาร

หลังจากที่เราเข้าใจตรรกะเบื้องหลังดนตรีแล้ว เราจะสื่อสารระหว่างผู้เล่นของเราได้อย่างไร?

สำหรับสิ่งนั้น เราใช้ MQTT ซึ่งเป็นโปรโตคอลเครือข่ายแบบสมัครรับข้อมูลซึ่งขนส่งข้อความระหว่างอุปกรณ์ต่างๆ

ผู้เล่นแต่ละคนสมัครรับข้อมูลในสองหัวข้อ: ลูป (รับลูปล่าสุด) และเทิร์น (รับ id ของผู้เล่นปัจจุบันเพื่อการซิงค์)

ในทางกลับกันเมื่อผู้เล่นเล่นเพลงเสร็จแล้ว เขา/เธอจะกดปุ่ม UP และลูป (อันที่อัปเดตแล้ว) จะถูกส่งไปยังโบรกเกอร์ MQTT ซึ่งจะส่งกลับไปยังผู้เล่นทุกคนในลูปแชนเนล

ลูปนี้จะยังคง "อยู่เฉยๆ" จนกว่าลูปปัจจุบันจะเล่นเสร็จและจะแทนที่ จึงจะโปร่งใสสำหรับผู้เล่น นอกจากนี้ เนื่องจากปัจจุบันลูปใหม่ถูกบันทึกไว้ในอุปกรณ์ของเครื่องเล่น จึงไม่มีความหน่วงแฝงทางอินเทอร์เน็ตสำหรับเพลง ดังนั้นเราจึงแก้ไขปัญหาที่สอง

ขั้นตอนที่ 2: การตั้งค่าเซิร์ฟเวอร์ - Ngrok

การตั้งค่าเซิร์ฟเวอร์ - Ngrok
การตั้งค่าเซิร์ฟเวอร์ - Ngrok
การตั้งค่าเซิร์ฟเวอร์ - Ngrok
การตั้งค่าเซิร์ฟเวอร์ - Ngrok

งรกเป็นบริการขุดอุโมงค์ ช่วยให้เราสามารถเปิดเผยบริการที่ทำงานอยู่ในเครื่อง (ในกรณีของเราคือ Node-RED) สู่โลกภายนอก โดยไม่ต้องยุ่งยากกับการตั้งค่าเซิร์ฟเวอร์หรือจัดการกับระเบียน DNS คุณเพียงแค่เรียกใช้ Node-RED บนคอมพิวเตอร์ของคุณ จากนั้นเรียกใช้ ngrok บนพอร์ตเดียวกันที่ Node-RED ทำงานอยู่

เพียงเท่านี้ คุณจะได้รับ URL ที่คุณสามารถใช้เข้าถึง Node-RED ได้จากทุกที่ในโลก ไม่ว่าจะเชื่อมต่อกับเครือข่ายใด

การติดตั้งและการกำหนดค่า

  1. ดาวน์โหลด ngrok สำหรับระบบปฏิบัติการของคุณจากที่นี่
  2. ทำตามขั้นตอนในหน้าดาวน์โหลด จนถึงขั้นตอน "เปิดเครื่อง"
  3. ใน "Fire it up step" ให้สลับ 80 สำหรับ 1883 - และ http เป็น tcp เช่นเดียวกับใน./ngrok tcp 1883 ขึ้นอยู่กับคุณ
  4. บันทึก URL และหมายเลขพอร์ต (ที่เห็นในภาพ) เราต้องการในภายหลัง

ขั้นตอนที่ 3: การตั้งค่าเซิร์ฟเวอร์ - Node-Red

การตั้งค่าเซิร์ฟเวอร์ - Node-Red
การตั้งค่าเซิร์ฟเวอร์ - Node-Red

ลอจิกเซิร์ฟเวอร์ของโปรเจ็กต์ Node-RED เป็นสภาพแวดล้อมการเขียนโปรแกรมแบบเห็นภาพที่ให้คุณเชื่อมต่อซอฟต์แวร์ต่างๆ (และฮาร์ดแวร์!)

ที่นี่เราทำตรรกะของการสื่อสารระหว่างผู้เล่นทั้งหมด (แบ่งปันและรับลูปและประสานงานผลัดกัน)

ติดตั้ง Node-Red

ทำตามขั้นตอนต่อไปนี้เพื่อโหลดโฟลว์ Node-RED ของเราบนคอมพิวเตอร์ในพื้นที่ของคุณ:

  1. Node-RED ต้องการ Node.js ติดตั้งจากที่นี่
  2. ติดตั้ง Node-RED เองโดยใช้คำแนะนำที่นี่

เมื่อคุณได้ติดตั้ง Node-RED แล้ว ให้เรียกใช้โดยใช้คำแนะนำในขั้นตอนด้านบนและตรวจสอบว่าคุณสามารถดูหน้าผ้าใบที่ว่างเปล่าได้ ควรอยู่ใน

ตอนนี้ คุณจะต้องนำเข้าโฟลว์ที่เราใช้สำหรับโปรเจ็กต์นี้ คุณสามารถค้นหาได้ที่นี่ และเพียงกดนำเข้า เพิ่มไฟล์ JSON แล้วกด Deploy

ติดตั้ง Node-Red:

หากคุณดูภาพที่แนบมากับขั้นตอนนี้ คุณจะเห็นว่าเรามี "การกระทำ" หลัก 2 อย่าง เราได้รับลูปปัจจุบันจากผู้เล่นรายหนึ่งของเรา จากนั้นเราจะส่งไปยังผู้เล่นคนอื่นๆ ทั้งหมด นอกจากนี้เรายังถ่ายทอดเทิร์นใหม่ให้กับผู้เล่นทุกคน ดังนั้นเกมจะซิงค์กัน

ขั้นตอนที่ 4: การตั้งค่าเซิร์ฟเวอร์ - MQTT (ยุง)

การตั้งค่าเซิร์ฟเวอร์ - MQTT (ยุง)
การตั้งค่าเซิร์ฟเวอร์ - MQTT (ยุง)

เนื่องจาก Node-RED ไม่มีโบรกเกอร์ MQTT ของตัวเอง และเราจะต้องสื่อสารกับเซ็นเซอร์และตัวกระตุ้นของเราผ่าน MQTT เราจะใช้โบรกเกอร์ MQTT โดยเฉพาะ เนื่องจาก Node-RED แนะนำ Mosquitto นี่คือสิ่งที่เราจะใช้ ดูข้อมูลบางอย่างเกี่ยวกับ MQTT ที่นี่ และเหตุใดจึงมักใช้ในโครงการ IoT

การติดตั้งและการกำหนดค่า

  1. ดาวน์โหลด Mosquitto จากที่นี่และติดตั้ง ทั้งหมดนี้เป็นไปตามระบบปฏิบัติการของคุณ
  2. โดยปกติ คุณจะต้องทำตามคำแนะนำที่นี่เพื่อเชื่อมต่อ Node-RED กับ Mosquitto อย่างไรก็ตาม หากคุณใช้โฟลว์ของเรา โฟลว์ของเราก็ได้รับการกำหนดค่าไว้ล่วงหน้าสำหรับคุณแล้ว ตราบใดที่คุณติดตั้งโฟลว์และ Mosquitrro อย่างถูกต้อง และ Mosquitto ทำงานบนพอร์ต 1883 (ซึ่งทำงานโดยค่าเริ่มต้น) มันก็จะใช้งานได้ทันที
  3. โปรดทราบว่านี่หมายความว่าโบรกเกอร์ MQTT และเซิร์ฟเวอร์ Node-RED ของคุณทำงานบนเครื่องเดียวกัน สิ่งนี้มีประโยชน์ในการทำให้การสื่อสารภายในระบบง่ายขึ้น ดูหมายเหตุด้านล่างสำหรับข้อมูลเพิ่มเติม

การตรวจสอบการรับส่งข้อมูล MQTT

ฉันใช้ MQTTfx เพื่อตรวจสอบทราฟฟิก มันเป็นเครื่องมือที่ยอดเยี่ยมพร้อม GUI ที่ง่ายมาก

ขั้นตอนที่ 5: รหัส

รหัส
รหัส

คุณสามารถค้นหารหัสใน GitHub (พร้อมไฟล์ข้อมูลทั้งหมดและ config.h)

การพึ่งพา:

ก่อนโหลดโค้ดไปที่ esp2866 คุณจะต้องติดตั้งไลบรารี่สองสามตัว:

  1. libmad-8266 (ถอดรหัสเพลงจาก SPIFF และลงใน I2S)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

อัปโหลดเสียงไปยัง ESP โดยใช้ SPIFF:

  1. ปฏิบัติตามคำแนะนำที่ดีนี้
  2. เพิ่มโฟลเดอร์ข้อมูลลงในไดเร็กทอรีซอร์สโค้ด
  3. ใน Arduino IDE ภายใต้เครื่องมือเปลี่ยนขนาดแฟลชเป็น "4MB (FS:3MB TOA:~512KB)"
  4. ภายใต้เครื่องมือ กด ESP2866 Sketch Data Upload

การตั้งค่าพารามิเตอร์:

หลังจากนั้นไปที่ไฟล์ config.h และเพิ่มข้อมูลที่จำเป็น เช่น ข้อมูลรับรอง WIFI และ ngrok URL และพอร์ตจากขั้นตอนก่อนหน้า (ตรวจสอบรูปภาพที่แนบมาเพื่อใช้อ้างอิง)

ป.ล. ฉันได้เพิ่มคุณสมบัติการเชื่อมต่ออัตโนมัติเพื่อช่วยคุณตั้งค่าข้อมูล WIFI และ ngrok จากสมาร์ทโฟนของคุณ เนื่องจากมันเป็นเพียงการพิสูจน์แนวคิดแรก ฉันจึงอยากจะเพิ่มมันสักวันหนึ่ง

กำหนดจำนวนผู้เล่นที่คุณต้องการ (เกมนี้ทำงานได้ดีที่สุดสำหรับผู้เล่น 2-3 คนและจะเต็มไปด้วยอาร์เรย์ของเสียงสำหรับผู้เล่น 2 คน) แต่สามารถปรับเพิ่มเติมได้อย่างง่ายดาย:

สำหรับผู้เล่นแต่ละคนเพิ่มโฟลว์อื่นในโหนดสีแดงเพื่อเผยแพร่ลูปในหัวข้อเฉพาะผู้ใช้

นอกจากนี้ คุณยังสามารถแก้ไขเสียงดนตรีได้โดยการจัดอาร์เรย์นี้เป็นเสียงที่คุณกำหนดเอง:

ที่นี่คุณสามารถดูเครื่องดนตรีได้ 3 ประเภท (Chrods สำหรับผู้เล่น 0, Lead สำหรับผู้เล่น 1 และ Bass สำหรับผู้เล่น 2)

เส้นทาง const char* [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"};

ขั้นตอนที่ 6: พิมพ์โมเดล 3 มิติ

พิมพ์แบบจำลอง 3 มิติ
พิมพ์แบบจำลอง 3 มิติ
พิมพ์แบบจำลอง 3 มิติ
พิมพ์แบบจำลอง 3 มิติ
พิมพ์แบบจำลอง 3 มิติ
พิมพ์แบบจำลอง 3 มิติ
พิมพ์แบบจำลอง 3 มิติ
พิมพ์แบบจำลอง 3 มิติ

สำหรับขั้นตอนแรก ให้ดาวน์โหลด STL และพิมพ์ออกมา

หลังจากถอดตัวรองรับออกแล้วและอาจจะขัดเล็กน้อย (ขึ้นอยู่กับความละเอียดของเครื่องพิมพ์)

ทาสีให้เป็นสีที่ต้องการ

ขั้นตอนที่ 7: การประกอบและการเชื่อม

การประกอบและการเชื่อม
การประกอบและการเชื่อม

โดยพื้นฐานแล้วนี่คือที่ที่เวทมนตร์ที่แท้จริงเกิดขึ้น

คุณสามารถทำตามแผนผังเหล่านี้และเชื่อมทุกอย่างเข้าด้วยกัน

โปรดทราบว่าคุณสามารถเปลี่ยนตำแหน่งของ PIN ได้ แต่อย่าลืมเปลี่ยนในรหัสด้วย

A0 และ I2S ได้รับการแก้ไขแล้ว:

เนื่องจาก A0 ใช้สำหรับสะพานตัวต้านทาน (เราใช้ความแตกต่างของกระแสเพื่อทราบว่ามีการกดปุ่มใดจาก 5 ปุ่ม - คล้ายกับคำแนะนำนี้

I2S มีรหัสเฉพาะที่คุณสามารถหาได้ที่นี่

ขั้นตอนที่ 8: เล่นวนซ้ำกับเพื่อนของคุณ

แนะนำ: