Skip to content

iorlanprogressive/AudioSynthesizer

Repository files navigation

Синтезатор на ESP32

Синтезатор на ESP32

Эффекты:

  • ДИЛЭЙ / ЭХО
  • ФЛЭНДЖЕР
  • ТРЕМОЛО
  • ВИБРАТО
  • Изменение тональности / громкости
  • КЛИППИНГ (ДИСТОРШН / ОВЕРДРАЙВ)

Особенности синтезатора

Тип синтеза: аддитивный

Параметры синтеза

Параметры (задаются глобально, но применяются для каждой ноты отдельно):

  • waves_count - количество дополнительных частот (помимо основной частоты ноты)
  • detune - шаг дополнительных частот
  • decrease - спад дополнительных частот

Тип несущей волны (осциллятор): синусоида

Типы модулирующих волн (НЧ-осциллятор):

  • Синусоида
  • Прямоугольная (меандр)
  • Треугольная
  • Пилообразная

Способ вывода звука: внешний ЦАП - шина I2S


В примере реализовано управление звучащими нотами через терминал:

  • Байты в диапазоне [1, NOTES_COUNT] - соответствующая клавиша НАЖАТА
  • Байты в диапазоне [NOTES_COUNT + 1, 2 * NOTES_COUNT] - соответствующая клавиша ОТПУЩЕНА

Управление осциллятором: амплитуды частот задаются в массиве ampl

Управление ADSR-огибающей: состояние клавиш задаётся в массиве note:

  • ATTACK - клавиша нажата
  • RELEASE - клавиша отпущена ADSR-огибающая автоматически управляет осциллятором (массивом ampl)

Перечень компонентов:

  • ADC (работа с АЦП)
  • I2S (работа с шиной I2S)
  • Oscil (осциллятор, применение эффектов, вывод звука на ЦАП)
  • Envelope (ADSR-огибающая, управление осциллятором)
  • PitchShifter (изменение тональности звучания)
  • VolumeAdjust (изменение громкости звучания)
  • Vibrato (эффект ВИБРАТО, модуляция компонента PitchShifter)
  • Tremolo (эффект ТРЕМОЛО, модуляция компонента VolumeAdjust)
  • Clipping (эффект КЛИППНГ – ДИСТОРШН и ОВЕРДРАЙВ)
  • LFO (низкочастотный осциллятор, нужен для компонентов Vibrato, Tremolo и Flanger)
  • DelayLine (линия задержки для компонентов Delay и Flanger)
  • Delay (эффект ДИЛЭЙ / ЭХО)
  • Flanger (эффект ФЛЭНДЖЕР)
  • Timer (прерывания по таймеру)

Пример содержит предварительно сконфигурированный sdkconfig

Параметры, с которыми тестировалась прошивка (приведены некоторые, работоспособность с другими параметрами не гарантируется):

  • Bootloader config -> Bootloader optimization Level: Optimize for performance (-O2)
  • Compiler options -> Optimization Level: Optimize for performance (-O2)
  • Partition Table -> Partition Table: Single factory app (large), no OTA
  • ESP System Settings -> CPU frequency: 240 MHz
  • GPTimer Configuration -> Place GPTimer control fuctions into IRAM: 1
  • Скорость последовательного порта: 115200 бод
  • Количество нот: 120
  • Минимально возможная частота синтеза: 20 Гц
  • Максимально возможная частота синтеза: 20 кГц
  • Шаг изменения частоты: 1 Гц
  • Разрешение осциллятора: 50
  • Разрешение НЧ-осциллятора: 100
  • Минимальное время атаки ADSR-огибающей: 0,01 с
  • Максимальное время атаки ADSR-огибающей: 1 с
  • Минимальное время спада ADSR-огибающей: 0,01 с
  • Максимальное время спада ADSR-огибающей: 1 с
  • Минимальное время затухания ADSR-огибающей: 0,01 с
  • Максимальное время затухания ADSR-огибающей: 1 с
  • Разрешение ADSR-огибающей: 100
  • Максимальное время линии задержки: 0,5 с
  • Аудиовыход: стерео
  • Частота дискретизации: 44,1 кГц
  • Глубина дискретизации: 32 бит

ОБРАТИТЕ ВНИМАНИЕ: в sdkconfig флаг GPTimer Configuration -> Place GPTimer control fuctions into IRAM должен быть установлен ОБЯЗАТЕЛЬНО!

About

Синтезатор на ESP32

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published