[Из песочницы] Гитарные эффекты: алгоритмы, первый опыт аппаратной реализации

Электрогитара давно стала неотъемлемым атрибутом едва ли не каждой музыкальной группы. Вместе с тем, активное развитие получил и рынок устройств, основной функцией которых является обработка гитарного звука. Как Вы могли догадаться, речь в статье пойдёт о гитарных эффектах.

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

Что такое гитарные эффекты? Для чего они нужны? Пусть следующее видео ответит за нас:

Теоретическая часть

Ниже приведена классификация эффектов в зависимости от особенностей их реализации:

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.

Фото ардуино и кодека

image

При первом же тесте взаимодействия с кодеком стало ясно, что 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/.

image

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

Фото процесса разработки

freedsp development

freedsp development

freedsp development

Итак, freeDSP собран, и даже не воспламеняется при включении в розетку.

freedsp final

Мы уже готовы были открывать шампанское, но далее нас ожидала серия проблем. На сайте 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 евро за компоненты, однако если приобретать всё самостоятельно — можно немного сэкономить.

Заключение

В конечном итоге нам всё же удалось сделать скромный гитарный процессор, однако финальная версия в корне отличалась от планируемой изначально и заслуживает отдельной статьи. Часть возможностей процессора показана на видео:

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

Источник

DIY, dsp, freedsp, guitar

Читайте также