I built something of this nature back in 2016, refined it a bit since then, and used it for any situation where I did a review (or a comparison) that talked about blind testing (e.g. the Magni 3+/Heresy comparison).
Here’s are the original comments I made on the thing, though it has gotten a bit more sophisticated since then:
BTAB – Blind-Test-Assist-Box:
The “Blind-Test-Assist-Box” (BTAB), apart from desperately needing a better name/acronym, is a little thing I’ve been playing with for a few months now.
It’s NOT intended to settle any arguments in the objective-vs-subjective vein, at least not from my perspective (I’d rather listen to music than debate those points), though how you might use it is, if I get to a point where it’s something “not just for me”, is, of course, up to you.
All it really is a “sensible”, simple, tool to more easily/reliably (urk!) facilitate blind and ABX testing for source components.
While there are certainly tools that enable such things today, they are generally software-side solutions, which aren’t very useful if the source you want to compare isn’t a computer-based player and, in the case of the most readily available (say, Foobar2000 with an ABX module), it’s a Windows-centric thing.
It also typically forces you to have USB somewhere in the audio chain as most computers don’t have any other way to talk to a DAC.
Anyway, BTAB does a few things:
Digital Distribution Point:
Feed it a digital input and it’ll give you two outputs of the same signal, allowing you to connect to two digital devices at once and have them playing in synchronization form the source. It allows you to adjust timing between delivery to those two sources to permit overcoming any latency from internal buffering/re-clocking schemes as needed. You don’t have to use this stage … you can just use the analog inputs (see next point) instead if you prefer.
There are two outputs each for AES/EBU XLR, TOSLINK, COAX and USB (added in the last week). So you can compare like-interfaces, or differential ones.
And it can be set to switch which digital output-type it drives instead of switching sources if you like. This is intended to allow comparison of different interfaces (e.g. AES/EBU vs. USB) on the same DAC. It is also likely to be of marginal usefulness, since not all DACs will switch which input they’re observing based solely on presence/absence of a signal on one of them (Bifrost doesn’t, for example). But it was a cheaper software feature to add “just in case”.
Analog Inputs & Level Matching:
It can take two stereo analog inputs and provides a push-button way to automatically level-match them to within 0.1 dB (quite a lot better than you’ll manage by ear and beyond the realistic capability of many SPL meters), and then provides a single, switched, output to an amplifier.
Multiple Comparison Modes:
Right now it provides for a couple of comparison modes, with a simple control to allow the user to indicate when they hear a difference.
One mode simply repeats a selectable passage of music … you mark a start and end point, which it stores in an internal buffer, and then it’ll repeatedly play that while switching sources. The other simply passes through whatever is coming from the source and switches sources randomly there. This allow you see if differences are detectable in-stream or between repeated passages. Then there’s an option to mute between switches or make the changeover seamless (at least I think it’s seamless).
It logs what source is playing and when, records when the user indicates they detect a difference, and then gives you the data so you can analyze it from there.
Lions and Tigers and Random Numbers:
Switching is driven by a proper hardware random number generator rather than a pseudo-random software one (e.g. Mersenne Twister), and within certain constraints you can substitute a different device there (which comes from me not having settled on which RNG I wanted to use when I first got things running).
Some things worth noting, coming out of having done that …
Switching sources/outputs seamlessly … i.e. without resulting in any artifacts that would give away the fact that something had happened proved to be more work than I thought to get perfectly undetectably.
The ADC on an Arduino is limited to a range from 0 to 5V (reporting a 10-bit value of 0 for 0V and 1023 for 5V), which means you’ll need special handling (hardware, software or both) to deal with a proper audio signal (which will, of course, swing between negative and positive values).
In addition to being able to produce level-matched outputs (from its inputs), it also has a “meter” mode, so you can manually adjust what the BTAB is being fed … also accurate to 0.1 dB.
It was much more of a pain to build, and get working properly, than I originally anticipated. And while I had thoughts about publishing the software and PCB files (i.e. open source) etc., and later about building it or kick-starting a run of them, there was never sufficient interest to justify the effort - especially as it turned out to be rather more expensive per-unit than I figured at the outset.
Other Things that got Added Over Time:
The dual-analog-input, single-analog-output, was augmented not just to deal with single-ended and balanced line-level signals, but also to allow amplifier-level inputs with switched output to both single-ended and balanced headphone outputs.
Dual digital-input switching to allow comparison of digital sources. This resulted in having to rebuild the chassis to accommodate all the connections.