Оглавление:

Мелодия: 8 шагов (с изображениями)
Мелодия: 8 шагов (с изображениями)

Видео: Мелодия: 8 шагов (с изображениями)

Видео: Мелодия: 8 шагов (с изображениями)
Видео: Урок музыки 😁 2024, Ноябрь
Anonim
Image
Image
Понимание потока
Понимание потока

Наряду со многими преимуществами и технологическими решениями, которые позволяют работать из дома, сохраняется трудность разработки и создания средств жизнеобеспечения среди сотрудников. MELODY - это цифрово-физическое устройство, которое позволяет создавать совместные короткие музыкальные джемы. Коллеги координируют время, а устройство устанавливает джем-сейшн с поворотами и разными случайными звуками. Первый участник устанавливает определенный ритм, после чего каждый участник добавляет свой музыкальный раздел, соответствующий заданному ритму. Чтобы упростить задачу пользователям без музыкального фона, программное обеспечение помогает им идти в ногу, выбирая их щелчки и настраиваясь на соответствующий ритм. Сессия заканчивается примерно через 3 минуты, когда все участники закончат запись своей партии.

Как это работает?

Melody основан на оборудовании ESP2866, которое обменивается данными с сервером Node-Red по протоколу MQTT. Устройство переводит заметки игрока в строку символов, которая отправляется на сервер, а с сервера обратно другим игрокам. Это позволяет каждому играть и слышать мелодию без перерыва в подключении к сети.

Мелодия имеет два основных визуальных индикатора. Первая - это светодиодная полоса, которая позволяет игроку узнать, когда цикл начинается и когда он заканчивается, а также указывает, наступила ли очередь игрока. Второй - светодиодный дисплей в центре продукта, который используется для визуального отображения существующей мелодии. Обратный отсчет от 3 до 1 указывает на начало игры, а дисплей времени указывает пользователю, когда и как он хочет внести свой вклад в Мелодию группы. Запись автоматически сохраняется в облаке компании для использования в будущем.

Этот проект был разработан четырьмя студентами Лаборатории инноваций СМИ (MiLab) в междисциплинарном центре Герцлии (IDC): Шахар Агасси, Иден Бар-Тов, Гал Эшчар и Гад Стерн. С помощью Цвики Маркфельд, Нетты Офер и Михала Лещинского, а также под руководством Ноа Мораг и Орена Цукермана.

спасибо Тому Грано за создание отличного руководства, которое помогло мне научиться реализовывать некоторые из вещей здесь (некоторые из шагов здесь смоделированы по образцу этого замечательного руководства).

Запасы

  • 3д принтер
  • ESP8266
  • 7 кнопок
  • Светодиодная матрица 8X8
  • Светодиодная лента WS2812B
  • Усилитель I2S
  • Гнездо 1/8 "(3,5 мм) 4-полюсный аудиоразъем
  • Резистор 4X 1K
  • Резистор 1X3K

Шаг 1: понимание потока

Понимание потока
Понимание потока
Понимание потока
Понимание потока

В этом проекте мы постарались решить некоторые проблемы:

  1. Как сделать это онлайн, чтобы игроки могли играть одновременно?
  2. Как мы можем обойти задержки в Интернете и обеспечить бесперебойную работу?
  3. Как сделать так, чтобы музыка звучала хорошо даже для людей без музыкального образования?

Сроки и сериализация музыки

Чтобы решить первую проблему, мы рассмотрели протокол MIDI и попытались его использовать, но мы увидели, что он более надежен, чем то, что нам действительно нужно, и мы действительно хотели сделать его простым, чтобы мы могли создать первый рабочий прототип. Итак, мы черпали вдохновение из MIDI и сделали нашу музыкальную петлю, представленную строкой чисел (от 0 до 5), умноженной на размер петли по времени исполнителей (мы объясним всю музыкальную математику позже).

В музыке мы разбиваем ритмы на музыкальные такты. Каждый такт в основном представляет собой небольшой отрезок времени, который мы используем 4/4 (что означает 4 доли в музыкальном такте) - самый распространенный.

Каждая доля затем разделяется на 4 окна сэмплирования, поэтому каждая проигрываемая нота будет автоматически выровнена по правильной позиции, а также позволит нам представить песню в виде строки чисел для отправки на сервер.

Чтобы быть дружелюбными к игрокам без музыкального образования, мы сделали три вещи:

  1. Ограничьте количество клавиш, чтобы игрок сосредоточился на меньшем количестве вариантов.
  2. Мы выбрали ноты одной гаммы, которые хорошо сочетаются друг с другом, чтобы не было диссонанса.
  3. Каждое нажатие настраивается на «окно» ритма, таким образом чуждая ритму музыку плеера.

Протоколы связи

Итак, после того как мы поняли логику музыки, как мы можем передать ее нашим игрокам?

для этого мы используем MQTT, сетевой протокол публикации-подписки, который передает сообщения между устройствами.

каждый игрок подписан на две темы: цикл (получение самого последнего цикла) и поворот (получение идентификатора текущего игрока для целей синхронизации).

В свою очередь, когда игрок закончит воспроизведение мелодии, он / она нажмет кнопку UP, и цикл (обновленный) будет отправлен брокеру MQTT, который передаст его обратно всем игрокам на канале цикла.

этот цикл будет оставаться «бездействующим» до тех пор, пока текущий цикл не будет воспроизведен, а затем заменит его. таким образом, он будет прозрачен для игрока. Кроме того, поскольку новый цикл в настоящее время сохраняется локально на проигрывателе, для музыки нет задержки в Интернете, поэтому мы решили вторую проблему.

Шаг 2: Настройка сервера - Ngrok

Настройка сервера - Ngrok
Настройка сервера - Ngrok
Настройка сервера - Ngrok
Настройка сервера - Ngrok

ngrok - это служба туннелирования. Это позволяет нам предоставлять доступ к локально работающей службе (в нашем случае, Node-RED) внешнему миру - без хлопот по настройке сервера или работе с записями DNS. Вы просто запускаете Node-RED на своем компьютере, а затем запускаете ngrok на том же порту, на котором работает Node-RED.

Вот и все - вы получите URL-адрес, который можно использовать для доступа к Node-RED из любой точки мира, независимо от того, к какой сети он подключен.

Установка и настройка

  1. Загрузите ngrok для своей операционной системы отсюда.
  2. Следуйте инструкциям на странице загрузки до шага «Запустить».
  3. На шаге «Запустите его» замените 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, запустите его, следуя инструкциям на шаге выше, и убедитесь, что вы видите пустую страницу холста. Он должен находиться по адресу

Теперь вам нужно импортировать поток, который мы использовали для этого проекта, вы можете найти его здесь и просто нажмите import, добавьте файл JSON и нажмите Deploy.

Установка Node-Red:

Если вы посмотрите на изображение, прикрепленное к этому шагу, вы увидите, что у нас есть 2 основных «действия»: мы получаем текущий цикл от одного из наших игроков, а затем передаем его всем другим игрокам. Кроме того, мы транслируем новый ход всем игрокам. поэтому игра остается синхронизированной.

Шаг 4: Настройка сервера - MQTT (Mosquitto)

Настройка сервера - MQTT (Mosquitto)
Настройка сервера - MQTT (Mosquitto)

Поскольку у 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 для мониторинга трафика, это отличный инструмент с очень простым графическим интерфейсом.

Шаг 5: Код

Код
Код

вы можете найти код в GitHub (со всеми файлами данных и config.h)

Зависимости:

перед загрузкой кода в esp2866 вам необходимо установить несколько библиотек:

  1. libmad-8266 (декодирует музыку из SPIFF в I2S)
  2. EspMQTTClient
  3. ESP8266Wi-Fi
  4. Adafruit_NeoPixel

Загрузите звуки в ESP с помощью SPIFF:

  1. следуйте этому великому наставлению.
  2. добавить папку данных в каталог исходного кода.
  3. В среде Arduino IDE в разделе «Инструменты» измените размер флэш-памяти на «4 МБ (FS: 3 МБ TOA: ~ 512 КБ)»
  4. Также в разделе "Инструменты" нажмите "Загрузка данных эскиза" ESP2866.

Установка параметров:

после этого перейдите в файл config.h и добавьте необходимые данные, такие как учетные данные WIFI, а также URL-адрес и порт ngrok из предыдущего шага (см. прилагаемую фотографию для справки).

p.s - Я еще добавил функцию автоматического подключения, чтобы помочь вам установить данные WIFI и ngrok со своего смартфона, поскольку это было всего лишь первое подтверждение концепции, я хотел бы добавить ее когда-нибудь.

Установите желаемое количество игроков (эта игра лучше всего подходит для 2–3 игроков, и из коробки она загружена множеством звуков для 2 игроков). но можно легко настроить на большее:

для каждого игрока добавьте еще один поток в красный узел, чтобы опубликовать цикл в теме, определенной пользователем.

Кроме того, вы можете редактировать музыкальный звук, добавив в этот массив свои собственные звуки:

здесь вы можете увидеть 3 вида инструментов (Chrods для игрока 0, Lead для игрока 1 и Bass для игрока 2)

const char * paths [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: Распечатайте 3D-модель

Распечатать 3D-модель
Распечатать 3D-модель
Распечатать 3D-модель
Распечатать 3D-модель
Распечатать 3D-модель
Распечатать 3D-модель
Распечатать 3D-модель
Распечатать 3D-модель

Для первого шага загрузите STL и распечатайте их.

после снятия опор и, возможно, небольшой шлифовки (в зависимости от разрешения принтера)

раскрасьте его в желаемый цвет

Шаг 7: Сборка и сварка

Сборка и сварка
Сборка и сварка

Так что в основном здесь происходит настоящая магия.

вы можете следовать этим схемам и сваривать все вместе.

Имейте в виду, что вы можете изменить положение PIN-кода, просто не забудьте также изменить его в коде.

A0 и I2S довольно стабильны:

поскольку A0 предназначен для резистивного моста (мы используем разницу в токе, чтобы узнать, какая кнопка из 5 была нажата - аналогично этому Instructables.

I2S имеет специальную кодировку, вы можете найти ее здесь

Шаг 8: поиграйте в петли с друзьями

Рекомендуемые: