Arggh,
We’ve had some reports of users failing to freeze tracks or even worse getting muted tracks with offline bounce under Pro Tools. One user led me to side-chain as the culprit.
We’ve actually migrated from rock-solid implementation by @danradix…
I’ve looked it up and found something weird.
Here is plain generated sine:
Here is this sine after “freezing” (side-chain input must be connected).
- It happens with any JUCE plug-in since 4.3.x (that uses side-chain) and up to latest 5.2.1 (develop/#2577ed)
- It wipes the first few buffers (or worse). this isn’t a delay or something (I’ve tried impulse based signal).
It seems this is the first commit to use isSuspended with Side-Chain context.
It causes some of the process calls to wipe actual data… this might also less visible but possible on realtime.
It might be worth actually using:
AAX_eNotificationEvent_SideChainBeingConnected / Disconnected and not use process callback for wiping received buffers…
Eventually I’ve removed all the async to be as follows:
AAX_Result NotificationReceived (AAX_CTypeID type, const void* data, uint32_t size) override
…
if (type == AAX_eNotificationEvent_SideChainBeingConnected || type == AAX_eNotificationEvent_SideChainBeingDisconnected) { sidechainDesired.set(type == AAX_eNotificationEvent_SideChainBeingConnected); processingSidechainChange.set (1); triggerAsyncUpdate(); }
and on the actual process:
bool isSuspended = pluginInstance->isSuspended() || processingSidechainChange.get() == 1;