Logic Pro, Dual-Mono and prepareToPlay issue

I hope someone can shed some light on this for me. Two things, 1) Changing between Stereo and Dual Mono in Logic Pro, when the sampling rate is 44.1Kz does not result in a call prepareToPlay()
2) What exactly is Dual Mono? It seems to describe an operation where a stereo plugin is broken down into two mono signals, one left and one right. But when I check my processor in this mode it usually returns mono, so is Logic creating two instances of the plugin? If so, and it’s running each with a single channel, how can developers tell which instance is which? Or does it merely bounce the left signal to both sides?

Right now I feel like bouncing it and the Mac it lives in out the top window of my office block!

Dual Mono is actually two unrelated mono instances.
The communication between them is done by the host using automation.
So if you moved a knob on one instance, and announced a parameter change, the host should pass that to the other.

There are no standard ways in the plugin API to talk to the other instance directly, although there are some hacky ways to do it if you really need to (send some custom message as a special parameter and decipher that on the other side, etc).

You can also talk to other instances via shared memory or file, but that’s also a bit hard, since the host isn’t telling the instance that you’re the “Dual Mono” of the other. As a plugin - you only know that you’re a mono instance, and hope the host handles it correctly.

So it means if you run dual mono on a stereo plugin you end up with two mono tracks containing only the left signal of the stereo plugin?

Still no clearer however on why prepareToPlay() isn’t called when changing from stereo to dual-mono in 44.1…

Not sure (most of my dual mono testing happened in pro tools, and I don’t own Logic) but I assume it should be called on both instances. Do you have the plugin constructor called in that case?

Yeah, the constructor is being called, but prepare to play is not.

That’s really weird, so you’re getting 2 constructors, and process calls on both, but without prepareToPlay? Does that mean that your sampleRate isn’t set, too?

It defaults to 44.1 in my processor. I’ll take another look when I have a chance. It’s driving me mad.

[edit] sorted. It was an error on my end :see_no_evil: