tldr: The engine appears to have a problem scanning Loopback
I am having the same problem on the develop
branch.
The program never actually crashes, so the most I get for output to the terminal is this
Loopback Audio
Creating Default Controllers...
Edit loaded in: 2 ms
After spending some time digging with breakpoints I was able to get a little deeper. It hangs while trying to construct a AudioObjectGetPropertyData
on line 2098 of juce_mac_CoreAudio.cpp
. Here is the stack trace up to that point:
Thread-1-<com.apple.main.thread>-[Juce Message Thread]
juce::CoreAudioClasses::CoreAudioIODeviceType::getNumChannels(unsigned int, bool) juce_mac_CoreAudio.cpp:2258
juce::CoreAudioClasses::CoreAudioIODeviceType::scanForDevices() juce_mac_CoreAudio.cpp:2101
juce::AudioDeviceManager::createDeviceTypesIfNeeded() juce_AudioDeviceManager.cpp:138
juce::AudioDeviceManager::scanDevicesIfNeeded() juce_AudioDeviceManager.cpp:533
juce::AudioDeviceManager::getAvailableDeviceTypes() juce_AudioDeviceManager.cpp:166
tracktion::engine::HostedAudioDeviceInterface::initialise(const tracktion::engine::HostedAudioDeviceInterface::Parameters &) tracktion_HostedAudioDevice.cpp:314
EngineInPluginDemo::EngineWrapper::EngineWrapper() EngineInPluginDemo.h:197
EngineInPluginDemo::EngineWrapper::EngineWrapper() EngineInPluginDemo.h:195
std::make_unique<…>() unique_ptr.h:728
<lambda>::operator()() const EngineInPluginDemo.h:234
EngineInPluginDemo::callFunctionOnMessageThread<…>(<lambda> &&) EngineInPluginDemo.h:216
EngineInPluginDemo::ensureEngineCreatedOnMessageThread() EngineInPluginDemo.h:234
EngineInPluginDemo::prepareToPlay(double, int) EngineInPluginDemo.h:54
juce::AudioProcessorPlayer::setProcessor(juce::AudioProcessor *) juce_AudioProcessorPlayer.cpp:193
juce::StandalonePluginHolder::startPlaying() juce_StandaloneFilterWindow.h:248
juce::StandalonePluginHolder::init(bool, const juce::String &) juce_StandaloneFilterWindow.h:110
juce::StandalonePluginHolder::StandalonePluginHolder(juce::PropertySet *, bool, const juce::String &, const juce::AudioDeviceManager::AudioDeviceSetup *, const juce::Array<…> &, bool) juce_StandaloneFilterWindow.h:103
juce::StandalonePluginHolder::StandalonePluginHolder(juce::PropertySet *, bool, const juce::String &, const juce::AudioDeviceManager::AudioDeviceSetup *, const juce::Array<…> &, bool) juce_StandaloneFilterWindow.h:84
juce::StandaloneFilterWindow::StandaloneFilterWindow(const juce::String &, juce::Colour, juce::PropertySet *, bool, const juce::String &, const juce::AudioDeviceManager::AudioDeviceSetup *, const juce::Array<…> &, bool) juce_StandaloneFilterWindow.h:731
juce::StandaloneFilterWindow::StandaloneFilterWindow(const juce::String &, juce::Colour, juce::PropertySet *, bool, const juce::String &, const juce::AudioDeviceManager::AudioDeviceSetup *, const juce::Array<…> &, bool) juce_StandaloneFilterWindow.h:718
juce::StandaloneFilterApp::createWindow() juce_StandaloneFilterApp.cpp:80
juce::StandaloneFilterApp::initialise(const juce::String &) juce_StandaloneFilterApp.cpp:98
juce::JUCEApplicationBase::initialiseApp() juce_ApplicationBase.cpp:297
juce::JUCEApplication::initialiseApp() juce_Application.cpp:92
juce::JUCEApplicationBase::main() juce_ApplicationBase.cpp:256
juce::JUCEApplicationBase::main(int, const char **) juce_ApplicationBase.cpp:240
main juce_audio_plugin_client_Standalone.cpp:47
start 0x00000001223b151e
I noticed a couple things during my investigation.
- The process of scanning for devices is successfully run twice before failing during construction of the
EngineWrapper
.
- I have 7 devices being scanned, and the only one that causes the hang is the last device, which is an instance of Loopback that I have running.
When I turn off Loopback, the plugin demo is able to run. I am otherwise able to run JUCE plugins and Tracktion Engine applications with Loopback turned on, its only when I try to hook the engine up to a plugin that it trips up on Loopback.