Alright upon further investigation I believe that the following is true:
- Under WASAPI, each stereo pair belonging to a hardware device appears as its own audio endpoint
- Juce currently only implements one audio endpoint for output, and one endpoint for input
- Juce cannot output more than 2 channels at a time in WASAPI
I poked around the WASAPI calls and traced these values for the first endpoint in my Fireface 400 setup:
GetValue (PKEY_Device_FriendlyName,…) == "Speakers (RME Fireface 400)"
GetValue (PKEY_Device_DeviceDesc,…) == “Speakers”
GetValue (PKEY_DeviceInterface_FriendlyName,…) == “RME Fireface 400”
So here is what I am thinking needs to be done, so far:
- Change WASAPIAudioIODeviceType to allow for an array of active endpoints for both input and output
- Modify scanForDevices() to identify unique instances of the PKEY_DeviceInterface_FriendlyName and treat the whole set of endpoints as a single device
- Add code to build a list of input or output channels for a given PKEY_DeviceInterface_FriendlyName by enumerating all the endpoints, collecting the ones that match
- Change the input and output channel names to use PKEY_Device_DeviceDesc instead of PKEY_Device_FriendlyName
How does this sound Jules?
Is there anyone with knowledge that can chime in and let me know if I’m going in the right direction? I don’t want to waste my time on a dead end because this WASAPI COM interface is really bulky and clumsy to work with…