Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Этот проект вдохновлён ранней электронной музыкой и звуковыми эффектами, созданными радиофонической мастерской BBC в 1960-х годах. До того как синтезаторы стали обычным делом, чтобы услышать невиданные звуки, использовали сочетание промышленного испытательного оборудования и фокусов с магнитной лентой. Тестовые генераторы и «найденные звуки» давали сырой аудиоматериал, который зацикливался, реверсировался, ускорялся и замедлялся с помощью нескольких магнитофонов, чтобы получить жуткие, неестественные звуки, сопровождающие радио- и телепрограммы того времени.
В своём проекте с помощью микроконтроллера Arduino я смоделировал три винтажных тестовых генератора; весь проект можно собрать меньше чем за 15 фунтов стерлингов [около полутора тысяч рублей]. Исполнению не хватает эстетического очарования и аналогового звука реальных вещей, но я сохранил тактильное управление руками, которого нет в программных плагинах, и по самой его сути все потроха проекта можно хакнуть, отремонтировать и обновить.
Не так давно документальные фильмы о творчестве Делии Дербишир и радиофонической мастерской вызвали всплеск интереса к тому, как писали раннюю электронную музыку. В то же время современные артисты, например Hainbach, записывают треки при помощи старинного оборудования и столь же немолодых методов. Вновь возникший интерес неизбежно повысил спрос (и цены) на испытательное оборудование б/у. Устройства, несколько лет назад почти бесполезные, сегодня переходят из рук в руки на аукционах по цене более 200 фунтов стерлингов.
Компоненты:
- Один микроконтроллер Arduino X. Я воспользовался Nano, но заработать должен любой совместимый контроллер.
- 2 резистора 1M Ом.
- Резистор 3.9K Ом.
- Конденсатор X 4.7 nF.
- Выходной аудио разъём (6,3 мм или 3,5 мм).
- 6 линейных потенциометров 10K.
- 3 логарифмических потенциометра 10K.
- 2 однополюсных однонаправленных переключателя.
- USB-кабель питания.
- Перфорированная плата Veroboard.
- Гнездовая колодка (необязательно).
Чтобы загрузить ПО, вам также понадобится компьютер с установленной Arduino IDE. Схема достаточно проста для ручной проводки от точки до точки с помощью недорогой перфорированной платы. AudioPhonic Workbench хорошо работает от питания USB, поэтому никакого специального источника питания не потребуется.
Шаг 1. Начинаем
Компонентов в проекте минимум, это делает его дешевле и упрощает конструкцию. При помощи платы Arduino Nano можно запускать три осциллятора одновременно. Кроме того, генераторы могут перекрёстно модулировать друг друга и давать широкий диапазон звуков за счёт простой конструкции.
Пионеры ранней электронной музыки в своих творениях задействовали такие устройства, как вобуляторы и кольцевые модуляторы. Вобулятор использовал один осциллятор, чтобы изменять высоту тона второго осциллятора, разновидность частотной модуляции (ЧМ). На низких частотах так получается эффект вибрато, всё более диссонирующий на высоких частотах. Кольцевой модулятор позволяет одному осциллятору изменять громкость второго, этот процесс известен как амплитудная модуляция (AM). На низких частотах так рождается эффект тремело, который, опять же, всё более диссонирует, когда увеличивается частота модуляции. Audiophonic Workbench даёт как амплитудную, так и частотную модуляцию.
Выше показана передняя панель Audiophonic Workbench. Верхний ряд регуляторов управляет высотой звука каждого генератора, а нижний ряд – громкостью. Две ручки в среднем ряду управляют модуляцией. Первая контролирует то, как Oscillator 1 модулирует Oscillator 2. Поворот по часовой стрелке увеличивает амплитудную модуляцию, а поворот против часовой стрелки – частотную модуляцию. Вторая ручка в среднем ряду управляет тем, как Oscallator 2 модулирует Oscillator 3. Когда эти регуляторы расположены по центру, перекрёстной модуляции нет. Последние два элемента управления – это переключатели скорости осциллятора. Они позволяют генераторам 1 и 2 действовать в качестве генераторов низкой частоты (LFO), создавая эффекты вибрато и тремело, о которых я рассказывал выше.
Шаг 2. Железо
Принципиальная схема проекта показана выше. Он состоит из 8 потенциометров, соединённых с 8-ю аналоговым входами Arduino, и 2 переключателей, подключённых к контактам цифровых входов, и RC-цепи для аудиовыхода.
Чтобы выводить звук, Audiophonic Workbench использует широтно-импульсную модуляцию (ШИМ), избегая необходимости в отдельном цифро-аналоговом преобразователе. Аудиотека Mozzi поддерживает режим «HIFI PWM», который здесь применяется. Режим объединяет вывод двух выходов ШИМ, чтобы звук был качественнее. Включение HIFI PWM требует дополнительных усилий перед загрузкой кода. О них я написал в шаге 4.
Шаг 3. Воскрешение пульта
Первый шаг сборки – выбор корпуса. Я воспользовался недорогой сосновой шкатулкой для украшений из местного ремесленного магазина, покрасив её в матовый чёрный цвет, чтобы придать устройству образ в стиле ретро. Размеров 140 x 90 x 50 достаточно, чтобы разместить элементы управления на передней панели, но было бы лучше, будь шкатулка больше. Схему подключения передней панели я показываю ниже.
У всех потенциометров левые ножки соединены и подключены к выходу 5В на Arduino (выход 27). Точно так же правые контакты подключены и связаны с двумя тумблерами и GND на Arduino (контакт 29). Центральные ножки каждого потенциометра подключаются к аналоговым входам Arduino через тонкие проволочные выводы.
Можно было бы подключить переднюю панель напрямую к Arduino, но я предпочитаю использовать макетную плату с перфорацией, такая плата позволяет мне повторно использовать компоненты в проектах. Кроме того, легко добавлять дополнительные экспериментальные схемы. Если вы работаете с перфорированной платой, имеет смысл подключить Arduino в гнездо. На диаграмме ниже показаны обе стороны макета платы. Обратите внимание на вырезанные по центру дорожки. Их можно вырезать специальным инструментом или ножом, но я предпочитаю сверло диаметром 6 мм, чтобы дорожки были аккуратными и хорошо просматривались.
Я разместил гнездо аудиовыхода на задней панели коробки, но это только моё предпочтение. Также я просверлил большое отверстие в задней части, через которое USB-кабель проходит в коробку питания Arduino. При установке платы в корпус убедитесь, что у вас достаточно места, чтобы подключить USB-кабель.
Шаг 4. Загружаем и настраиваем Mozzi
В моём проекте для реализации осцилляторов используется библиотека синтеза звука Mozzi. Чтобы скомпилировать скетч, нужно скачать Mozzi и установить её в Arduino IDE. Загрузить библиотеку можно здесь
Ради сокращения количества компонентов звук генерируется при помощи широтно-импульсной модуляции (ШИМ). Вывод ШИМ – это последовательность цифровых импульсов. При достаточно высокой частоте эти импульсы заряжают конденсатор и дают на выходе повышающееся напряжение. При низкой частоте импульсов конденсатор разряжается, а выходное напряжение падает. Изменяя частоту (или ширину импульса), можно управлять формой волны.
Аудио у ШИМ Arduino, как правило, имеет низкое качество, но Mozzi поддерживает режим HIFI PWM – существенное улучшение стандартного звука ШИМ. Для этого используются два ШИМ-контакта и требуется один дополнительный резистор. Единственное осложнение: чтобы режим заработал, нужно изменить файл
mozzi_config.h
в библиотеке Mozzi, чтобы это работало.Во-первых, найдите файл (на моём Linux он находится в
/home/john/Arduino/libraries/Mozzi-master
. Вам нужно будет отредактировать его.Замените код
//#define AUDIO_MODE STANDARD
#define AUDIO_MODE STANDARD_PLUS
//#define AUDIO_MODE HIFI
вот этим кодом:
//#define AUDIO_MODE STANDARD
//#define AUDIO_MODE STANDARD_PLUS
#define AUDIO_MODE HIFI
Изменить нужно начало файла, строка 27.
Шаг 5. Проверяем железо
Чтобы протестировать железо, можно скачать простой скетч с моего Github.
Скетч считывает значения каждого аналогового входа один раз в секунду. Они, вместе с двумя входами переключателя, отображаются монитором порта Arduino IDE, как показано выше. После загрузки скетча попробуйте по очереди повернуть каждый потенциометр и убедитесь, что значения изменяются от 0 до 1023. Скетч также генерирует тестовый сигнал на аудиовыходе. Чтобы генерация заработала, вы должны изменить файл
mozzi-config.h
, как я написал в предыдущем разделе.Шаг 6. Програмная начинка
Весь код можно скачать с GitHub по этой ссылке.
Код довольно прост, но его нелегко понять, поскольку он оптимизирован с прицелом на скорость, а не на удобство чтения. Он был написан в манере встраивания и использует целочисленную арифметику с масштабированием данных, чтобы избежать числовых переполнений. Скетч создаёт три экземпляра осциллятора Моцци, используя волновую таблицу синусоидальной волны. Главный контур управления
updateControl
считывает потенциометры и переключатели 128 раз в секунду и соответственно обновляет ряд глобальных переменных. Цикл обработки звука updateAudio
использует эти глобальные переменные, чтобы вычислить отдельные отсчёты для каждого генератора. Затем они смешиваются и выводятся. Не стесняйтесь экспериментировать с кодом, но помните, что цикл updateAudio
вызывается 32768 раз в секунду. Код в нём должен выполняться быстро. Выход обработки за допустимые пределы вызовет треск и сбои в звуке.Шаг 7. Как оно в деле?
Audiophonic Workbench поощряет эксперименты. Элементы управления спроектированы так, чтобы, пока громкость Oscillator 3 не установлена на ноль, всегда воспроизводить какой-то звук. Хотя этот звук может стать диссонирующим, он не должен давать сбоев или сильно искажённого вывода. Несколько настроек ручек – и по пространству разносится стиль sci-fi с его пульсирующими ритмами.
Простые синусоиды значительно выигрывают от дополнительных звуковых эффектов. Оригинальная работа радиофонической мастерской во многом приобретает характер благодаря интенсивному использованию реверберации и эха. Идеально подойдёт педаль multi-fx – я использую старую гитарную педаль Zoom. Программные эффекты плагинов отлично подходят для записи на компьютер. Эффекты винтажного стиля, такие как имитация «Tape Echo» и «Spring Reverb», работают хорошо: они соответствуют звучанию 1960-х. Интересные тона также можно записать в сэмплер и «проиграть» с помощью обычной MIDI-клавиатуры. Возможные модификации – переключатели, чтобы добиваться другой формы волны, ЦАП для высококачественного аудиовывода и MIDI-интерфейс, чтобы управлять высотой звука Oscillator 3.
Узнайте подробности, как получить Level Up по навыкам и зарплате или востребованную профессию с нуля, пройдя онлайн-курсы SkillFactory со скидкой 40% и промокодом HABR, который даст еще +10% скидки на обучение:
- Профессия Data Scientist
- Профессия Data Analyst
- Курс по Data Engineering
- Другие профессии и курсыПРОФЕССИИ
- Профессия Java-разработчик
- Профессия QA-инженер на JAVA
- Профессия Frontend-разработчик
- Профессия Этичный хакер
- Профессия C++ разработчик
- Профессия Разработчик игр на Unity
- Профессия Веб-разработчик
- Профессия iOS-разработчик с нуля
- Профессия Android-разработчик с нуля
КУРСЫ
- Курс по Machine Learning
- Курс «Математика и Machine Learning для Data Science»
- Курс «Machine Learning и Deep Learning»
- Курс «Python для веб-разработки»
- Курс «Алгоритмы и структуры данных»
- Курс по аналитике данных
- Курс по DevOps