Hi everyone,
I’ve been working on trying to implement a simple version of a lock-free queue for parameter changes in my current plugin project, but I keep running into seg faults with my parameter messengers. I think I’m making a silly mistake somewhere…
In my processor, I’ve defined a simple class whose purpose is to attach to a specific parameter and push messages with that parameter’s unique identifier into the queue:
class ParameterMessenger : public juce::AudioProcessorValueTreeState::Listener
{
public:
ParameterMessenger(bav::MessageQueue& queue, int paramIDtoListen):
q(queue), paramID(paramIDtoListen)
{ }
void parameterChanged (const juce::String& s, float value) override
{
juce::ignoreUnused (s);
q.pushMessage (paramID, value);
}
private:
bav::MessageQueue& q;
const int paramID;
};
My pluginProcessor has as a member:
std::vector<ParameterMessenger> parameterMessengers; // all parameter messengers are stored in here
I created a function attempting to initialize a messenger for a specified parameter - the goal with this function is to create a messenger object, add it to the parameterMessengers
vector, and add it as a listener to my APVTS:
void ImogenAudioProcessor::addParameterMessenger (juce::String stringID, int paramID)
{
auto& messenger { parameterMessengers.emplace_back (ParameterMessenger(paramChanges, paramID)) };
tree.addParameterListener (stringID, &messenger);
}
so that I can call it like this in my constructor:
addParameterMessenger ("dryPan", dryPanID);
addParameterMessenger ("masterDryWet", dryWetID);
addParameterMessenger ("adsrAttack", adsrAttackID);
addParameterMessenger ("adsrDecay", adsrDecayID);
// etc etc
However, I keep hitting this error when testing with pluginval:
I suspect that I’m doing something wrong in my addParameterMessenger
function…
Any help would be greatly appreciated!!