Route all system inputs to all system outputs, OSC controlled fader for each connection

Hi guys

I’m dreaming of an audio setup in my home, where each room has a set of speakers which is in some way connected to a main server, and some rooms also have audio inputs that are connected to the same server (for example a chromecast audio, a gaming pc, a TV, the doorbell). The connections could be through simple analog cables, or in a more advanced form like Dante.

The server then has X ASIO input devices and Y ASIO output devices. What I would like to do then is play the sound from every input device on every output device, and then controlling how loud each input is on each output through an OSC controlled fader.

I’m currently searching for software that can do exactly this, and stumbled upon Ardour, which seems to be able to do some mixing and is also controllable through OSC. Would Ardour be able to do what I want? It would’nt have to record anything. It would just have to pass audio from the inputs, to the X times Y faders, to the outputs with as low latency as possible.

If yes, do you have some hints on how it would be done?
If not, do you know software that would fit that role?

Thanks guys!

I’ve been wanting to do the same. My plan is to use a Raspberry Pi with a sound card that gives 6 inputs and 8 outputs (https://www.amazon.com/Octo-channel-sound-card-Raspberry/dp/B06Y3PZ6MF), using wire for the connections.

I haven’t thought of the software, since my initial idea was to just connect everything at 100%, but I like your idea of managing a matrix of inputs x outputs. Ardour would definitely work, but it might be overkill.

I first thought of a 8 port USB Hub with 8 of these plugged in: , which would result in a 16x16 channels :smiley:

But I’ll go for a full Dante setup now, because I already have cat 7 cabling to every room, and a big PoE switch, which I can use to power Dante speakers all over my appartment. Together with the dante virtual sound card, the only thing I’ll need is a software to do the routing/mixing.

You say Ardour would definitely work. Can you maybe point me into a direction on how it could be done? And if it’s overkill, do you know any lightweight software that is capable of doing this? The key thing for me is, that i can change the faders through OSC, or any other network protocol, so that I can control the volume from anywhere (app, wall switches etc.)

Using Ardour, my understanding is that you would definitely want to use a single sound interface. While there are ways of connecting multiple sound cards, I don’t think it’s reliable, and trying to do that with 8 interfaces would be hard.

Assuming you have a single interface, you could create one track for each input and one track for each output. Each input tracks is connected to all of the other output tracks. Now you have X + Y faders, where X is the number of inputs and Y, of outputs, and you can manage them through OSC. It’s not a grid, but you can control the volume of each source and the output volume in each speaker this way.

An alternative to Ardour is the Non-mixer (http://non.tuxfamily.org/wiki/Non%20Mixer). It also supports OSC, and is simply a mixer, so it’s probably lighter than running Ardour.

USB soundcards behind a USB hub are usually always problematic. Besides all those would run independently: Each soundcard would have a different clock and there is need for adaptive software re-sampling to synchronize them.

At this point in time Ardour does not support multiple soundcards. And even if you don’t end up using Ardour, a single soundcard or soundcards that can be word-clock sync’ed is preferable.

Some devices e.g. the Focusrite N i M (e.g. 18i6) do feature a hardware based NxM matrix mixer). As for software based matrix-mixers that run on Windows with ASIO… I don’t know any. I also think that Ardour is probably overkill for this, but here’s a short howto anyway:

For a N X N matrix mixer setup in Ardour: I’d use busses and aux-sends. e.g. in A simple 2x2 setup. create 4 busses. two for input, two for output and then add four aux-sends:

After enabling OSC you can control the sends like

oscsend osc.udp://localhost:3819 /strip/send/gain iif 1 2 -6.0

Here: from source-bus 1, 2nd send (destination = out 2) use -6dB.

Thanks guys!

The thing is, if I go with Dante (which I really would like to, since it’s friggin awesome) then I’m bound to windows (which I absolutely do not like) to run the matrix mixer, since the dante virtual sound card is not available for linux, and there are almost no dante cards that support linux. And if they do, they’re expensive. For that money, I could also just buy a matrix mixer DSP, like the Xilica Solaro FR1 so that I don’t need a software mixer anymore.

But the thing is, if I can do it through free & open source software, I’d like to do it with that.

Luckily, the Dante virtual sound card acts as one device with 64x64 channels when in ASIO mode, so it would work with Ardour. I’m definitely gonna try your solution with busses, Robin. If that works, then I don’t care if it’s overkill :smiley:

The reason why it has to be a matrix, and not X+Y, like Roberto suggested, is that it is not flexible enough. If I want the music to be running in all rooms but the bedroom, but the doorbell to still reach all rooms, it would not be possible.

Anyhow, that’s gonna be a crazy and funny project :smiley:

@VanCoding

So to be honest this sounds like reinventing the wheel from my standpoint. You can get rackmount DSP mixers that can do this for not much more than a computer these days honestly. That being said…

There are a couple of Dante devices that are class compliant USB interfaces that output direct to a Dante network, and similarly you have device that take audio and convert to Dante a couple of channels at a time. End result is you could put whatever you wanted on Dante, and while Dante itself does not provide a true mixer, a computer running Dante Controller would allow for matrix switching from any device to any device.

But let me reiterate though that I truly believe you are trying to reinvent the wheel for not much benefit here. If you enjoy the challenge and this is a hobby for you, sure by all means have fun. There are lots of options here. But if you are truly looking for a simple to use setup, you are better off purchasing a DSP mixer built for this that can be network controlled (Or RS232 or RS485) and sending said mixer commands for this purpose.

Now keep in mind, this is coming from a guy currently looking into how to get the audio from a PS4 and phone conversation for chat mixed together effectively in his living room for playing with his brothers… :slight_smile:

And not even going that far … just installing an RME multichannel card and using totalmix will give you matrix mixing/routing in the NxN sense that you seem interested in, all with zero DSP and no chance of signal interruptions because no signal will go via the CPU. You can write scripts to control the matrix mixer too.

@Seablade This project is mainly about 2 things: fun and having full control over all audio devices in my home, without rewiring things all the time. The result doesn’t really have to be professional. As long as it’s fun to set up and works reasonably good in the end, that’ll be totally fine :slight_smile:

So to be honest this sounds like reinventing the wheel from my standpoint. You can get rackmount DSP mixers that can do this for not much more than a computer these days honestly.

Even if it’ll work with Ardour and all, that is most likely going to be my final solution, yes. The Xilica DSP looks so nice. The only thing preventing me from buying it right now is its price :smiley: And I’m really curious if I could do it myself for free :wink:

@paul It’s funny, because there was a moment in that I tought that I’ll go with the RME Digiface Dante and TotalMix. But RME not supporting it for linux was kind of a KO criteria for me. I thought, if I have to use Windows anyway, I could also just use the Dante Virtual Sound Card, and look for an alternative software. But yeah, then it goes through the CPU… Let’s see if that’s going to be a problem. Aren’t you curious as well? :smiley:

The good part is, if the Ardour solution is not going to work, I can just buy a hardware mixer without changing anything else.

Thanks guys for your input! That’s really appreciated.

EDIT
@seablade the problem with using just Dante controller is, that it would be horribly inefficient. Every input sending to every output would kill my network. Plus, I can’t control the volume with it and it has no API as well. But i thought about it as well :stuck_out_tongue:

@VanCoding

While your point about volume control can be good, (Depends on your exact setup) I will correct you on the every input to every output killing the network. A typical gigabit network can handle thousands of channels with no issue. Trust me, I have designed and installed MUCH larger systems than you should ever need in a house (640k of Ram anyone?) and a single gigabit link can handle a lot.

I am curious about the Digiface Dante, while RME does not support it, a lot of their interfaces do work on Linux, in no small part due to a lot of the work Paul did a long time back, that has been maintained by others. As a result I am curious if it would work with Linux with the existing RME drivers or not personally.

Guys, using Ardour as @x42 described it works extremely good! I’ve now a minimal setup of 4 inputs and 4 outputs, and I can control it nicely through OSC.

The only thing that’s obiously not optimal, is that Ardour currently does not start with windows and open my project automatically. There are some manual steps required to bring the system back online when the server reboots. But that’s not a problem for now.

I think I’m rather gonna spend the remaining money on some more Dante AVIOs and good speakers and then collect some experience with the system first.

Thank you guys! What a great software!

That can be solved… you can specify the project to load on the commandline (cmd.exe autolaunch)

C:\Program Files\Ardour\bin\ardour5.exe C:\path\to\session\ [session-snapshot-name]

If you use JACK, ardour can directly connect to a running jack-instance (no questions asked). Alternatively there’s Preferences > General > Engine > Try autolaunch engine (that will try to use the most recently used soundcard with the last used settings).

There is also a headless version of Ardour, that doesn’t have a GUI but can respond to OSC. Once you have a session set up and ready, that would be an option, too. However it’ll require building Ardour from source. Neither Linux distros, or ardour-binaries ship “hardour” nor “Arlua” by default.

I’ve seen that in the source on GitHub, but was not sure if it was what i thought it was.
I’ll eventually try to build it myself then, but I suppose that’s not gonna be easy on Windows. But if it really works, that would be awesome! :slight_smile:

Well, now there’s a good reason to just include it with windows builds somehow.

It is actually compiled when building ardour, but the .exe is not included with the installer… when you get to the stage where this will be useful, I’ll zip it up somehow.