Оглавление:

Танцевальная перчатка: 9 шагов
Танцевальная перчатка: 9 шагов

Видео: Танцевальная перчатка: 9 шагов

Видео: Танцевальная перчатка: 9 шагов
Видео: Марджанджа Самый простой и красивый летний танец тренды 2023 2024, Ноябрь
Anonim
Танцевальная перчатка
Танцевальная перчатка

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

Запасы

  • Ableton (или бесплатная пробная версия)
  • Ардуино
  • Соединительные кабели
  • Паяльник
  • Картон
  • Пистолет для горячего клея
  • Много воображения

Шаг 1: концепция

Этот проект создан для развлечения. Если то, как работает пример проекта в этом руководстве, вам не нравится, переделайте его!

Я рекомендую поставить некоторые из ваших любимых песен, поднести к ним руки и посмотреть, что из этого получится. Вы двигаете руками вверх-вниз? Бок о бок? Медленно или быстро? Какие аспекты музыки вызывают у вас желание пошевелить руками? Если у вас есть их список, вы, вероятно, сможете найти способы включить движения, которые вам нравятся, в ваши возможные алгоритмы.

Вот движения, которые я использовал:

  • Быстрое движение вверх-вниз запускает начало песни, ударных или баса. (Это происходит в разных точках песни, не обязательно одновременно!)
  • Медленное наклонное движение из стороны в сторону вызывает более эхо-высокий звук.
  • В одном конкретном фрагменте песни, когда моя рука поднимается вверх, музыка притихает - так что я «поймал» ее в сжатом кулаке.

Используйте их или сделайте сами!

(Обратите внимание: в этом руководстве не рассматривается, как создавать музыку или мелодии вживую в Ableton! Если вы будете придерживаться этих инструкций, вы сможете только увеличивать / уменьшать громкость треков или применение звуковых эффектов.)

Шаг 2: подготовьте акселерометр

Подготовьте акселерометр
Подготовьте акселерометр

Во-первых, выясните, какой у вас акселерометр. Я использовал этот; любой трехосевой акселерометр подойдет. (Или попробуйте другой тип датчика, если хотите сходить с ума.) Убедитесь, что вы умеете считывать данные акселерометра с Arduino. Вам может потребоваться загрузить библиотеку для вашего акселерометра, если он использует что-то более сложное, чем аналоговый ввод.

После тестирования на макетной плате припаяйте короткие цветные провода к контактам акселерометра. Вставьте красный провод в контакт питания, черный провод в контакт заземления и любые другие необходимые провода для связи с акселерометром. (Если у вас есть акселерометр I2C, это будут контакты SCL и SDA. Если у вас аналоговый акселерометр, вероятно, будет по одному контакту для каждого из выходов x, y и z.) Убедитесь, что ваш припой прочный и чтобы бусинки не перекрывали соседние булавки.

Шаг 3: создайте перчатку

Постройте перчатку
Постройте перчатку

Вырежьте из тонкого картона или толстой бумаги прямоугольник размером чуть больше вашего акселерометра. Приклейте акселерометр к картону, убедившись, что вы нанесли клей на дно. Затем приклейте акселерометр с картонной подложкой к тыльной стороне перчатки. Свободно пришейте каждую проволоку к запястью перчатки, чтобы снять напряжение на акселерометре, и тогда ваша перчатка готова. Подключайте его к более длинным проводам, чтобы было достаточно места для движения руки, когда он подключен.

Шаг 4. Составьте текст в Ableton

Пришло время сочинить песню, которую вы в конечном итоге будете контролировать с помощью перчатки. Я рекомендую лупы Ableton, которые хорошо звучат вместе, но их можно использовать для постепенного наращивания: попробуйте мелодию, аккорды, бас и перкуссию. Вы сможете использовать свою перчатку, чтобы контролировать, когда каждый цикл воспроизводится или нет.

Если вы можете придумать какие-либо интересные звуки, которые можно иногда включать в песню, например, странный звуковой эффект или нетрадиционный инструмент, попробуйте добавить один или два из них! Вы можете связать их с менее распространенными движениями рук, чтобы время от времени приносить что-то интересное.

Вот ссылка на мою Arduino-совместимую композицию, если вы не хотите писать свою собственную:

(К сожалению, обучение Ableton выходит за рамки данного руководства. Однако есть много хороших обучающих видео, и у Ableton есть 90-дневная бесплатная пробная версия! Я рекомендую это видео.)

Шаг 5: Начните использовать Firmata

Начать использовать Firmata
Начать использовать Firmata

Чтобы ваш Arduino мог взаимодействовать с Ableton, вам понадобится библиотека под названием Firmata. Вам также необходимо загрузить комплект подключения для Ableton.

В Ableton щелкните Пакеты> Комплект для подключения> Устройства в меню в левом верхнем углу, а затем дважды щелкните первое устройство (Arduino), чтобы добавить его. Убедитесь, что вы помните, на какой трек Ableton вы добавили устройство!

Шаг 6: тестовые данные

Тестовые фирмы
Тестовые фирмы

Сначала мы проверим и убедимся, что ваш Arduino взаимодействует с Ableton. Загрузите этот фрагмент кода в свой Arduino и запустите его:

#include void analogWriteCallback (byte pin, int value) {if (IS_PIN_PWM (pin)) {pinMode (PIN_TO_DIGITAL (pin), OUTPUT); analogWrite (PIN_TO_PWM (контакт), значение); }} void setup () {Firmata.setFirmwareVersion (FIRMATA_FIRMWARE_MAJOR_VERSION, FIRMATA_FIRMWARE_MINOR_VERSION); Firmata.attach (ANALOG_MESSAGE, analogWriteCallback); Firmata.begin (57600);} void loop () {Firmata.sendAnalog (0, 800);}

Это минимум, необходимый для связи с Firmata. Он постоянно отправляет выходной сигнал 800 (из 1024) на порт 0 устройства Firmata в Ableton. Если вы загрузите этот код в свой Arduino, когда у вас открыто устройство Firmata в Ableton, он должен выглядеть, как на изображении выше. (Сопоставьте порт 0 с чем-либо в Ableton, чтобы видеть значения.)

Вы можете нажать кнопку «Карта», а затем любое устройство, совместимое с Firmata, в Ableton, чтобы добавить соответствие между входными данными, полученными на этот порт, и значением этого устройства Ableton. Простые примеры включают громкость любой дорожки или любой циферблат в звуковом эффекте. Исследуйте и посмотрите, что вы можете найти на карте!

Шаг 7: влияйте на музыку движениями рук

Влияйте на музыку движениями рук!
Влияйте на музыку движениями рук!

К этому времени у вас должна быть музыка в Ableton, скрипт Firmata на вашем Arduino и прикрепленная перчатка акселерометра. Сделаем музыку!

Сопоставьте порты устройства Arduino в Ableton с разными вещами (я предлагаю отслеживать объем), а затем добавьте строки кода для отправки данных на каждый порт из Arduino.

Firmata.sendAnalog (порт, volumeLevel);

Используйте такой код для каждого порта Firmata.

Если вы хотите сделать что-то простое, вы можете отправить необработанные значения акселерометра в порты Ableton и сопоставить их оттуда. Для более сложных задач вы можете решить: какие значения акселерометра должны вызывать звуки, как и когда?

Затем воспроизведите все свои циклы Ableton, запустите код Arduino и танцуйте!

(Отказ от ответственности: если вы планируете создать какой-либо сложный алгоритм для своей песни, на его точную настройку может уйти много времени. "Dance Away" может быть менее точным, чем ожидалось.)

Шаг 8: Класс Track (бонус!)

Если вы не против увеличения громкости или у вас есть другой способ уменьшить его, пропустите этот шаг. В противном случае читайте дальше!

Я заметил, что переключение громкости с приглушенного на полную за один раз создает неприятные хлопающие звуки, и приятно иметь возможность постепенно уменьшаться в громкости. Однако в среде синхронного программирования Arduino это сделать сложно. Итак, вот код, чтобы убрать всплывающие окна:

class Track {public: int volume; int volumeGoal; int updateSpeed; Track () {volume = 0; volumeGoal = 0; updateSpeed = 0; } void setVolumeGoal (int target) {volumeGoal = goal; } int getVolumeGoal () {return volumeGoal; } void setUpdateSpeed (int fastness) {updateSpeed = быстродействие; } int getVolume () {объем возврата; } void updateVolume () {if ((volume> volumeGoal) && ((volume - volumeGoal)> = updateSpeed)) {volume - = updateSpeed; } иначе, если ((volume = updateSpeed)) {volume + = updateSpeed; }} void mute (int fastness) {volumeGoal = 50; updateSpeed = стойкость; } полная пустота (int прочности) {volumeGoal = 950; updateSpeed = стойкость; }};

Каждый трек имеет текущий объем, целевой объем и скорость, с которой он движется к этому целевому объему. Если вы хотите изменить громкость дорожки, вызовите setVolumeGoal (). Каждый раз, когда вы запускаете функцию loop () в Arduino, вызывайте updateVolume () для каждой дорожки, а затем отправляйте эту информацию в Firmata с помощью getVolume (). Измените скорость обновления для более быстрого или более постепенного исчезновения! Кроме того, по возможности не устанавливайте громкость на 0; вместо этого установите очень низкое значение (по умолчанию в mute () установлено 100).

Шаг 9: длина трека, удары и многое другое (бонус!)

Вы можете многое сделать, чтобы звук вашего проекта было легче слушать. Вот несколько вариантов:

Вы можете отслеживать, как долго звучит песня. Для этого вам нужно выяснить, когда песня началась; Я рекомендую использовать цикл while в функции setup (), который задерживает выполнение вашего кода до тех пор, пока он не почувствует движение руки. Сохраните время начала песни в переменной с помощью millis () и проверяйте, сколько времени это длится каждый раз, когда вы выполняете loop (). Вы можете использовать это для включения или отключения определенных функций в определенное время песни.

Если вы знаете, как долго ваши петли в миллисекундах, вы также можете отслеживать, сколько петель вы прошли, для более детального понимания структуры песни!

Еще одна потенциальная проблема, с которой вы можете столкнуться, - это когда начинать и останавливать воспроизведение трека. Я решил эту проблему, отслеживая, в какой доле такта песня находится в данный момент. Затем я мог проигрывать треки для любого количества долей после жеста, вместо того, чтобы сразу его обрезать. Это делает процесс намного более плавным. Вот пример:

если (millis () - lastLoop> = 4000) {циклы + = 1; lastLoop = millis (); для (int j = 0; j <8; j ++) {beatNow [j] = false; }} beat = (millis () - lastLoop) / 250; если (бит! = lastBeat) {lastBeat = бит; beatsLeft - = 1; }

Убедитесь, что вы обновили громкость в соответствии со значениями beatNow [beat] и / или beatsLeft. Пример кода, включающий почти все в этом руководстве, а также некоторые из них, прилагается на тот случай, если вы хотите увидеть его на практике.

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