Hello,
I’m trying to figure out how to use AudioProcessorGraph.
I made simple plugin following this post.
Signal path is like this
Audio In —> myProcessor ------> Audio Out
private:
AudioProcessorGraph myGraph_;
AudioProcessorGraph::AudioGraphIOProcessor* ioProcIn_;
AudioProcessorGraph::AudioGraphIOProcessor* ioProcOut_;
AudioProcessorGraph::AudioGraphIOProcessor* ioProcMidiIn_;
AudioProcessorGraph::AudioGraphIOProcessor* ioProcMidiOut_;
AudioProcessorGraph::Node::Ptr ioProcInNode_;
AudioProcessorGraph::Node::Ptr ioProcOutNode_;
AudioProcessorGraph::Node::Ptr ioProcMidiInNode_;
AudioProcessorGraph::Node::Ptr ioProcMidiOutNode_;
MyAudioProcessor* myProcessor;
constructor:
ioProcIn_ = new AudioProcessorGraph::AudioGraphIOProcessor
(AudioProcessorGraph::AudioGraphIOProcessor::audioInputNode);
ioProcOut_ = new AudioProcessorGraph::AudioGraphIOProcessor (AudioProcessorGraph::AudioGraphIOProcessor::audioOutputNode);
ioProcMidiIn_ = new AudioProcessorGraph::AudioGraphIOProcessor (AudioProcessorGraph::AudioGraphIOProcessor::midiInputNode);
ioProcInNode_ = myGraph_.addNode(ioProcIn_);
ioProcOutNode_ = myGraph_.addNode (ioProcOut_);
ioProcMidiInNode_ = myGraph_.addNode (ioProcMidiIn_);
AudioProcessorGraph::Node* sbNode = myGraph_.addNode (myProcessor = new MyAudioProcessor());
myProcessor->setNodeID (sbNode->nodeId);
prepareToPlay:
myGraph_.setPlayConfigDetails (getTotalNumInputChannels(), getTotalNumOutputChannels(), sampleRate, samplesPerBlock);
myGraph_.prepareToPlay (sampleRate, samplesPerBlock);
myGraph_.addConnection (myProcessor->getNodeID(), 0, ioProcOutNode_->nodeId, 0);
myGraph_.addConnection (myProcessor->getNodeID(), 1, ioProcOutNode_->nodeId, 1);
processBlock:
myGraph_.processBlock (buffer, midiMessages);
My plugin crashes immediately.
error log:
Thread 6 Crashed:: com.apple.audio.IOThread.client
0 com.roli.pluginhost 0x000000010502c35c void juce::AudioProcessorGraph::processAudio(juce::AudioBuffer&, juce::MidiBuffer&) + 332
1 com.yourcompany.AudioGraphTest 0x000000010d997845 juce::AudioProcessorGraph::processBlock(juce::AudioBuffer&, juce::MidiBuffer&) + 37 (juce_AudioProcessorGraph.cpp:1496)
2 com.yourcompany.AudioGraphTest 0x000000010d93ee3a AudioGraphTestAudioProcessor::processBlock(juce::AudioBuffer&, juce::MidiBuffer&) + 74 (PluginProcessor.cpp:185)
3 com.yourcompany.AudioGraphTest 0x000000010d93b776 void JuceVSTWrapper::internalProcessReplacing(float**, float**, int, JuceVSTWrapper::VstTempBuffers&) + 1302 (juce_VST_Wrapper.cpp:475)
4 com.yourcompany.AudioGraphTest 0x000000010d93b235 JuceVSTWrapper::processReplacing(float**, float**, int) + 149 (juce_VST_Wrapper.cpp:533)
5 com.yourcompany.AudioGraphTest 0x000000010d930fb3 JuceVSTWrapper::processReplacingCB(VstEffectInterface*, float**, float**, int) + 51 (juce_VST_Wrapper.cpp:538)
6 com.roli.pluginhost 0x00000001050879ac juce::VSTPluginInstance::invokeProcessFunction(juce::AudioBuffer&, int) + 124
7 com.roli.pluginhost 0x0000000105087582 void juce::VSTPluginInstance::processAudio(juce::AudioBuffer&, juce::MidiBuffer&) + 1186
8 com.roli.pluginhost 0x0000000105039f2e juce::VSTPluginInstance::processBlock(juce::AudioBuffer&, juce::MidiBuffer&) + 126
9 com.roli.pluginhost 0x0000000105048da6 juce::GraphRenderingOps::ProcessBufferOp::callProcess(juce::AudioBuffer&, juce::MidiBuffer&) + 70
10 com.roli.pluginhost 0x0000000105048cfb void juce::GraphRenderingOps::ProcessBufferOp::perform(juce::AudioBuffer&, juce::OwnedArray<juce::MidiBuffer, juce::DummyCriticalSection> const&, int) + 267
11 com.roli.pluginhost 0x0000000105048986 juce::GraphRenderingOps::AudioGraphRenderingOpjuce::GraphRenderingOps::ProcessBufferOp::perform(juce::AudioBuffer&, juce::OwnedArray<juce::MidiBuffer, juce::DummyCriticalSection> const&, int) + 54
12 com.roli.pluginhost 0x000000010502c388 void juce::AudioProcessorGraph::processAudio(juce::AudioBuffer&, juce::MidiBuffer&) + 376
13 com.roli.pluginhost 0x0000000104ff9535 juce::AudioProcessorGraph::processBlock(juce::AudioBuffer&, juce::MidiBuffer&) + 37
14 com.roli.pluginhost 0x00000001050b9fac juce::AudioProcessorPlayer::audioDeviceIOCallback(float const**, int, float**, int, int) + 1372
15 com.roli.pluginhost 0x0000000104fa4175 juce::AudioDeviceManager::audioDeviceIOCallbackInt(float const**, int, float**, int, int) + 693
16 com.roli.pluginhost 0x0000000104facaaf juce::AudioDeviceManager::CallbackHandler::audioDeviceIOCallback(float const**, int, float**, int, int) + 63
17 com.roli.pluginhost 0x0000000104fb5dfb juce::CoreAudioClasses::CoreAudioInternal::audioCallback(AudioBufferList const*, AudioBufferList*) + 475
18 com.roli.pluginhost 0x0000000104fb5c0b juce::CoreAudioClasses::CoreAudioInternal::audioIOProc(unsigned int, AudioTimeStamp const*, AudioBufferList const*, AudioTimeStamp const*, AudioBufferList*, AudioTimeStamp const*, void*) + 59
19 com.apple.audio.CoreAudio 0x00007fffd32668ce HALC_ProxyIOContext::IOWorkLoop() + 5290
20 com.apple.audio.CoreAudio 0x00007fffd3265264 HALC_ProxyIOContext::IOThreadEntry(void*) + 128
21 com.apple.audio.CoreAudio 0x00007fffd3264fa3 HALB_IOThread::Entry(void*) + 75
22 libsystem_pthread.dylib 0x00007fffe90799af _pthread_body + 180
23 libsystem_pthread.dylib 0x00007fffe90798fb _pthread_start + 286
24 libsystem_pthread.dylib 0x00007fffe9079101 thread_start + 13
//==========================================================
Could anyone point me what is wrong?
Thank you for your help.