جدول المحتويات:

اللحن: 8 خطوات (بالصور)
اللحن: 8 خطوات (بالصور)

فيديو: اللحن: 8 خطوات (بالصور)

فيديو: اللحن: 8 خطوات (بالصور)
فيديو: صدمه العريس من العروسه في يوم فرحهم 🤭🤭#shorts 2024, يوليو
Anonim
Image
Image
فهم التدفق
فهم التدفق

إلى جانب المزايا العديدة والحلول التكنولوجية التي تسمح بالعمل من المنزل ، تظل صعوبة صياغة وخلق دعم الحياة بين زملاء العمل. MELODY هو جهاز رقمي فيزيائي يتيح إنشاء اختصارات موسيقية تعاونية قصيرة. ينسق زملاء العمل الوقت ويقوم الجهاز بتعيين جلسة ازدحام مع عدد من الأدوار وأصوات عشوائية مختلفة. يحدد المشارك الأول إيقاعًا محددًا ، وبعد ذلك يضيف كل مشارك قسمه الموسيقي الخاص به وفقًا للإيقاع المحدد. من أجل تسهيل الأمر على المستخدمين الذين ليس لديهم خلفية موسيقية ، يساعدهم البرنامج على مواكبة ذلك من خلال أخذ عينات من نقراتهم والتكيف مع الإيقاع المناسب. تنتهي الجلسة بعد حوالي 3 دقائق عندما ينتهي جميع المشاركين من تسجيل الجزء الخاص بهم.

كيف يعمل؟

يعتمد ميلودي على أجهزة ESP2866 ، التي تتصل بخادم Node-Red عبر بروتوكول MQTT. يقوم الجهاز بترجمة ملاحظات اللاعب إلى سلسلة من الأحرف التي يتم إرسالها إلى الخادم ومن الخادم إلى اللاعبين الآخرين. يتيح ذلك للجميع العزف وسماع النغمة دون انقطاع من اتصال الشبكة.

يحتوي اللحن على مؤشرين بصريين رئيسيين. الأول عبارة عن شريط LED يتيح للاعب معرفة وقت بدء Loop ومتى ينتهي ويشير إلى ما إذا كان دور اللاعب. والثاني هو شاشة LED في وسط المنتج ، والتي تُستخدم لعرض اللحن الموجود بصريًا. يشير العد التنازلي من 3 إلى 1 إلى بدء اللعب ويوجه عرض التوقيت المستخدم متى وكيف تريد المساهمة في نغمة المجموعة. يتم حفظ التسجيل تلقائيًا في سحابة الشركة لاستخدامها في المستقبل.

تم تصميم هذا المشروع من قبل أربعة طلاب في مختبر الابتكار الإعلامي (MiLab) في مركز هرتسليا متعدد التخصصات (IDC): شاهار آجاسي ، إيدن بار-توف ، غال إششار ، وجاد ستيرن. بمساعدة Zvika Markfeld و Netta Ofer و Michal Leschinsky وتوجيهات Noa Morag و Oren Zuckerman.

شكرًا لـ Tom Granot لإنشاء تعليمات رائعة ساعدتني في تعلم كيفية تنفيذ بعض الأشياء هنا (تم تصميم بعض الخطوات هنا على غرار هذه التعليمات الرائعة).

اللوازم

  • طابعة 3D
  • ESP8266
  • 7 أزرار
  • مصفوفة 8X8 LED
  • شريط إضاءة LED WS2812B
  • مضخم I2S
  • مقبس صوت 4 أقطاب أنثى 1/8 بوصة (3.5 ملم)
  • 4X 1K المقاوم
  • 1X3K المقاوم

الخطوة الأولى: فهم التدفق

فهم التدفق
فهم التدفق
فهم التدفق
فهم التدفق

حاولنا في هذا المشروع معالجة بعض المشكلات:

  1. كيف يمكننا جعلها على الإنترنت ، بحيث يمكن للاعبين اللعب في نفس الوقت؟
  2. كيف يمكننا تجاوز فترات انتقال الإنترنت وإنشاء تجربة سلسة؟
  3. كيف يمكننا جعل الموسيقى تبدو جيدة حتى للأشخاص الذين ليس لديهم خلفية موسيقية؟

توقيت وتسلسل الموسيقى

من أجل حل المشكلة الأولى ، نظرنا إلى بروتوكول MIDI وحاولنا استخدامه ، لكننا رأينا أنه أكثر قوة مما نحتاجه بالفعل ، كما أردنا حقًا أن نجعله بسيطًا حتى نتمكن من بناء أول نموذج أولي يعمل. لذلك أخذنا الإلهام من MIDI وجعلنا الحلقة الموسيقية الخاصة بنا ممثلة بسلسلة من الأرقام (من 0-5) أضعاف حجم الحلقات وقت العازفين (سنشرح كل الرياضيات الموسيقية لاحقًا).

في الموسيقى ، نقسم الإيقاعات إلى أشرطة موسيقية. كل شريط هو في الأساس مقطع لوقت قصير نختار استخدام 4/4 (أي 4 دقات في شريط موسيقي) - الأكثر شيوعًا.

يتم بعد ذلك تقسيم كل نبضة إلى 4 نوافذ لأخذ العينات بحيث يتم محاذاة كل نغمة يتم تشغيلها تلقائيًا إلى موضع جيد c وتسمح لنا أيضًا بتمثيل أغنية كسلسلة من الأرقام لإرسالها إلى الخادم.

من أجل أن نكون ودودين مع اللاعبين الذين ليس لديهم خلفية موسيقية ، قمنا بثلاثة أشياء:

  1. حدد عدد المفاتيح لجعل اللاعب يركز على خيارات أقل.
  2. لقد اخترنا نغمات على نفس المقياس تعمل جيدًا معًا حتى لا يكون هناك أي صوت تنافر.
  3. يتم تعيين كل ضغطة على "نافذة" الإيقاع وبالتالي عزل موسيقى المشغل عن الإيقاع

بروتوكولات الاتصال

إذن بعد أن فهمنا المنطق الكامن وراء الموسيقى ، كيف يمكننا توصيلها بين لاعبينا؟

لذلك ، نستخدم MQTT ، وهو بروتوكول شبكة اشتراك للنشر ينقل الرسائل بين الأجهزة.

يتم اشتراك كل لاعب في موضوعين: الحلقة (الحصول على أحدث حلقة) والدور (يحصل على معرف المشغل الحالي لأغراض المزامنة).

بدوره ، عندما ينتهي اللاعب من تشغيل النغمة ، سيضغط على الزر UP وسيتم إرسال الحلقة (المحدثة) إلى وسيط MQTT ، والذي سيرسلها مرة أخرى إلى جميع اللاعبين في قناة الحلقة.

ستبقى هذه الحلقة "كامنة" حتى تنتهي الحلقة الحالية من اللعب ثم تستبدلها. وبالتالي ستكون شفافة للاعب. أيضًا نظرًا لأن الحلقة الجديدة يتم حفظها حاليًا محليًا على جهاز المشغل ، فلا يوجد زمن انتقال للموسيقى عبر الإنترنت ، لذلك قمنا بحل المشكلة الثانية.

الخطوة 2: ضبط الخادم - Ngrok

ضبط الخادم - نجروك
ضبط الخادم - نجروك
ضبط الخادم - نجروك
ضبط الخادم - نجروك

ngrok هي خدمة حفر أنفاق. يتيح لنا الكشف عن خدمة تعمل محليًا (في حالتنا ، Node-RED) للعالم الخارجي - دون متاعب إعداد خادم أو التعامل مع سجلات DNS. يمكنك ببساطة تشغيل Node-RED على جهاز الكمبيوتر الخاص بك ، ثم تشغيل ngrok على نفس المنفذ الذي يعمل عليه Node-RED.

هذا كل شيء - ستحصل على عنوان URL يمكنك استخدامه للوصول إلى Node-RED من أي مكان في العالم ، بغض النظر عن الشبكة التي تتصل بها.

التثبيت والتكوين

  1. قم بتنزيل ngrok لنظام التشغيل الخاص بك من هنا.
  2. اتبع الخطوة في صفحة التنزيل ، حتى خطوة "Fire it up".
  3. في "Fire it up step" ، استبدل 80 بـ 1883 - و http إلى tcp كما في./ngrok tcp 1883 اعتمادًا على
  4. احفظ عنوان URL ورقم المنفذ (الذي رأيناه في الصورة) سنحتاج إلى ، لاحقًا.

الخطوة 3: ضبط الخادم - Node-Red

ضبط الخادم - العقدة الحمراء
ضبط الخادم - العقدة الحمراء

منطق الخادم للمشروع ، Node-RED هو بيئة برمجة مرئية تسمح لك بتوصيل العديد من البرامج (والأجهزة!).

هنا قمنا بعمل منطق التواصل بين جميع اللاعبين (مشاركة واستقبال الحلقات وتنسيق المنعطفات)

تثبيت Node-Red

اتبع الخطوات التالية لتحميل تدفق Node-RED على جهاز الكمبيوتر المحلي الخاص بك:

  1. يتطلب Node-RED Node.js ، قم بتثبيته من هنا
  2. قم بتثبيت Node-RED نفسها باستخدام الإرشادات الموجودة هنا.

الآن بعد أن قمت بتثبيت Node-RED ، قم بتشغيله باستخدام الإرشادات الموجودة في الخطوة أعلاه وتحقق من صحة أنه يمكنك رؤية صفحة قماشية فارغة. يجب أن يكون موجودًا في

ستحتاج الآن إلى استيراد التدفق الذي استخدمناه لهذا المشروع ، يمكنك العثور عليه هنا والضغط فقط على استيراد إضافة ملف JSON والضغط على Deploy.

تثبيت Node-Red:

إذا نظرت إلى الصورة المرفقة بهذه الخطوة ، يمكنك أن ترى أن لدينا "إجراءين" رئيسيين ، نتلقى حلقة حالية من أحد لاعبينا ثم ننقلها إلى جميع اللاعبين الآخرين. بالإضافة إلى ذلك ، نبث الدور الجديد لجميع اللاعبين. حتى تظل اللعبة متزامنة.

الخطوة 4: ضبط الخادم - MQTT (Mosquitto)

ضبط الخادم - MQTT (Mosquitto)
ضبط الخادم - MQTT (Mosquitto)

نظرًا لأن Node-RED ليس لديها وسيط MQTT خاص بها ، وسنحتاج إلى التواصل مع أجهزة الاستشعار والمنشطات لدينا عبر MQTT ، سنستخدم وسيط MQTT مخصصًا. نظرًا لأن Node-RED توصي بـ Mosquitto ، فهذا هو ما سنستخدمه. انظر هنا للحصول على بعض المعلومات حول MQTT ولماذا يتم استخدامه غالبًا في مشاريع إنترنت الأشياء.

التثبيت والتكوين

  1. قم بتنزيل Mosquitto من هنا وقم بتثبيته ، كل ذلك وفقًا لنظام التشغيل الخاص بك.
  2. عادة ، ستحتاج إلى اتباع التعليمات الواردة هنا لتوصيل Node-RED بـ Mosquitto. ومع ذلك ، إذا استخدمت التدفق الخاص بنا ، فسيتم تكوينه مسبقًا من أجلك. طالما قمت بتثبيت التدفق و Mosquitrro بشكل صحيح ، ويعمل Mosquitto على المنفذ 1883 (الذي يعمل عليه افتراضيًا) ، يجب أن يعمل خارج الصندوق.
  3. لاحظ أن هذا يعني أن وسيط MQTT وخادم Node-RED يعملان على نفس الجهاز. هذا مفيد لتبسيط الاتصال داخل النظام. انظر الملاحظة أدناه لمزيد من المعلومات.

مراقبة حركة المرور MQTT

لقد استخدمت MQTTfx لمراقبة حركة المرور ، إنها أداة رائعة مع واجهة مستخدم رسومية بسيطة للغاية.

الخطوة 5: الكود

الرمز
الرمز

يمكنك العثور على الكود في GitHub (مع جميع ملفات البيانات و config.h)

التبعيات:

قبل تحميل الكود إلى esp2866 ، ستحتاج إلى تثبيت بعض المكتبات:

  1. libmad-8266 (فك تشفير الموسيقى من SPIFF إلى I2S)
  2. EspMQTTClient
  3. واي فاي
  4. Adafruit_NeoPixel

قم بتحميل الأصوات إلى ESP باستخدام SPIFF:

  1. اتبع هذا التدريب الرائع.
  2. إضافة مجلد البيانات إلى دليل التعليمات البرمجية المصدر.
  3. في Arduino IDE ضمن الأدوات ، قم بتغيير حجم الفلاش إلى "4 ميجا بايت (FS: 3 ميجا بايت TOA: ~ 512 كيلو بايت)"
  4. أيضًا ضمن أدوات ، اضغط على ESP2866 Sketch Data Upload

ضبط المعلمات:

بعد ذلك ، انتقل إلى ملف config.h وأضف البيانات المطلوبة مثل بيانات اعتماد WIFI وعنوان URL الخاص بـ ngrok والمنفذ من الخطوة السابقة (تحقق من الصورة المرفقة للرجوع إليها).

p.s - لقد أضفت حتى الآن ميزة الاتصال التلقائي لمساعدتك في تعيين بيانات WIFI و ngrok من هاتفك الذكي ، نظرًا لأنها كانت مجرد إثبات أولي للمفهوم ، أود إضافتها يومًا ما.

حدد مقدار اللاعب الذي تريده (تعمل هذه اللعبة بشكل أفضل مع 2-3 لاعبين ويتم تحميلها خارج الصندوق بمجموعة من الأصوات للاعبين 2). ولكن يمكن تعديلها بسهولة لمزيد من المعلومات:

لكل لاعب إضافة تدفق آخر في العقدة الحمراء لنشر حلقة في موضوع خاص بالمستخدم.

أيضًا ، يمكنك تحرير الصوت الموسيقي عن طريق ضبط هذه المجموعة على أصواتك المخصصة:

هنا يمكنك رؤية 3 أنواع من الآلات (Chrods for player 0 و Lead for player 1 و Bass for player 2)

مسارات حرف * ثابتة [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: اطبع النموذج ثلاثي الأبعاد

اطبع النموذج ثلاثي الأبعاد
اطبع النموذج ثلاثي الأبعاد
اطبع النموذج ثلاثي الأبعاد
اطبع النموذج ثلاثي الأبعاد
اطبع النموذج ثلاثي الأبعاد
اطبع النموذج ثلاثي الأبعاد
اطبع النموذج ثلاثي الأبعاد
اطبع النموذج ثلاثي الأبعاد

للخطوة الأولى ، قم بتنزيل STL وطباعتها.

بعد إزالة الدعامات وربما القليل من الصنفرة (حسب دقة الطابعة)

قم برسمه على اللون المطلوب

الخطوة 7: التجميع واللحام

التجميع واللحام
التجميع واللحام

إذن هنا هو المكان الذي يحدث فيه السحر الحقيقي.

يمكنك اتباع هذه الخطط ولحام كل شيء معًا.

ضع في اعتبارك أنه يمكنك تغيير موضع أرقام التعريف الشخصية ، فقط تذكر تغييرها في الرمز أيضًا.

تم إصلاح كل من A0 و I2S في مكانهما:

نظرًا لأن A0 مخصص لجسر المقاوم (نستخدم الاختلاف في التيار لمعرفة الزر الذي تم الضغط عليه من أصل 5 - على غرار Instructables.

يحتوي I2S على ترميز محدد يمكنك العثور عليه هنا

الخطوة 8: العب بعض الحلقات مع أصدقائك

موصى به: