← все проверки

TuneTON: валидация §10.2 / §11

Фаза 0, полная цепочка эффектов, детерминизм реконструкции
Страница НЕ запускалась локально (нет браузера в среде сборки), только статически проверен код. Проверка на реальном Android в Telegram WebView (ADR-0011). Каждый POC ловит свои ошибки независимо и печатает JSON с полем error, не роняя страницу.

§10.2, полная цепочка эффектов: EQ, компрессор, дисторшн, lo-fi, реверб

Faust DSP компилируется НА УСТРОЙСТВЕ (в браузере, из @grame/faustwasm@0.16.3, без локального тулчейна). Цепочка: 4-полосный EQ (low-shelf + 2x peak_eq + high-shelf), компрессор (co.compressor_mono), дисторшн (tanh-waveshaper), lo-fi/битдробилка (прореживание SR + квантование битности), реверб (re.mono_freeverb, раздельно на L/R). Стерео (2 in, 2 out). Дефолты цепочки АКТИВНЫ (не bypass), тест должен нагружать CPU реалистично.
не запускалось
Оффлайн-прокси, device-независимая метрика: renderSpeed = длительность деленная на время рендера через OfflineAudioContext. renderSpeed много больше 1 (порог OK около 3-5x) значит в realtime есть запас, glitch маловероятен; renderSpeed меньше 1 значит рендер медленнее реального времени, glitch ожидаем. Это ПРОКСИ, не замена прослушивания на устройстве.
Стримит трек Jamendo через ТУ ЖЕ Faust-цепочку в реальном AudioContext (не offline). Слушай на предмет треска, дропаутов (underrun) и заиканий, это финальная проверка, которую оффлайн-прокси не заменяет. Дефолты слайдеров ниже НЕ bypass — эффект должен быть слышен сразу на Play. Кнопка A/B переключает оригинал/цепочку БЕЗ перезапуска трека.
Пресеты ниже выставляют слайдеры и применяют их к цепочке в реальном времени (если трек уже играет). "Чистая цепочка" — EQ + компрессор + реверб БЕЗ lo-fi/дисторшн-грязи: если на ней треска нет, значит треск был характером lo-fi/дисторшна (цепочка жизнеспособна); если трещит и чистая цепочка — вероятен реальный underrun, а не характер эффекта.
не запускалось

§11, детерминизм реконструкции пресета (0.C, ADR-0012)

Фиксированный, полностью детерминированный граф (без рандома, без буфера шума): OscillatorNode(220 Hz, sawtooth) в BiquadFilterNode(lowpass, 1200 Hz, Q=1) в WaveShaperNode(фиксированная tanh-кривая, oversample=none) в GainNode в destination. Рендерится через OfflineAudioContext.

Same-SR: дважды при 48000 Hz, должно быть побитово идентично (детерминизм ОДНОГО и того же движка/SR, базовое ожидание W3C Web Audio, но не гарантия между версиями и устройствами).

Cross-SR: при 44100 и 48000 Hz. Побитово совпасть НЕ может (разные SR, разные коэффициенты биквада), сравниваются статистически: оба ресемплятся (простая линейная интерполяция, вручную) к общей низкой сетке (8000 Hz), считаются корреляция, RMS-разница, maxAbsDiff. Числа без вердикта, интерпретация вручную.
не запускалось