You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
RealtimeStatus::non_finite_outputs counts the callbacks that played the chain's output with
a NaN or infinite sample in it, which the device receives as is.
Fixed
A realtime callback that began before stop_realtime or recover_realtime no longer submits
to the old generation after the next start, which sent the new generation into a resync:
stopping and recovering wait for a callback in progress and stop its generation's
submissions, as resync_realtime does. stop_realtime, recover_realtime, and dropping or
preparing again a chain with an endpoint now wait for that callback.
A realtime callback that panics no longer leaves the endpoint's call count unbalanced, after
which a resync either went on while a callback submitted or never returned.
A Fallback::Dry endpoint called with more frames than the quantum plays the input its delay
line still holds, delayed, and silence before it; it read overwritten history and, in a debug
build, panicked in the callback.
The helper no longer ends with a control timeout when timing changes keep arriving while a
started realtime endpoint submits nothing, as when the device stopped or a resync is pending:
its worker takes them as they come. A CLAP plugin reporting a new tail on every tick filled
the queue in about 0.64 s.
Audio Unit editors, parameter lists, parameter edits and lookups no longer hold up the
processing thread: they call the unit without the lock it takes for each block. Opening an
editor while the realtime endpoint ran could make the worker miss.
A restore_state, preset, factory preset or reprepare_slot that changes the chain's latency
while the realtime endpoint runs succeeds when the resync it starts does not complete; the
endpoint plays its fallback with resync set meanwhile. It returned the resync's error though
the slot was already replaced.
The events of an output the realtime callback missed are no longer lost: once the helper has
completed it, they go out at offset 0, before the output's own, with the next callback. A note
off in a missed output left its note on until the next generation.
A VST3 plugin's component and separate controller now get the messages they send each other
from any thread; only those sent on the thread that created the plugin went through. An editor
that asks its processor for levels from a display-link thread, as FabFilter Pro-C 3's does,
showed no meters.
The note offs a new realtime generation sends for the notes earlier outputs left on go out with
its first callback that returns Ok. A first callback with invalid input dropped them with its
error.
RealtimeStatus::late no longer counts a quantum the helper could not read, and goes on across recover_realtime instead of starting again from 0.
A failure the helper reports in a slot the chain does not have counts as a protocol failure
without a slot.
On Windows, the helper's main thread handles the messages other threads send it while it waits
for its processing thread, so a plugin that sends it one from its processing no longer holds
it up until the control timeout.