First the question, is this an app, hosting AudioProcessors or an instrument plugin?
If it is a plugin, don’t use AudioDeviceManager, since you are not supposed to talk to the AudioDevices directly. The user wants that all plugins respect the routing in the host.
Avoid to inherit the AudioOutEngine from Thread. It is good to offload the work to a background thread, but that’s why you have the TimeSliceThread for. And for that it would be good to create a shared pool of TimeSliceThreads, since you want ideally as many threads as cores. But in this setup you end up with as many threads as instances of your AudioOutEngine.
Have a look at SharedResourcePointer to create that.
If you want to call processBlock (i.e. you are hosting), you can create an AudioBuffer, that is referencing a subset of channels of the multi channel AudioBuffer.