Migrating from ASIO support

RME FireFace and BabyFace cards on Windows show up as a single, multi-channel audio device in ASIO. However, using the latest (master) PTB ASIO is not an option. The substitute WASAPI show devices as being separate:


$ python -c "import pprint; import psychtoolbox.audio; pprint.pprint(psychtoolbox.audio.get_devices(13))"

PTB-INFO: Using modified PortAudio V19.6.0-devel, revision unknown
...

{'DefaultSampleRate': 48000.0,
 'DeviceIndex': 9.0,
 'DeviceName': 'Speakers (RME Babyface Pro)',
 'HighInputLatency': 0.0,
 'HighOutputLatency': 0.01,
 'HostAudioAPIId': 13.0,
 'HostAudioAPIName': 'Windows WASAPI',
 'LowInputLatency': 0.0,
 'LowOutputLatency': 0.003,
 'NrInputChannels': 0.0,
 'NrOutputChannels': 2.0},
{'DefaultSampleRate': 48000.0,
 'DeviceIndex': 10.0,
 'DeviceName': 'Analog (3+4) (RME Babyface Pro)',
 'HighInputLatency': 0.0,
 'HighOutputLatency': 0.01,
 'HostAudioAPIId': 13.0,

 'HostAudioAPIName': 'Windows WASAPI',
 'LowInputLatency': 0.0,
 'LowOutputLatency': 0.003,
 'NrInputChannels': 0.0,
 'NrOutputChannels': 2.0},

So removal of ASIO is a backward incompatible change, as we can no longer send multi-channel audio using single load-buffer and start commands (even with the WASAPI channel-mapping options, AFAIK).


I've pinged the RME folks about the possibility of having it show up as a single multi-channel device, but given that the original issue is almost 10 years old I'm not optimistic:


https://www.forum.rme-audio.de/viewtopic.php?id=10688


In that thread they mention the possibility of the end software recognizing that separate WASAPI endpoints are all really part of the same device and treating them as a single device. Is this the sort of thing that could be done in Psychtoolbox? I imagine it's not trivial to do so, but in principle it (along with the WASAPI channel-mapping options) would allow working around this problem.


Or is there some other solution multi-channel RME users have found?

Hello,
I am also experiencing a similar issue (instead of 1 single multi channel device, I have 4 separated individual devices) and was wondering if you have found a solution?
Thanks!

The RME forum thread referenced by the original poster suggests that some “v2 drivers” for those sound cards may have some switch in their setup GUI somewhere which allows you to switch the sound card into some “interleaved” mode, and that that may expose the device as a multi-channel device instead of multiple stereo devices. Maybe that’s something to look for, or to ask about again on the RME forum.

Another venue would be to implement multi-channel support in the Wasapi backend of the Portaudio sound library. PsychPortAudio itself doesn’t need modifications, the code would have to be contributed to Portaudio. I’d expect that to be a substantial amount of work: http://portaudio.com

I will also mention that although due to licensing issues, Psychtoolbox PsychPortAudio driver does no longer support ASIO (Disclaimer: “ASIO is a trademark and software of Steinberg Media Technologies GmbH.”) specific features and tuning, our driver will allow basic use of any audio backend that is supported by the installed portaudio_x64.dll library.

Our own portaudio_x64.dll, which is stored in the Psychtoolbox/PsychSound/ folder as Psychtoolbox/PsychSound/portaudio_x64.dll does not support ASIO anymore, because dealing with Steinberg’s new and very open-source hostile licenses and trademark rules is not an option. Dealing with them once created enough nightmares for me for a lifetime.

However, if you would follow the instructions of the Portaudio project (not sure if those are still up to date) to build your own private portaudio_x64.dll from the official Portaudio source code, integrating the proprietary ASIO SDK into it, and replace our portaudio_x64.dll by that self-build DLL, then the PsychPortAudio driver would probably enumerate those ASIO devices in PsychPortAudio(‘GetDevices’) and would allow you to manually select such a device for basic capture and playback. Ofc. then you would be bound by the fun Steinberg ASIO license and good luck with that.

Another option would be to see how well those sound cards work under Linux. Maybe that would solve the problem in an elegant way, i don’t have any practical experience with RME cards under Linux yet.