mirror of
https://github.com/storytold/soundcraft.git
synced 2026-11-03 00:41:02 -06:00
One insert or instrument putting out NaN or infinity silenced the whole mix: the value spread through the busses and the main mix (NaN plus anything is NaN), and the output guard turned all of it into silence. It can also poison the state of filters, reverbs and compressors downstream, which then stay silent after the plugin has calmed down. After each insert (track or master) and each instrument processes, the engine checks its block. If the block holds NaN or infinity, the engine silences that block of the strip and skips the plugin until the next MixEngine::reset (playback starts or stops), which resets it and tries it again. Meanwhile the strip plays on without it, as if bypassed. The check costs about 60 ns per insert for a stereo 512-sample block. StripMeter::plugin_failures counts how often a strip lost a plugin and names the slot of the latest, so the UI names that plugin in the status line each time, also when it fails again after a restart. The AU host no longer zeroes non-finite output itself, so Audio Units are taken out and named like CLAP and VST3 plugins.