Hi Erik,
I haven’t the time this week to read your code properly… but a quick glance makes me question if your objects’ lifetime scope is good… You appear to be passing around a lot of pointers – while I’d suggest using class members
For instance in a Standalone app I have which uses an AudioProcessorGraph I have some private members:
ScopedPointer<AudioProcessorGraph> m_pMainGraph;
AudioProcessorGraph::AudioGraphIOProcessor* m_ioProcOut;
AudioProcessorGraph::AudioGraphIOProcessor* m_ioProcMidiIn;
AudioProcessorGraph::AudioGraphIOProcessor* m_ioProcMidiOut;
AudioProcessorGraph::Node::Ptr m_ioProcOutNode;
AudioProcessorGraph::Node::Ptr m_ioProcMidiInNode;
AudioProcessorGraph::Node::Ptr m_ioProcMidiOutNode;
and in the MainComponent’s ctor in the init list I have:
m_pMainGraph (new AudioProcessorGraph()),
then in the ctor body (reduced to minimum for example):
m_pMainGraph->setPlayConfigDetails (2, 2, m_dSampleRate, m_iBufferSize);
m_ioProcOut = new AudioProcessorGraph::AudioGraphIOProcessor (AudioProcessorGraph::AudioGraphIOProcessor::audioOutputNode);
m_ioProcMidiIn = new AudioProcessorGraph::AudioGraphIOProcessor (AudioProcessorGraph::AudioGraphIOProcessor::midiInputNode);
m_ioProcMidiOut = new AudioProcessorGraph::AudioGraphIOProcessor (AudioProcessorGraph::AudioGraphIOProcessor::midiOutputNode);
m_ioProcOutNode = m_pMainGraph->addNode (m_ioProcOut);
m_ioProcMidiInNode = m_pMainGraph->addNode (m_ioProcMidiIn);
m_ioProcMidiOutNode = m_pMainGraph->addNode (m_ioProcMidiOut);
m_pSynthProc = new CSynthProcessor();
m_pSynthProcNode = m_pMainGraph->addNode (m_pSynthProc);
jassert (m_pSynthProcNode != nullptr);
m_pMainGraph->addConnection (m_ioProcMidiInNode->nodeId, AudioProcessorGraph::midiChannelIndex, m_pSynthProcNode->nodeId, AudioProcessorGraph::midiChannelIndex);
You also appear to be using raw pointers instead of ReferenceCountedObjectPtr (for the Nodes).
Cheers,
Rail