Sobre o projeto
chalkwalk-dsp é uma pequena biblioteca C++ de DSP de áudio dividida em dois alvos. O alvo de primitivos, chalkwalk::dsp, é header-only e sem dependências; o alvo de medição, chalkwalk::dsp::measure, é separado porque incorpora uma dependência (libebur128) que apenas os consumidores que desejam um valor de loudness precisam compilar.
Primitivos (chalkwalk::dsp):
- Svf.h — filtro state-variable da Cytomic que fornece lowpass, highpass, bandpass e notch a partir de um par de polos. Suporta set(freq, Q, sampleRate) e setCoeffs(g, k) para chamadores que suavizam os coeficientes por conta própria.
- PolyBlep.h — correção de degrau com limitação de banda para osciladores saw e pulse.
- SoftClip.h — teto de soft-knee que é exatamente unitário abaixo do joelho.
- Interpolation.h — interpolação Hermite de 4 pontos para leituras fracionárias de buffers.
- Denormal.h — limpeza de estado para que um filtro recursivo ocioso não reduza o desempenho.
Instrumentos:
- Measure.h — pico, rms, crest, dB, brilho e pitch; depende apenas de chalkwalk::dsp.
- Loudness.h — loudness integrada em LUFS; depende de chalkwalk::dsp::measure e libebur128.
O uso é header-only: adicione o diretório include ou use-a como um subdiretório CMake e linke chalkwalk::dsp, opcionalmente chalkwalk::dsp::measure para loudness. O README observa que Measure.h funciona apenas com o alvo de primitivos, portanto clonar sem --recursive é suficiente, a menos que a loudness BS.1770 seja necessária.
Build e teste: cmake -B build && cmake --build build && ctest --test-dir build. O projeto é projetado para compilar de forma autônoma, o que o README apresenta como um teste da fronteira de extração.
O README documenta a motivação para a biblioteca: implementações duplicadas em dois plugins divergiam de maneiras consequentes. Os exemplos apresentados incluem um sinal de correção polyBLEP invertido que reforçava em vez de cancelar uma descontinuidade, uma clamp de largura de pulso fixada em [0.05, 0.95] descrita como incorreta tanto em frequências baixas quanto altas (o limite deve escalar com o incremento de fase), falta de limpeza de denormais em um filtro recursivo e guardas de filtro para tan() próximo a Nyquist e a corte zero. O código de medição foi consolidado porque pico e rms existiam três vezes e fundamentalHz duas vezes; o README informa que um detector lia 294,7 Hz para um tom de 440 Hz. As medições são calibradas contra sinais sintéticos com respostas conhecidas, e integratedLufs é verificado contra o ebur128 do ffmpeg com concordância dentro de 0,05 LU.
Licença: MIT. libebur128 (MIT) é incluída por vendor como um submódulo em modules/libebur128 para o alvo de medição; os primitivos não linkam nada. O projeto faz parte do ecossistema de plugins chalkwalk, ao lado de chalkwalk-music.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.