Об этом проекте

chalkwalk-dsp — небольшая C++-библиотека аудио-DSP, разделённая на две цели. Цель примитивов, chalkwalk::dsp, является header-only и не имеет зависимостей; цель измерений, chalkwalk::dsp::measure, вынесена отдельно, поскольку она подтягивает зависимость libebur128, которую нужно собирать только тем, кому требуется численное значение громкости. Примитивы (chalkwalk::dsp): - Svf.h — фильтр на переменных состояния Cytomic, обеспечивающий lowpass, highpass, bandpass и notch от одной пары полюсов. Поддерживает set(freq, Q, sampleRate) и setCoeffs(g, k) для вызывающего кода, который сам сглаживает коэффициенты. - PolyBlep.h — ограниченная по полосе коррекция ступенек для пилообразных и импульсных осцилляторов. - SoftClip.h — потолок с мягким коленом, который точно равен единице ниже колена. - Interpolation.h — четырёхточечная интерполяция Эрмита для дробного чтения буфера. - Denormal.h — сброс состояния, чтобы простаивающий рекурсивный фильтр не замедлялся. Инструменты: - Measure.h — пик, RMS, крест-фактор, dB, яркость и высота тона; зависит только от chalkwalk::dsp. - Loudness.h — интегральная громкость в LUFS; зависит от chalkwalk::dsp::measure и libebur128. Использование является header-only: добавьте каталог include или используйте проект как подкаталог CMake и слинкуйтесь с chalkwalk::dsp, а для громкости — опционально с chalkwalk::dsp::measure. В README отмечается, что Measure.h работает только с целью примитивов, поэтому клонирования без --recursive достаточно, если только не требуется громкость BS.1770. Сборка и тестирование: cmake -B build && cmake --build build && ctest --test-dir build. Проект рассчитан на автономную сборку, которую README описывает как проверку границы извлечения. README документирует мотивацию библиотеки: дублирующиеся реализации в двух плагинах расходились в существенных отношениях. Среди примеров — инвертированный знак коррекции polyBLEP, который усиливал разрыв, а не устранял его; фиксированный ограничитель ширины импульса [0.05, 0.95], который описан как неверный и на низких, и на высоких частотах (предел должен масштабироваться с приращением фазы); отсутствие сброса денормализованных чисел в рекурсивном фильтре; а также защиты фильтра для tan() вблизи Найквиста и нулевой частоты среза. Код измерений был консолидирован, потому что пик и RMS существовали трижды, а fundamentalHz — дважды; README утверждает, что один детектор показывал 294.7 Гц для тона 440 Гц. Измерения калибруются по синтетическим сигналам с известными ответами, а integratedLufs проверяется относительно ebur128 из ffmpeg с совпадением в пределах 0.05 LU. Лицензия: MIT. libebur128 (MIT) включён как сабмодуль в modules/libebur128 для цели измерений; примитивы ничего не линкуют. Проект является частью экосистемы плагинов chalkwalk наряду с chalkwalk-music.