Skip to content

v0.2.1

Latest

Choose a tag to compare

@github-actions github-actions released this 27 Oct 05:38

Added

  • 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.