Sobre el proyecto

chalkwalk-dsp es una pequeña biblioteca de DSP de audio en C++ dividida en dos objetivos. El objetivo de primitivas, chalkwalk::dsp, es de solo encabezados y sin dependencias; el objetivo de medición, chalkwalk::dsp::measure, es independiente porque incorpora una dependencia (libebur128) que solo necesitan compilar los consumidores que quieran un valor de sonoridad. Primitivas (chalkwalk::dsp): - Svf.h — filtro de variables de estado de Cytomic que ofrece pasabajos, pasaltos, pasabanda y rechazo de banda a partir de un par de polos. Admite set(freq, Q, sampleRate) y setCoeffs(g, k) para quienes suavizan los coeficientes por su cuenta. - PolyBlep.h — corrección de paso de banda limitada para osciladores de diente de sierra y pulso. - SoftClip.h — techo de rodilla suave que es exactamente unitario por debajo de la rodilla. - Interpolation.h — interpolación Hermite de cuatro puntos para lecturas fraccionarias de búfer. - Denormal.h — vaciado de estado para que un filtro recursivo inactivo no ralentice la ejecución. Instrumentos: - Measure.h — pico, RMS, cresta, dB, brillo y tono; solo depende de chalkwalk::dsp. - Loudness.h — sonoridad integrada en LUFS; depende de chalkwalk::dsp::measure y libebur128. El uso es de solo encabezados: añada el directorio de inclusión o úselo como subdirectorio de CMake y enlace chalkwalk::dsp, y opcionalmente chalkwalk::dsp::measure para sonoridad. El README indica que Measure.h funciona únicamente con el objetivo de primitivas, por lo que basta con clonar sin --recursive a menos que se necesite la sonoridad BS.1770. Compilación y pruebas: cmake -B build && cmake --build build && ctest --test-dir build. El proyecto está diseñado para compilarse de forma autónoma, lo que el README presenta como una prueba del límite de extracción. El README documenta la motivación de la biblioteca: las implementaciones duplicadas en dos complementos discrepaban de formas consecuentes. Entre los ejemplos se incluyen un signo invertido en la corrección polyBLEP que reforzaba una discontinuidad en lugar de cancelarla, un límite de ancho de pulso fijado en [0.05, 0.95] que se describe como incorrecto tanto en frecuencias bajas como altas (el límite debería escalarse con el incremento de fase), la ausencia de vaciado de desnormales en un filtro recursivo y protecciones de filtro para tan() cerca de Nyquist y con corte cero. El código de medición se consolidó porque el pico y el RMS existían tres veces y fundamentalHz dos; el README señala que un detector leía 294.7 Hz para un tono de 440 Hz. Las mediciones se calibran con señales sintéticas de resultados conocidos, e integratedLufs se comprueba frente a ebur128 de ffmpeg con una coincidencia inferior a 0.05 LU. Licencia: MIT. libebur128 (MIT) se distribuye como submódulo en modules/libebur128 para el objetivo de medición; las primitivas no enlazan nada. El proyecto forma parte del ecosistema de complementos chalkwalk junto a chalkwalk-music.