Звуковые эффекты
Разбор скетча 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, звучат похоже, но не бит в бит.