Звуковые эффекты

Разбор скетча sine_pm_am_crush_lfo2.ino: какие эффекты в нём есть, какой строчкой каждый сделан и что можно настроить. Страница пересчитывает звук по тем же формулам, что Arduino Nano (Mozzi, 16384 Гц, 8 бит), — включите звук и крутите ручки.

Путь сигнала (подсвечено то, что сейчас работает)

1. Генератор — несущая частота

Синус — основа звука. Ручка задаёт высоту тона, шкала логарифмическая: каждая ⅕ поворота — октава.

2. Фазовая модуляция (PM) — тембр

Второй синус (модулятор) раскачивает фазу основного. Появляются обертоны, звук из «чистого» становится звонким и металлическим — так звучат FM-синтезаторы вроде Yamaha DX7. При MOD_RATIO 1, 2, 3 звук музыкальный, при дробном (1.41, 3.5) — колокольный.

3. LFO — тембр «плавает»

LFO — медленный генератор (0.1–10 Гц). Его самого не слышно, он двигает другой параметр — здесь частоту модулятора. Слышно только при ненулевой глубине PM (ручка A2).

4. Тремоло (AM) — громкость качается

Громкость умножается на медленный синус. Фоторезистор задаёт глубину (или скорость, если AM_MODE 1).

5. Биткраш — «8-битный» хрип

Две грубости сразу: меньше бит (ступеньки по громкости) и реже отсчёты (ступеньки по времени). На осциллограмме синус превращается в лесенку.

Ваши настройки для скетча

Изменённые значения отмечены. Скопируйте и замените ими соответствующие строки в начале скетча.


  

Какие эффекты бывают ещё

Их нет в скетче, но в Mozzi они делаются в несколько строк. Первые четыре можно включить здесь — они встают в цепочку после биткраша.

Сигнал усиливается и срезается сверху — синус становится почти прямоугольником.

усиление
sample = constrain(sample * DRIVE, -128, 127);

Срезает высокие частоты: звук темнеет. Резонанс добавляет «вау» на частоте среза. Хорошо слышно с PM и биткрашем.

срез, Гц
резонанс

  

Звук повторяется с задержкой и затухает. На Nano памяти хватит лишь на ~30–60 мс (на ESP32 — секунды): получится не эхо, а «гулкий» металлический призвук.

задержка, мс
повторы

  

Звук звучит не постоянно, а как нота: атака, спад, удержание, затухание. Включите и нажимайте кнопку (или клавишу N).

атака, мс
спад, мс
удержание
затухание, мс

  

Справочник

ЭффектЧто слышноЧем в MozziПараметры
Тремоло (AM) в скетчегромкость качаетсяOscil как LFO, умножениескорость, глубина
Фазовая / частотная модуляция в скетчеметаллический, колокольный тембрOscil::phMod()соотношение частот, глубина
LFO на параметр в скетчетембр или высота «плавают»Oscil на control-rateскорость, глубина, куда подключён
Биткраш в скетчехрип, «8-бит»маска бит + повтор отсчётовбит, во сколько раз реже
Вибратовысота дрожитLFO на setFreq()скорость, глубина
Перегрузгрязный, жёсткийconstrain(), WaveShaperусиление
Wavefolderяркий, «пищащий» перегрузWaveFolderуровень, пороги
Фильтр НЧ/ВЧтемнее/тоньше, «вау»ResonantFilter, StateVariableчастота среза, резонанс
Кольцевая модуляцияробот, колоколпроизведение двух Oscilчастота второго генератора
ЭхоповторыAudioDelayFeedbackвремя, обратная связь
Хорус / флэнжер«водяной», объёмный звукAudioDelay + LFO на времявремя, скорость, глубина
Реверберациязвук в залеReverbTankдлительность хвоста
Огибающая ADSRзвук как нотаADSR, Eadатака, спад, удержание, затухание
Портаментовысота плавно скользитPortamento, Smoothвремя скольжения
Шумшипение, ветер, ударныеrand(), таблица whitenoiseгромкость, фильтр

Правило Mozzi: медленное (чтение ручек, LFO, огибающие) — в updateControl(), 256 раз в секунду; то, что считается для каждого отсчёта звука, — в updateAudio(), 16384 раза в секунду.

Как сделана страница: генераторы, сглаживание ручек и целочисленная арифметика повторяют скетч и Mozzi (таблица синуса 2048 точек, фаза 16.16). Звук считается на 16384 Гц и 8 бит, как на Nano. Перегруз, фильтр, эхо и ADSR — встроенные узлы Web Audio, звучат похоже, но не бит в бит.