[Из песочницы] Гитарные эффекты: алгоритмы, первый опыт аппаратной реализации
Электрогитара давно стала неотъемлемым атрибутом едва ли не каждой музыкальной группы. Вместе с тем, активное развитие получил и рынок устройств, основной функцией которых является обработка гитарного звука. Как Вы могли догадаться, речь в статье пойдёт о гитарных эффектах.
В статье присутствует описание некоторых гитарных эффектов, а также свод полученного нами при разработке гитарного процессора горького опыта. Кстати, гитарный процессор мы разрабатывали в качестве курсового проекта в университете.
Что такое гитарные эффекты? Для чего они нужны? Пусть следующее видео ответит за нас:
Теоретическая часть
Ниже приведена классификация эффектов в зависимости от особенностей их реализации:
1) Фильтры — ФНЧ, ФВЧ, полосовой фильтр, эквалайзер
2) Параметрические фильтры — wah-wah (квакушка), фейзер
3) Эффекты над линией задержки — vibrato, flanger, chorus, echo
4) Модуляторы — tremolo, vibrato
5) Нелинейные эффекты — overdrive, distortion, fuzz
6) Пространственные эффекты — reverb
Фильтры
Фильтры, по определению, удаляют часть спектра выше или ниже частоты среза. Для многих ситуаций это слишком грубое вмешательство.
Эквалайзер, с другой стороны, усиливает или ослабляет определенные частотные полосы, не меняя остаток спектра. Эквалайзеры строятся на сериях shelving- и peak-фильтров.
Ниже приведен список часто используемых фильтров:
- Lowpass filter
- Highpass filter
- Bandpass filter
- Bandreject filter
- Shelving filter
- Peak filter
Параметрические фильтры
Некоротые эффекты можно реализовать, меняя параметры простых фильтров с течением времени.
Эффект «Wah-wah» — это узкий bandpass-фильтр, в котором центральная (резонансная) частота перемещается со временем. Фильтрованный звук смешивается с оригинальным.
Эффекты над линией задержки
Все эффекты этого класса объединяет один принцип работы. Входной сигнал сохраняется в участке памяти, которая здесь назыается линией задержки (delay line). На выход же подается сумма входной выборки и выборки откуда-то из линии задержки. Количество и места выборок из линии задержки определяют уникальное звучание эффекта.
Эффекты, которые не сохраняют результат своей работы в линию задержки (т. е. там содержится только чистый входной сигнал) описываются фильтрами с конечной импульсной характеристикой. Эффекты, изменяющие линию задержки, описываются фильтрами с бесконечной импульсной характеристикой.
Эффект «Flanger» — выборка из линии задержки происходит в районе от 0 до 15 мс, причем точное место определяется по низкочастотному (около 1 Гц) синусоидальному закону. Использование низкочастотных синусоид — популярная техника при создании эффектов и имеет собственное название — Low Frequency Oscillator или просто LFO.
Эффект «Echo» — одна или несколько выборок на одинаковом расстоянии, более 50 мс. Вариант с одной выборкой позволяет фактически удвоить количество сыгранных нот. При помощи нескольих выборок можно имитировать игру в просторном помещении. Аналогичной цели достигает так же эффект «Reverb», но о нем позже.
Эффект «Chorus» — имитация игры нескольких инструментов. Несколько выборок (по количеству инструментов) на случайном расстоянии в 10–25 мс.
Модуляция
Модуляция — это процесс, при котором параметры синусоидального сигнала (амплитуда, частота и фаза) меняются на основе аудиосигнала.
Амплитудная модуляция определяется как
y (n) = (1 + a LFO (n)) x (n),
где, а — глубина модуляции, число от 0 до 1.
Эффект «Tremolo» — амплитудная модуляция звука с LFO до 20 Гц.
Нелинейные эффекты
Суть нелинейных эффектов сводится к внедрению в звук новых гармоник. Нелинейная обработка звука позволяет, к примеру, ослабить громкие участки, чтобы последующая аппаратура не вносила нежелательных искажений (или чтобы не разбудить соседей при просмотре фильма); усилить тихие участки, делая звук более насыщенным.
Однако, такие фильтры не входят в рамки статьи, поэтому в этом разделе мы сосредоточимся на линейке из трех схожих, очень гитарных, очень эффектных эффектов — overdrive, distortion, fuzz. По сути, это один эффект с разной силой и разными целями.
Овердрайв Вы могли услышать в начале статьи. Как звучит его старший брат, король металла — дисторшн, можно узнать под спойлером.
Реализция этого эффекта проста, и в то же время полна хитростей, что делает создание хорошего дисторшна своего рода искусством. В основе эффекта лежит простая идея — звуки слишком высокой амплитуды должны быть обрезаны. Поначалу это был нежелательный эффект от выхода электронных компонентов в нелинейные режимы работы, но со временем музыканты начали использовать это в своих интересах.
Практическая часть: попытка аппаратной реализации
Первым делом мы решили сделать «седцем» нашей системы Arduino. Этот выбор был обусловлен тем, что опыта работы с другими микроконтроллерами / микропроцессорами у нас практически не было. С arduino мы были хорошо знакомы. Также подкупила простота этой платформы.
Для обработки гитарного сигнала в цифровом виде необходим АЦП/ЦАП. Скромные АЦП/ЦАП, присутствующие на Arduino Mega, нам не подходили из-за малой разрядности. Было решено использовать внешний кодек. Выбор пал на cirrus logic CS4270.
При первом же тесте взаимодействия с кодеком стало ясно, что arduino для наших целей не подойдёт. Предельная частота, с которой мы смогли обмениваться с кодеком данными (принимать оцифрованный сигнал с АЦП, затем без обработки передавать его на ЦАП) составила ~20 кГц. Такая частота является недостаточной для обработки звука.
FreeDSP
Разочаровавшись в возможностях arduino, мы перешли в стадию поиска DSP (DSP — Digital signal processor, специализированный микропроцессор, предназначенный для цифровой обработки сигналов). На просторах интернета был найден проект FreeDSP (http://freedsp.cc/). Информации о нём совсем немного, не считая официального сайта.
FreeDSP — недорогое решение для цифровой обработки сигналов в режиме реального времени, предназначенное для исследователей и DIY сообщества. Плата базируется на ADAU 1701 DSP. Программирование ADAU 1701 осуществляется в SigmaStudio IDE. Более подробную информацию о проекте можно найти по адресу http://www.freedsp.cc/.
Создатели проекта предлагают за скромную сумму приобрести у них все комплектующие для сборки. Однако мы решили сделать всё самостоятельно. Благо на сайте проекта присутствуют все необходимые схемы, а также списки комплектующих. Фотографии процесса сборки можно увидеть под спойлером.
Фото процесса разработки
Итак, freeDSP собран, и даже не воспламеняется при включении в розетку.
Мы уже готовы были открывать шампанское, но далее нас ожидала серия проблем. На сайте freeDSP есть весьма подробное руководство по запуску проекта, однако сделав всё в точном соответствии с ним, перепроверив множество раз каждый пункт, freeDSP отказывался даже выдавать сигнал гитары на выход.
Потратив большое количество времени на перепайку нового ADAU, а также на проверку всевозможных неисправностей, проблема всё же была найдена. Оказалось, что файл, который выдаёт Sigma Studio в формате .hex при компиляции проекта, на самом деле является текстовым файлом. В руководстве по FreeDSP это никак не упоминалось. Следовательно, пришлось использовать специальные утилиты для преобразования текстового .hex файла в бинарный .hex, который используется программаторами. Одна из таких утилит преобразует исходный файл в intel hex формат, который используется большинством программаторов. Данная проблема не описана в руководстве к freeDSP, что в свою очередь влечёт массу проблем для разработчиков.
Итак, мы всё же заставили freeDSP работать. Теперь пару слов про программирование: ADAU 1701 загружает программу с EEPROM при запуске. Программирование, как было упомянуто ранее, выполняется в IDE Sigma Studio. Используется графический язык разработки, который отлично заточен под обработку сигналов.
Но следующая проблема не заставила себя долго ждать. Оказалось, что freeDSP не может взаимодействовать с какой-либо внешней памятью. Внутренней же памяти ему хватает лишь на delay длиной в 20ms. К сожалению, этот нюанс мы обнаружили слишком поздно. Для большинства гитарных эффектов память является необходимым условием. В связи с этим, freeDSP был положен на полку до лучших времён.
Наши выводы о работе с freeDSP: данная плата является отличным вариантом в том случае, если вы собираетесь делать обработку звука, не предполагающую наличие памяти (напр. эквалайзер). Среда разработки проста в освоении. Сборка платы также не вызывает особых затруднений. Что касается стоимости — на сайте freeDSP указана цена в 65 евро за компоненты, однако если приобретать всё самостоятельно — можно немного сэкономить.
Заключение
В конечном итоге нам всё же удалось сделать скромный гитарный процессор, однако финальная версия в корне отличалась от планируемой изначально и заслуживает отдельной статьи. Часть возможностей процессора показана на видео:
Надеемся, что данной статьёй мы поможем людям, начинающим разработку собственных гитарных эффектов, избежать тех граблей, на которые наступили мы.