Choosing output device from among CoreAudio devices

I’m confused about the relationship between:

  • tracktion_engine::DeviceManager
  • juce:AudioDeviceManager
  • audio interfaces connected to my machine

My machines has two attached CoreAudio devices. te::DeviceManager::getAvailableDeviceTypes returns only one device type named Output 1 + 2

When using the te::DeviceManager how do I select which CoreAudio device is used?

Note: the following loops show that both devices are detected by the juce::AudioDeviceManager

    for (auto d : engine.getDeviceManager().deviceManager.getAvailableDeviceTypes()) {
        std::cout << d->getTypeName() << std::endl;
        for (auto name : d->getDeviceNames()) {
            std::cout << "    - " << name << std::endl;


    - Built-in Output
    - ZoomAudioDevice

(Both of which are available in Waveform’s Settings -> Audio Devices page)

The JUCE juce:AudioDeviceManager selects which CoreAudio device you want to use. This selects and sets up the physical hardware, opens the channels etc.

The tracktion_engine::DeviceManager configures how you want to the CoreAudio device to appear to the user. Either a mono inputs or stereo inputs (or a combination of the two). It also handles latency, speed correction etc.

It should automatically grab the built in device and open all the channels. I assume you don’t want to use the Zoom device, but if you had a external USB audio device you may want to use it. To do that you’d select it with the juce:AudioDeviceManager.

1 Like