Topic: Fireface shows up as separate devices when enumerated via WASAPI

When enumerating WASAPI devices, each channel pair on the Fireface shows up as a different device:

http://rawmaterialsoftware.com/download/file.php?id=234

But other sound cards (an external USB sound card in this case) show up as a single device:

http://rawmaterialsoftware.com/download/file.php?id=248

I know that this might not directly be a Fireface issue, but something is definitely different about the Fireface and the way it exposes it's available endpoints both under WASAPI, and DirectSound. There's a discussion about it in the Juce forum:

http://rawmaterialsoftware.com/viewtopi … amp;t=6836

If any RME developers can weigh in on this, or even provide a pointer on fixing the implementation of enumerating the WASAPI/DirectSound devices to correctly recognize the Fireface as a single device, that would be AWESOME!!!!

Re: Fireface shows up as separate devices when enumerated via WASAPI

You could try the v2 drivers which offered an "Interlaced" mode switch in their settings.

Re: Fireface shows up as separate devices when enumerated via WASAPI

Timur wrote:

You could try the v2 drivers which offered an "Interlaced" mode switch in their settings.

That doesn't really address the question of why some software packages see the FireFace channels as different devices.

4

Re: Fireface shows up as separate devices when enumerated via WASAPI

Not some, all. One can design devices as mono channels, stereo pairs or interleaved bundles. We decided to use stereo pairs as this looked like the most compatible solution.

Regards
Matthias Carstens
RME

Re: Fireface shows up as separate devices when enumerated via WASAPI

How do I improve the Juce C++ implementation of WASAPI devices so that it 1) correctly recognizes the different Fireface channels as belonging to a single device, and 2) allows caller's to utilize more than 2 channels of input and output simultaneously?

I'm paying money for this...anyone interested please send me a message and I can re-post the job on elance. If you know WASAPI/DirectSound it should take a day or two at most.

Re: Fireface shows up as separate devices when enumerated via WASAPI

I meant "Interleaved", sorry for the confusion. And it does provide an answer in that it offers one single 8 channel WDM device, if I am not mistaken.

If that works with your WASAPI implementation is to be tried, but as far as I remember I ran WASAPI on Vista with v2 drivers once.

Re: Fireface shows up as separate devices when enumerated via WASAPI

I see. But I need a solution that works for all the users of my software, not just on my personal machine. Other apps that I run on my computer (Traktor for instance) see the Fireface as one hardware device with multiple channels.

So again, what do I change in this C++ source file to make it work correctly, regardless of which Fireface driver is in use:

http://juce.git.sourceforge.net/git/git … pp;hb=HEAD

Re: Fireface shows up as separate devices when enumerated via WASAPI

Sorry, I misunderstood you as the user of your software, not the developer. That's beyond my scope then.

9

Re: Fireface shows up as separate devices when enumerated via WASAPI

We are no application programmers therefore can not help directly. But it might be interesting to know that you can use WASAPI with Foobar, select a stereo device (it also lists only such), but play back an 8-channel interleaved file correctly. You might find the info that you need over there...

Regards
Matthias Carstens
RME

10 (edited by kasaudio 2011-04-04 11:23:46)

Re: Fireface shows up as separate devices when enumerated via WASAPI

As audio software developer I would not recommend struggling with wasapi as this will not lead to comprehensive and robust solution;

DirectSound, MME and WASAPI show Fireface as many 2 channel devices, that is not gonna change.

I recommend implementation of some sort of composite audio device in your program, where user can select input and output channels from different interfaces. As consumer audio devices don't have hardware level synchronisation, some sort of "jitter" filter must be implented. You are also challenged with different sample rates of each device in composite. Consider also, you can not have more than one asio instance within the program.

When you are shure that all devices in composite are synched (in case of joining WASAPI fireface devices) user should also have the option to disable all jitter and resampling filters.

I did it so in my application and it works perfect that way.

hope it helps

11 (edited by kasaudio 2011-04-04 10:23:15)

Re: Fireface shows up as separate devices when enumerated via WASAPI

I forgot to mention one thing:

I'm paying money for this...anyone interested please send me a message and I can re-post the job on elance. If you know WASAPI/DirectSound it should take a day or two at most.

There is no chance anyone can do anything (good) on this in two days!

Re: Fireface shows up as separate devices when enumerated via WASAPI

kasaudio wrote:

There is no chance anyone can do anything (good) on this in two days!

http://30gms.com/images/uploads/good_cheap_fast.jpg
cool

Regards
Daniel Fuchs
RME

Re: Fireface shows up as separate devices when enumerated via WASAPI

kasaudio wrote:

I forgot to mention one thing:

I'm paying money for this...anyone interested please send me a message and I can re-post the job on elance. If you know WASAPI/DirectSound it should take a day or two at most.

There is no chance anyone can do anything (good) on this in two days!

Untrue - the WASAPI/DirectSound code is already written, tested, and working great except that it doesn't combine endpoints from the same device. It just needs to be upgraded. Anyone who is knowledgable with WASAPI should have no trouble with it.

Re: Fireface shows up as separate devices when enumerated via WASAPI

there are no endpoints from the same device to combine -> there are more devices to combine.

Re: Fireface shows up as separate devices when enumerated via WASAPI

kasaudio wrote:

there are no endpoints from the same device to combine -> there are more devices to combine.

Lets stop beating around the bush, here's the bottom line:

1) Traktor works correctly on my machine with my FireFace 400 (it sees all the channels as one device)

2) Juce does not. Source code is here: http://juce.git.sourceforge.net/git/git … pp;hb=HEAD

Now can someone knowledgeable please help me fix this? I can repost the elance job for any interested party.

16 (edited by kasaudio 2011-04-05 13:09:05)

Re: Fireface shows up as separate devices when enumerated via WASAPI

Agree about traktor showing one device. Not only with WASAPI but higher level DirectSound or MME also. But did you ask yourself how they did it so?

As written in my post above, there is some kind of composite audio device implented in the traktor code (I'm quite shure of that). If devices in composite belong to the same hardware in the end it is ok to assume they are synched on hw level -> no jitter filters needed. If they all run at the same sample rate -> no resampling nedded. Aggregating such devices (with such criteria) is not a hard work at all. The solution I propose will work not only for wasapi but for DS and MME also.

Collect devices names, those with the same root in name will most probably belong to the same hardware. In each "buffer callback" routine (of devices treated as from the same hardware) copy samples from/to working buffer. When all devices filled/drained working bufer, push that buffer to your code through "buffer callback" routine. That is very simple solution that works. But still I'm 100% shure, it will take more than 2 days to implement it that way.:-)

Re: Fireface shows up as separate devices when enumerated via WASAPI

kasaudio wrote:

Agree about traktor showing one device. Not only with WASAPI but higher level DirectSound or MME also. But did you ask yourself how they did it so?

As written in my post above, there is some kind of composite audio device implented in the traktor code (I'm quite shure of that). If devices in composite belong to the same hardware in the end it is ok to assume they are synched on hw level -> no jitter filters needed. If they all run at the same sample rate -> no resampling nedded. Aggregating such devices (with such criteria) is not a hard work at all. The solution I propose will work not only for wasapi but for DS and MME also.

Collect devices names, those with the same root in name will most probably belong to the same hardware. In each "buffer callback" routine (of devices treated as from the same hardware) copy samples from/to working buffer. When all devices filled/drained working bufer, push that buffer to your code through "buffer callback" routine. That is very simple solution that works. But still I'm 100% shure, it will take more than 2 days to implement it that way.:-)

No I didn't ask myself because I already know how they do it. Exactly as you described!

So who is going to implement this for me? You? Did you want to bid on the job?

18 (edited by kasaudio 2011-04-05 17:31:46)

Re: Fireface shows up as separate devices when enumerated via WASAPI

I did a quick look at the source code -> clean and nicely written. Physical implementation of the problem above is a minor work, while embedding it in the code/framework is the major. According to this, I think this will be best done by someoene who is the most familiar with Juce development - You. So I kindly reject cooperation on this job.

I also think there is no need to do anything on this. Juice will not have any higher value if it will see FF400 as one device. If this is ok for most DAW's why not for juce? Profis will still use asio if possible. This aspect is valid for win platform only, not other platforms covered by juce.

regards, kasaudio

Re: Fireface shows up as separate devices when enumerated via WASAPI

kasaudio wrote:

I did a quick look at the source code -> clean and nicely written. Physical implementation of the problem above is a minor work, while embedding it in the code/framework is the major. According to this, I think this will be best done by someoene who is the most familiar with Juce development - You. So I kindly reject cooperation on this job.

I also think there is no need to do anything on this. Juice will not have any higher value if it will see FF400 as one device. If this is ok for most DAW's why not for juce? Profis will still use asio if possible. This aspect is valid for win platform only, not other platforms covered by juce.

regards, kasaudio

Juce is just a library. My product is targeted towards non-professionals. Having WASAPI would be really handy especially for shared mode.

Re: Fireface shows up as separate devices when enumerated via WASAPI

Apologies for resurrecting this thread, but this now seems to be an important option for us (FireFace and BabyFace users) using Psychtoolbox. Psychtoolbox 3.0.15+ has dropped support for ASIO due to licensing issues:

https://github.com/Psychtoolbox-3/Psych … io-Devices

However, it allows channel mappings for multi-channel WASAPI devices, so this could be a nearly drop-in replacement if the sound card showed up as a single, multi-channel device. Opening multiple streams and trying to coordinate them is pretty much a non-starter for high-channel-count configurations for PTB users, so we're now in a bit of a pickle sad

Is there any possibility to see the FireFace and BabyFace show up as a single, multi-channel WASAPI device in the future?

If not, I'll see if it's something that can in principle be fixed at the Psychtoolbox end.