Bug (including fix) for AAX Side-chain could mute or skip some buffers in nonRealtime()


#1

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:frowning:

I’ve looked it up and found something weird.
Here is plain generated sine:
image

Here is this sine after “freezing” (side-chain input must be connected).
image

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


#2

Just stressing the point that the side-chain implementation that existed in SR’s branch, which was used by us and others, worked well, and we naively switched to use ROLI’s new side-chain implementation (not without first helping to iron out some bugs in it) and are still suffering from newly discovered bugs in it :frowning:


#3

I’ve just reproduced this in a commercially released product!


#4

Sadly in our case the bug also manifests in commercially released products. The prior versions with SR’s side-chain implementation didn’t have the bug…


#5

Yes, I’ll have a look at this.


#6

Thanks for the report. A fix for this will appear on develop shortly with commit 03195b0.