Processing model
Audio uses planar channels and an explicit sample rate. Chain effects run serially in array order. The caller owns decode, encode, resampling, and buffers. Offline processing starts fresh; streams retain filter, delay, tail, and random history.
Catalog latency badges are qualitative declarations. Python
Stream.latency_samples and JavaScript ChainStream.latencySamples expose the same
runtime aggregate. Chain.latency_samples() in Python and chain.latencySamples()
in JavaScript report the same aggregate without opening a stream, so offline
process() output can be phase-aligned.
The AudioWorklet wrapper does not expose a latency getter.
Source-generating effects
The docs overlay explicitly marks types that can intentionally produce non-zero output
from zero input at an active setting and sample rate. The candidate-package gate runs
all 76 catalog types exactly once, using the same canonical assets as the public asset
examples where required. It requires the overlay, public catalog, and frozen
source-generation-v0.1.json member sets to match exactly, and treats a peak above
1e-7 as generated output. Those effect pages carry a warning; the absence of that
mark is a fixture result for the selected settings, not proof that every possible future
setting is non-generating.
Render such an effect by processing a zero input whose frame count defines the rendered length:
rendered = chain.process(np.zeros((2, frames), np.float32), sample_rate=sr)