Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
В этом уроке я расскажу вам, как создать перчатку, которая позволит вам взаимодействовать с музыкой через танец. Вы создадите перчатку с акселерометром, спроектируете композицию в Ableton, а затем соедините их таким сложным или простым способом, как захотите!
Запасы
- Ableton (или бесплатная пробная версия)
- Ардуино
- Соединительные кабели
- Паяльник
- Картон
- Пистолет для горячего клея
- Много воображения
Шаг 1: концепция
Этот проект создан для развлечения. Если то, как работает пример проекта в этом руководстве, вам не нравится, переделайте его!
Я рекомендую поставить некоторые из ваших любимых песен, поднести к ним руки и посмотреть, что из этого получится. Вы двигаете руками вверх-вниз? Бок о бок? Медленно или быстро? Какие аспекты музыки вызывают у вас желание пошевелить руками? Если у вас есть их список, вы, вероятно, сможете найти способы включить движения, которые вам нравятся, в ваши возможные алгоритмы.
Вот движения, которые я использовал:
- Быстрое движение вверх-вниз запускает начало песни, ударных или баса. (Это происходит в разных точках песни, не обязательно одновременно!)
- Медленное наклонное движение из стороны в сторону вызывает более эхо-высокий звук.
- В одном конкретном фрагменте песни, когда моя рука поднимается вверх, музыка притихает - так что я «поймал» ее в сжатом кулаке.
Используйте их или сделайте сами!
(Обратите внимание: в этом руководстве не рассматривается, как создавать музыку или мелодии вживую в Ableton! Если вы будете придерживаться этих инструкций, вы сможете только увеличивать / уменьшать громкость треков или применение звуковых эффектов.)
Шаг 2: подготовьте акселерометр
Во-первых, выясните, какой у вас акселерометр. Я использовал этот; любой трехосевой акселерометр подойдет. (Или попробуйте другой тип датчика, если хотите сходить с ума.) Убедитесь, что вы умеете считывать данные акселерометра с Arduino. Вам может потребоваться загрузить библиотеку для вашего акселерометра, если он использует что-то более сложное, чем аналоговый ввод.
После тестирования на макетной плате припаяйте короткие цветные провода к контактам акселерометра. Вставьте красный провод в контакт питания, черный провод в контакт заземления и любые другие необходимые провода для связи с акселерометром. (Если у вас есть акселерометр I2C, это будут контакты SCL и SDA. Если у вас аналоговый акселерометр, вероятно, будет по одному контакту для каждого из выходов x, y и z.) Убедитесь, что ваш припой прочный и чтобы бусинки не перекрывали соседние булавки.
Шаг 3: создайте перчатку
Вырежьте из тонкого картона или толстой бумаги прямоугольник размером чуть больше вашего акселерометра. Приклейте акселерометр к картону, убедившись, что вы нанесли клей на дно. Затем приклейте акселерометр с картонной подложкой к тыльной стороне перчатки. Свободно пришейте каждую проволоку к запястью перчатки, чтобы снять напряжение на акселерометре, и тогда ваша перчатка готова. Подключайте его к более длинным проводам, чтобы было достаточно места для движения руки, когда он подключен.
Шаг 4. Составьте текст в Ableton
Пришло время сочинить песню, которую вы в конечном итоге будете контролировать с помощью перчатки. Я рекомендую лупы Ableton, которые хорошо звучат вместе, но их можно использовать для постепенного наращивания: попробуйте мелодию, аккорды, бас и перкуссию. Вы сможете использовать свою перчатку, чтобы контролировать, когда каждый цикл воспроизводится или нет.
Если вы можете придумать какие-либо интересные звуки, которые можно иногда включать в песню, например, странный звуковой эффект или нетрадиционный инструмент, попробуйте добавить один или два из них! Вы можете связать их с менее распространенными движениями рук, чтобы время от времени приносить что-то интересное.
Вот ссылка на мою Arduino-совместимую композицию, если вы не хотите писать свою собственную:
(К сожалению, обучение Ableton выходит за рамки данного руководства. Однако есть много хороших обучающих видео, и у Ableton есть 90-дневная бесплатная пробная версия! Я рекомендую это видео.)
Шаг 5: Начните использовать 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. Пример кода, включающий почти все в этом руководстве, а также некоторые из них, прилагается на тот случай, если вы хотите увидеть его на практике.