What's wrong with digital (or analog) multiplexers for this? 74HCT4053 or something like that?
They might pop when the switching is happening, sure, maybe if you do a break before make, or mute the DAC while switching its avoided.
Sorry. I should have explained, but didn't want to drone on.
The sources and outputs are simultaneous, not selected or routed. The sources are not (necessarily) music or media, but rather "interface" and "notification". Specifically I have several desktop computers, each of which has audio output. I also have audio from my phone, from projects, etc.
I also have wireless audio, phone,
headsets, headphones.
For outputs I currently have a set of desktop speakers, a custom wired headphone amp, several wireless headphones.
The problem I am trying to address is enabling the ability to have some or most of those audio sources active and the ability to "send" them to any or all outputs. Without requiring any one of them to be on, present or active for it to work.
For example, I'm using the little low power desktop at the moment, because I'm "in work" on the work laptop, I'm not going be needing the 110W power hungry gaming PC to be on. So I have to, each morning, unplug the audio from the main PC and plug it into the desktop and accept all the crap noise that introduces. WHen I finish work and want to game I have to switch back. Similarly the work laptop has audio output which would be "nice to have" always routed for notifications, even if I am listening to extremely loud music from the other PC. I'd still like that "Ding Ding", when the boss phones me on teams.
If I ran the requirements through a methodology like DSDM/Agile and Moscow I "could" accept initial versions require some switching and are therefore not N->N simultaneous. I could simplify the design a lot by focusing on specific use cases for example. I mean, it is actually extremely unlikely that all inputs will be active and assigned to all outputs. Extremely unlikely. However, I prefer to let designs form themselves, so I start with very loose but ambitious requirement. This is what spawned the idea of normalizing and multilpexing all the inputs onto 2 internal buses. Using one or two beefy ARM micros to do the EQ /processing on those and again output them on one output bus. The outputs then complete the sweety wrapper pattern by feeding off one bus.
Inputs are gained and assigned (by the user) to Bus A or Bus B. Then get processed by Processor A or B and output on output bus A or B respectively. Each output then can select Bus A, Bus B or MUTE... and final gain.
That one line sums up the design. Throw a bunch of cheap MCUs at it, each having a relatively simple task, spread out the load, "bus up" for speed. Adding a switching layer such that, say, only 1 of each pair of I2S inputs on a front end is active at a time and I just use a micro + multiplexer or line switcher circuits as you suggest to digitally multiplex them based on user input of which is active. It would lower the number of streams having to be shipped to the processing bus. Lowering the number of I2S streams to marshal... removing the need for SPI. Would lower the BOM too a I could use a single F401 or even an F103 to manage the line switching for all 6 or 8 inputs.
To be honest, one thing the F411 had going for it was it could provide a USB Audio interface itself without additional hardware. However after much fighting and research I decided that STM32 USB libraries are ... well, life is just too short for that TBO. Using a hardware USB->I2S will hopefully be a lot simplier, it seems that way so far. So using F411s as front-ends lost that advantage ... could be on the cusp.
What I'm resisting is taking the easy turn off the road to my ultimate goal by accepting something that "will do" or "will do 90%" of what I wanted, but it was just easier. I'm resisting it, because I know I'll just drop the project and the temporary permenant solution will remain.
It's bound to end up the case that a primary source like an optical spdif from the main PC is paired with an auxilary input like Line In... and I will want both on. I can stagger and arrange pairs, but I expect it will actually increase the number of front end pairs to get N of type -> N.
One worry about trying to pack it all into one STM32H7 MCU is that the firmware problems involved in doing it all together in one place could get pretty messy and thus buggy. Splitting it up into "componentised" microcontroller sub modules allows me to divide the problem into smaller chunks, even if it requires a bit more work and considerably increase over minimal BOM.