Rebuild the instrument filter as a TPT/SVF with a continuous HP-BP-LP morph and a configurable drive stage
This commit is contained in:
+11
-9
@@ -995,15 +995,16 @@ target_link_libraries(curve_popup PUBLIC editor_geometry)
|
||||
add_library(master_gain STATIC src/core/instrument/engine/master_gain.cpp)
|
||||
target_include_directories(master_gain PUBLIC src)
|
||||
|
||||
# filter — the per-voice 2-pole resonant low/high-pass, ported from Daniel's Cortex-M4 filter
|
||||
# with its virtual FilterBase/Filter/Biquad hierarchy flattened away (that hierarchy dispatched
|
||||
# virtually per channel per sample, which the per-voice per-sample path forbids). Control
|
||||
# mapping, RBJ coefficient math, feedback saturation, and the filter type each get their own
|
||||
# file; VoiceFilter::process is header-inline so the biquad kernel still inlines at the call
|
||||
# site. Standard library only. NEITHER SDK.
|
||||
# filter — the per-voice TPT/SVF with a continuous HP->BP->LP morph and an in-loop drive stage.
|
||||
# The Cortex-M4 source's virtual FilterBase/Filter/Biquad hierarchy dispatched per channel per
|
||||
# sample, which the per-voice per-sample path forbids, so none of it came across. Control
|
||||
# mapping, SVF coefficients, morph weights, and the filter type each get their own file;
|
||||
# VoiceFilter::process is header-inline so the kernel still inlines at the call site. Standard
|
||||
# library only. NEITHER SDK.
|
||||
add_library(filter STATIC
|
||||
src/core/instrument/engine/filter/filter_params.cpp
|
||||
src/core/instrument/engine/filter/filter_coeffs.cpp
|
||||
src/core/instrument/engine/filter/filter_morph.cpp
|
||||
src/core/instrument/engine/filter/voice_filter.cpp)
|
||||
target_include_directories(filter PUBLIC src)
|
||||
|
||||
@@ -1107,9 +1108,10 @@ add_executable(master_gain_tests tests/test_master_gain.cpp)
|
||||
target_link_libraries(master_gain_tests PRIVATE master_gain)
|
||||
add_test(NAME master_gain_tests COMMAND master_gain_tests)
|
||||
|
||||
# filter: the per-voice resonant filter. Pins the RBJ coefficients against an independent
|
||||
# textbook cos/sin derivation, asserts the cutoff/Q control mappings at their anchors, and
|
||||
# measures the resonant peak both analytically and by driving real sines. NEITHER SDK.
|
||||
# filter: the per-voice resonant filter. Pins the SVF coefficients against an independent
|
||||
# derivation, asserts the cutoff/Q control mappings at their anchors, holds the morph endpoints
|
||||
# to the analytic 2-pole targets, and measures rate/level invariance and drive stability by
|
||||
# driving real sines. NEITHER SDK.
|
||||
add_executable(filter_tests tests/test_filter.cpp)
|
||||
target_link_libraries(filter_tests PRIVATE filter)
|
||||
add_test(NAME filter_tests COMMAND filter_tests)
|
||||
|
||||
Reference in New Issue
Block a user