- ДИЛЭЙ / ЭХО
- ФЛЭНДЖЕР
- ТРЕМОЛО
- ВИБРАТО
- Изменение тональности / громкости
- КЛИППИНГ (ДИСТОРШН / ОВЕРДРАЙВ)
Тип синтеза: аддитивный
Параметры (задаются глобально, но применяются для каждой ноты отдельно):
- 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 должен быть установлен ОБЯЗАТЕЛЬНО!