audio: honor the float voice biquad parameter ABI #669

Merged
monsterlag merged 5 commits from fix/voice-float-biquad into main 2026-11-09 08:47:09 +00:00
monsterlag commented 2026-11-08 16:26:12 +00:00 (Migrated from github.com)

The voice setter for TBiquadFilterParameter<float> falls through to the unimplemented-import handler, so it queues no filter. The legacy Q14 voice setter is already implemented.

Add the distinct float overload and copy its enabled flag and coefficients into the existing queued voice-filter command. The 24-byte parameter has the flag at offset 0, three float numerator coefficients at offset 4 and two additive-feedback coefficients at offset 16. Floats are copied as supplied; Q14 scaling, sign flipping and a0 normalization do not apply. The existing commit and biquad processing/state handling are reused. The legacy overload and splitter filters are unchanged.

Validation uses authored packets, handles and sample buffers around the actual setters, submit/apply/commit, and the biquad loop extracted from render_voice. It covers identity/attenuation, fixed analytic additive-feedback responses, cross-frame history, disable/re-enable reset, filter/voice/channel isolation, invalid indices/handles/nulls and caller-packet reuse before commit. The legacy Q14 path is exercised too. The released-source negative compiles and invokes the actual public a64_unimplemented body, then fails the intended missing queued-filter assertion. The fixed fixture passes with audited GNU-target Clang 23.1.5 at -O2 -Wall -Wextra -Werror.

No device, real audio, game, resampler or private SDK instructions are included or run. Lock and output/allocator boundaries are not integration-tested; there is no physical-audibility, full-DSP equivalence, scene/distance or #599 causality claim. The targeted strict automatic runner passes locally on Linux/GCC; the audited Windows Clang result is retained with byte-identical production/fixture inputs.

Refreshed through a normal merge of main b1799142, retaining its complete automatic CI workflow and current staged-output fixture. The new voice test is registered with the strict runner for both OS jobs. All five actual DSP source/fixture inputs remain byte-identical; current-head hosted checks are pending.

Refs #599.

The voice setter for `TBiquadFilterParameter<float>` falls through to the unimplemented-import handler, so it queues no filter. The legacy Q14 voice setter is already implemented. Add the distinct float overload and copy its enabled flag and coefficients into the existing queued voice-filter command. The 24-byte parameter has the flag at offset 0, three float numerator coefficients at offset 4 and two additive-feedback coefficients at offset 16. Floats are copied as supplied; Q14 scaling, sign flipping and `a0` normalization do not apply. The existing commit and biquad processing/state handling are reused. The legacy overload and splitter filters are unchanged. Validation uses authored packets, handles and sample buffers around the actual setters, `submit`/`apply`/`commit`, and the biquad loop extracted from `render_voice`. It covers identity/attenuation, fixed analytic additive-feedback responses, cross-frame history, disable/re-enable reset, filter/voice/channel isolation, invalid indices/handles/nulls and caller-packet reuse before commit. The legacy Q14 path is exercised too. The released-source negative compiles and invokes the actual public `a64_unimplemented` body, then fails the intended missing queued-filter assertion. The fixed fixture passes with audited GNU-target Clang 23.1.5 at `-O2 -Wall -Wextra -Werror`. No device, real audio, game, resampler or private SDK instructions are included or run. Lock and output/allocator boundaries are not integration-tested; there is no physical-audibility, full-DSP equivalence, scene/distance or #599 causality claim. The targeted strict automatic runner passes locally on Linux/GCC; the audited Windows Clang result is retained with byte-identical production/fixture inputs. Refreshed through a normal merge of main `b1799142`, retaining its complete automatic CI workflow and current staged-output fixture. The new voice test is registered with the strict runner for both OS jobs. All five actual DSP source/fixture inputs remain byte-identical; current-head hosted checks are pending. Refs #599.
Commenting is not possible because the repository is archived.
No description provided.