Как автор TV-B-Gone сделал музыкальный синтезатор ArduTouch

в 9:00, , рубрики: ArduTouch, ATMEGA328P, diy или сделай сам, TV-B-Gone, звук, Разработка под Arduino, Синтезатор, Электроника для начинающих

Совместимый с Arduino музыкальный инструмент, обучающий цифровой обработке сигналов

Как автор TV-B-Gone сделал музыкальный синтезатор ArduTouch - 1

Статья Митча Альтмана – изобретателя, придумавшего универсальный пульт для выключения телевизоров TV-B-Gone, и организатора хакерских конференций

Ребёнком я тянулся к музыке, и меня поражали звуки синтезатора Moog с альбома 1968 года Switched-On Bach. Мне необходимо было научиться извлекать такие звуки! Так началось обучение и изготовление синтезаторов длиною в жизнь, параллельно моему вхождению в техноиндустрию, где я в итоге сделал TV-B-Gone, гаджет, который позволяет вам выключать почти все модели телевизоров, управляемых с пульта. С момента обретения TV-B-Gone популярности я сделал множество наборов для изготовления забавных открытых устройств, которые я представляю по всему миру на конференциях самоделкиных. На них новички обучаются паять, прокладывают себе путь в мир электроники и микроконтроллеров. Вспоминая свою молодость, я захотел обеспечить их набором, простым в сборке и использовании, но при этом являющимся полноценным музыкальным синтезатором.

Так появился ArduTouch стоимостью в $30. В этот проект входят одна плата, сенсорная клавиатура, ATMega328P (тот же процессор, что используется в Arduino Uno) и аудио усилитель с динамиком. У него также есть программная библиотека, которая может служить точкой входа в мир цифровой обработки сигналов.

Самой большой трудностью при разработке платы стало ограниченное количество контактов входа/выхода у ATMega328P. Я использовал 12 контактов для клавиатуры, чтобы реализовать всю хроматическую музыкальную шкалу целиком. Клавиатура похожа на Stylophone – один из моих любимых аналоговых синтезаторов конца 1960-х – и для распознавания использует ёмкостный датчик. Ещё два контакта используются для вывода стереозвука, а другие два – для последовательной передачи данных (ArduTouch можно программировать при помощи стандартных средств разработки для Arduino, хотя для соединения с компьютером потребуется кабель FTDI). Оставшихся контактов как раз хватило для двух кнопок и двух потенциометров, управляющих синтезатором.

Чтобы человек мог сразу получить слышимые результаты после пайки, я поместил на плату чип усилителя LM386 и динамик (усилитель обходится при подключении аудио джека). ЦАП-чипы стоят дорого, поэтому я использовал широтно-импульсную модуляцию для кодирования стерео аудио каналов, выходящих из ATMega328P. Фильтры нижних частот на каждый канал, состоящие резистора и конденсатора, преобразуют ШИМ в аудио.

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

Довольно просто заставить микроконтроллер выдавать простейшие ноты. Достаточно просто подсоединить динамик к контактам, и чередовать включение и выключение, отправляя квадратную волну на разных частотах (такую технологию использовал сам Алан Тьюринг в компьютере Manchester Mark II). Но в результате получится резкий звук, далёкий от богатой палитры синтезатора Moog.

Чтобы улучшить звук, мне нужно было обратиться к цифровым синтезаторам. Они занимаются созданием двоичных представлений аудиоволн, их искажением и превращением этих чисел в аналоговые сигналы. Это можно сделать множеством различных способов, и я с удовольствием отмечу, что ArduTouch поддерживает довольно много разных техник, включая использование волновых таблиц (использование хранящихся в памяти сэмплов) и генерацию звуков (подсчёт аудио на лету).

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

Как автор TV-B-Gone сделал музыкальный синтезатор ArduTouch - 2

Как автор TV-B-Gone сделал музыкальный синтезатор ArduTouch - 3
ArduTouch использует относительно немного компонентов

Как автор TV-B-Gone сделал музыкальный синтезатор ArduTouch - 4
Его могут собрать даже новички

И хотя концептуально всё вышеперечисленное не является чем-то трудным для изучения и понимания, само программирование получается довольно сложным. Библиотека ArduTouch, созданная мною вместе с моим другом Биллом Алесси, производит все вычисления низкого уровня – и на её создание у нас ушло два года.

Библиотека разработана так, чтобы быть гибкой и позволять даже неопытным пользователям создавать новые синтезаторы, выдающие разные звуки. Синтезатор Thick, комбинирующий четыре пилообразных волны идёт в комплекта, а другие синтезаторы можно скачать отдельно. Опытные пользователи могут научиться, как создавать синтезаторы с нуля, вызывая функции высокого уровня. Надеюсь, что люди, которым понравится проект, создадут новые синтезаторы и поделятся со мной их кодом, чтобы я мог делиться им с другими.

Но даже при использовании синтезатора по умолчанию звук получается неожиданно хорошим для подобного маломощного микроконтроллера (поддерживающего частоту дискретизации всего в 15 кГц) и недорогого оборудования. На моём канале на YouTube вы можете послушать множество демонстраций его работы.

Для развития проекта в будущем я буду продолжать улучшать библиотеку ArduTouch для Arduino и выкладывать дополнительные готовые синтезаторы. Также я работаю над созданием более мощной версии ArduTouch, подходящей для выступлений. Это уже будет не набор, но он всё равно останется совместимым с Arduino. У него будет 32-битный микроконтроллер со множеством контактов входа/выхода, ЦАП, куча памяти (что позволит использовать MIDI), небольшой ЖК-экран, несколько кнопок и потенциометров, и светодиодные индикаторы – и, конечно, улучшенный звук.

Автор: Вячеслав Голованов

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js