Audio USB exposes only two channels on Windows

Discussions about USB Audio on XMOS devices
breadbanana
Junior Member
Posts: 7
Joined: Mon Apr 03, 2023 10:08 pm

Audio USB exposes only two channels on Windows

Post by breadbanana »

Hello!

I have an 8-out, 6-in board working perfectly over ASIO. We have deployed several units successfully without any issues, using Asio4All2. I believe I have configured everything correctly in xua_conf.h (as my units have been running 24/7 without problems). The setup is straightforward: no Mixer Core, no ADAT, no SPDIF, no MIDI—everything on I2S.

It works flawlessly on Linux. However, on Windows, it only exposes one stereo audio endpoint for playback (speaker) and one for recording (microphone).

My question is: Does this framework support exposing more endpoints? Ideally, I would like an endpoint for every two channels.

Why? Some of my end users’ applications do not support ASIO, so they need access via standard Windows devices. Since some endpoints are already exposed, I assume it might be possible to expose more. I have seen other ASIO boards, like some from Focusrite, doing something similar.

Is this something the XMOS audio MC framework can do? Is it non-trivial? Any hints on where to look or how to achieve this would be greatly appreciated!

Thanks!
danielp
Member
Posts: 8
Joined: Tue Jul 16, 2024 9:52 am
Location: Bristol, UK

Post by danielp »

When not using ASIO4ALL, which Windows audio interface do you use? MME is limited to two channels, but WASAPI can do more than stereo.

The 8-in, 8-out analogue config (2AMi8o8xxxxxx) is tested with the Microsoft usbaudio2 driver. I am able to record and playback 8 channels using Audacity with WASAPI.
User avatar
Ross
Verified
XCore Legend
Posts: 1071
Joined: Thu Dec 10, 2009 9:20 pm
Location: Bristol, UK

Post by Ross »

Careful using the term "endpoint" when talking about usb audio devices - it has a meaning in the USB world (unless that was your actual meaning ;)
Technical Director @ XMOS. Opinions expressed are my own
breadbanana
Junior Member
Posts: 7
Joined: Mon Apr 03, 2023 10:08 pm

Post by breadbanana »

Ross wrote: Mon Jul 22, 2024 2:40 pm Careful using the term "endpoint" when talking about usb audio devices - it has a meaning in the USB world (unless that was your actual meaning ;)
Yes, I’m aware of the multiple interpretation issue, but in this case, I think there may be a relationship.
From the GitHub source code, it exposes two Windows audio interfaces: one for playback and one for recording, both with 2 channels, and both working perfectly based on my experience so far.
Does the framework permit me to expose more stereo audio interfaces, for example, channels 3/4? If not, what would be the way to do this, or at least, what is a good starting point to look for in both the source and literature?
danielp wrote: Mon Jul 22, 2024 9:48 am When not using ASIO4ALL, which Windows audio interface do you use? MME is limited to two channels, but WASAPI can do more than stereo.

The 8-in, 8-out analogue config (2AMi8o8xxxxxx) is tested with the Microsoft usbaudio2 driver. I am able to record and playback 8 channels using Audacity with WASAPI.
When I plug it into Windows, it exposes channels 1/2 from the DAC/ADC to a Speaker/Microphone Audio interface.
I’m aware that WASAPI works well with Audacity, and I believe there is a build that supports ASIO too. However, some of my end users’ tools are completely proprietary, and I’ve only seen them configured as MME clients.
To be honest, I’ve never implemented audio software in Windows, so I’m not sure if a software that supports an MME audio device automatically supports a WASAPI audio device. My hunch is that it doesn’t.

So what i'm looking for: to expose 4 windows audio device with two channels each. is that possible?
Does this make anymore sense? Anything that points me to the right direction is greatly apreciated!
Thanks!
User avatar
Ross
Verified
XCore Legend
Posts: 1071
Joined: Thu Dec 10, 2009 9:20 pm
Location: Bristol, UK

Post by Ross »

breadbanana wrote: Mon Jul 22, 2024 9:31 pm Yes, I’m aware of the multiple interpretation issue, but in this case, I think there may be a relationship.
From the GitHub source code, it exposes two Windows audio interfaces: one for playback and one for recording, both with 2 channels, and both working perfectly based on my experience so far.
Does the framework permit me to expose more stereo audio interfaces, for example, channels 3/4? If not, what would be the way to do this, or at least, what is a good starting point to look for in both the source and literature?
No, the code doesn't support this, it supports a single streaming interface in each direction, as you suggest. Though I do recall customer development in this multiple streaming interfaces area in the distant past. Windows will treat this as two separate audio devices, I don't know an application that will allow streaming to two interfaces simultaneously, if that is your goal?
breadbanana wrote: Mon Jul 22, 2024 9:31 pm So what i'm looking for: to expose 4 windows audio device with two channels each. is that possible?
Does this make anymore sense? Anything that points me to the right direction is greatly apreciated!
Thanks!
Understand, I'm interested in the use case for such a device. Previous efforts are typically based around wanting a separate digital interface (S/PDIF, for example)

Edit: I just re-read your post on priority MME based software, understand reasoning now - is this capable of using multiple interface simultaneously though? This would seem like a sticking point.
Technical Director @ XMOS. Opinions expressed are my own
breadbanana
Junior Member
Posts: 7
Joined: Mon Apr 03, 2023 10:08 pm

Post by breadbanana »

Ross wrote: Mon Jul 22, 2024 9:44 pm
breadbanana wrote: Mon Jul 22, 2024 9:31 pm Yes, I’m aware of the multiple interpretation issue, but in this case, I think there may be a relationship.
From the GitHub source code, it exposes two Windows audio interfaces: one for playback and one for recording, both with 2 channels, and both working perfectly based on my experience so far.
Does the framework permit me to expose more stereo audio interfaces, for example, channels 3/4? If not, what would be the way to do this, or at least, what is a good starting point to look for in both the source and literature?
No, the code doesn't support this, it supports a single streaming interface in each direction, as you suggest. Though I do recall customer development in this multiple streaming interfaces area in the distant past. Windows will treat this as two separate audio devices, I don't know an application that will allow streaming to two interfaces simultaneously, if that is your goal?
This customer uses custom-written applications to fit their needs. The device I'm working with is an upgrade for an older analog device from the 80s or 90s, pretty much an audio mixer. They have setups on channels 1/2, 3/4, and 5/6, each set up differently for various software applications. For example, one setup is used solely for archiving, so some tracks aren't needed or are region-specific. So in this case i'm really looking for to work with multiple separated stereo channels this would embrance this and some other simple use cases the end users might have.

Some of these software applications are quite simple, but when I visited their place, I noticed each piece of software in use was configured with an stereo MME device.

I'm just looking ahead and finding a solution before the issues arise. Initially, I assumed ASIO or at least WASAPI was more universal, but it appears I was mistaken!
Ross wrote: Mon Jul 22, 2024 9:44 pm
breadbanana wrote: Mon Jul 22, 2024 9:31 pm So what i'm looking for: to expose 4 windows audio device with two channels each. is that possible?
Does this make anymore sense? Anything that points me to the right direction is greatly apreciated!
Thanks!
Understand, I'm interested in the use case for such a device. Previous efforts are typically based around wanting a separate digital interface (S/PDIF, for example)
Yeah, this is quite an embedded solution for the company that maintains these older devices. They have a long list of end users busting equipments os destroying the device performace because wrong usage of external audio boards, his solution? make a dedicated audio usb board for the device.
Passing the inital shock of xc language, i'm having a lot of fun with XMOS, it is a very interesting device, and the framework is amazing.

I'm pretty sure i saw some entry tier USB interface like Focusrite or something like that, implementing this solution. So you could use each pair of channels trough their windows audio device, or you could use it trough ASIO after instaling the manufacturers driver.
Ross wrote: Mon Jul 22, 2024 9:44 pm Edit: I just re-read your post on priority MME based software, understand reasoning now - is this capable of using multiple interface simultaneously though? This would seem like a sticking point.
This is exactly my point! So now i know the framework is not ready for it... right now, i'm tottaly not ready to tackle this challenge, i have lots of years in embedded, but not so much in USB, and your framework is anything but trivial. As it is so generic i'm geting acquanted to it. But i would love to have at least a starting point to where the black magic happens, what paths should i follow if some day, in the really near future I adventure on this task?

Thanks!
MaximLiadov
XCore Addict
Posts: 143
Joined: Mon Apr 16, 2018 9:14 am

Post by MaximLiadov »

You could ask Thesycon. I saw that they offer some additional virtual MME devices as an extension to their standard license.
breadbanana
Junior Member
Posts: 7
Joined: Mon Apr 03, 2023 10:08 pm

Post by breadbanana »

MaximLiadov wrote: Tue Jul 23, 2024 2:08 pm You could ask Thesycon. I saw that they offer some additional virtual MME devices as an extension to their standard license.
Yeah using a virtual MME device is something I have on my toolkit already, i don't love it though.
I did some test, with good enough results.
But in my way of viewing the product, I have a perfect adequated device capable of doing it, the XMOS MCU, why should I delegate to OS if i can solve it on my device?
If it is possible, the bare minimum I can do is at least give a shot!
But this solution is something I consider as a short term solution, but i would like a more permanent by the standards solution.
MaximLiadov
XCore Addict
Posts: 143
Joined: Mon Apr 16, 2018 9:14 am

Post by MaximLiadov »

I see nothing wrong with virtual devices model on driver side. It already exists, it does work.

I see no shortcuts to do this easily on XMOS. Not sure if you can just duplicate all XUD code for another device instance and how many hardware resources it will take. Sounds a bit crazy to me. I faced all the time with compiler issues here and there, like .xc source file is too big to compile.

PC, on the other hand, has unlimited processing power, memory, and convenient, well-documented compiling and debugging tools.