Jose Hidalgo
Addicted to Fun and Learning
Hi everybody,
This is a happy follow-up of previous ASR threads like this one. I have some revelations to make. This is the first one :
WE HAVE COMPLETELY SUCCEEDED.
IT HAPPENED NEARLY ONE WEEK AGO (but I needed some free time to write this).
ASIO4ALL DETECTS BOTH TOPPING USB DACS IN OUR SYSTEM,
AND AGGREGATES THEM INTO A SINGLE 4-CHANNEL VIRTUAL DAC.
THERE ARE NO SYNC ISSUES AT ALL (see part 8 for technical details).
This schematic is now a delicious reality. I can confirm this after several dual listening sessions with two individually EQed headphones :
So how did we do it ? There are some important steps, that I'm putting here for future readers. Because people need to know that THIS CAN BE DONE.
Some people, on ASR and elsewhere, told us that it couldn't be done. That we would run into issues. Well, THEY WERE WRONG. ALL OF THEM.
Here are the detailed steps, feel free to ask questions if that's not detailed enough for you. I hope this is an interesting read for everybody, even if you don't intend to do exactly the same thing. Enjoy !
1. Get Windows 10
For some unknown reason, ASIO4ALL wouldn't detect our Topping E30 DACs under Windows 7 or Windows 8.1 :
However, we found out that it was only Windows-related. After moving to Windows 10, we only needed to install ASIO4ALL, without ever installing the Topping drivers. ASIO4ALL is the only thing that's needed, and its developer specifically requests to NOT install manufacturer drivers.
And then, magically...
Both DACs are detected, and both are activated at the same time (see the blue on/off sign to the left of each DAC). End of story, right ? Well, not yet ! First let's go back to our previous operations.
2. Choose the right EQ option
Our whole purpose being to EQ our headphones individually and simultaneously, we needed to create all the corresponding EQ presets. For that, we needed to choose the right EQ option.
Since ASIO4ALL uses ASIO which is an exclusive bit-perfect audio path between the player and the DACs, completely bypassing Windows audio mixer, we couldn't use popular system-wide EQs like Equalizer APO that use Windows audio mixer. What are the other options ?
Our audio player (foobar2000) allows for several EQ options :
Option 2 (using a VST PEQ within foobar in real time) would be ideal if the CPU is powerful enough. However, there are a couple of issues :
Which leaves us with option 3, which is also the most complicated : convolution. So how does that beast work ? Well, convolution means creating EQ presets in advance (except that we call them "impulse responses" in this case), and feeding the convolution plug-in with them so it can work in real time during playback.
Convolution needs a VST PEQ too at some point, so now we need to choose the right VST PEQ for our needs. But here's the kicker : Convolution only needs a stereo VST PEQ to function. What ? How ? We'll see that in part 4.
3. Choose the right VST PEQ
With the precious help of a foobar forums member, we measured several PEQs (ffmpeg / KVR QRange with 2 different settings / DDMF IIEQPro). Details are on the link for those who want them.
Measurements showed all PEQs frequency responses to be really close until 5-7 KHz, with some notable differences afterwards (here's an example for the AT M50x) :
Spectrogram convinced us that DDMF IIEQPro (preferrably with "AnaPeaks" type filters, see its manual) was the best EQ option here (minimum phase, no pre-echo) :
DDMF IIEQPro is not free, but its price is very reasonable. The site seems to be down at the moment though.
If you want a free alternative, just pick KVR QRange and set it to "minimum phase".
4. Create EQ presets (part 1 - audio editor)
First we need an audio editor (in our case Audacity which is free), and the VST PEQ we just choosed (IIEQ Pro).
Since Audacity supports VSTs, we only had to install IIEQPro as an Audacity VST plug-in, and then use it within Audacity.
In our case we have 2 DACs and 3 headphones to EQ (in alphabetical order : Audioquest Nighthawk Carbon aka "1", Hifiman Sundara aka "2", Sennheiser HD600 aka "3"). That leaves all these possibilities :
You will also have to use a Dynamic DSP plug-in such as foobar2000's Dynamic DSP (v1 is compatible with foobar 1.6 and is sufficient in our case, v2 isn't yet). Here's a Dynamic DSP silent video tutorial (made for a different use but you'll get the idea).
5. Create EQ presets (part 2 - music player)
Now within the music player, we need to create the corresponding DSP presets.
For foobar2000, we use the built-in DSP Manager :
6. ASIO setup in the music player
7. ASIO4ALL setup for 44100 Hz
Everything was ready and we were full of hope, so we tried playing some music on both connected headphones.
Important : don't forget to do that for each of the DACs, as they have individual ASIO buffers !
We listened again, and... TA-DAAAAA ! It finally worked beautifully !!!
8. What about sync issues ?
Many people here and elsewhere, including the one and only @JohnYang1997 , told us that there would be sync issues, because of the lack of a master clock. Seems obvious. We were told that the DACs would slowly drift apart (some samples per second, if we were lucky), and that ultimately the drifting would cause issues (audio glitches for instance).
Well, THAT DIDN'T HAPPEN AT ALL. Allow me to explain.
ASIO4ALL has a user manual. Here's what it says on page 5/11 :
In other words, there won't be any sync issues for most USB devices, like Topping E30 DACs. Problem solved guys !
We have tested this extensively already, including playing long pieces of classical music (15 minutes of continuous play). The DACs don't drift apart in any noticeable way. There are no audio glitches at all, no sync issues at all, and we both finish listening at the exact same time. It's really a wonderful experience !
So let me say this once and for all :
9. ASIO4ALL setup for higher samplerates
Now that everything worked fine for 99% of our audio files (44100 Hz), I wanted to make sure that it worked too for those 1% of hi-res files (88.2 / 96 / 176.4 / 192 KHz and beyond). So I selected a 192 KHz file, with no EQ to begin with, and I played it on both headphones.
Again, there were those horrendous audio artifacts ("Tac-tac-tac-tac-tac"). But this time the ASIO4ALL buffers were already at 2048 samples. So what could we do ?
Once again, the solution was easy (but you need to know that it exists) : increase ASIO4ALL Buffer offsets from 4ms to 10ms (the max being 20ms) :
Important : like said before, don't forget to do this for each of the connected DACs.
... and voilà ! This is it guys : even 192 KHz audio files played perfectly, with no glitches nor delays. All our wishes were granted.
For the record, it worked too with EQ. We just needed to create the corresponding EQ presets with the relevant samplerates, and use Dynamic DSP to have foobar automatically switch between them depending on the samplerate. Yes, it's a bit tedious. But you only have to do it once.
10. Conclusion
There's no real conclusion here. Just a mere testimony that IT WORKS. IT ABSOLUTELY WORKS. IT'S STABLE, IT'S BEAUTIFUL, AND ANYBODY CAN DO IT.
I'm just a "perpetual beginner" in the audio world, but I'm very commited.
So if it can be done, I probably can find a way to do it.
And if I can do it, I guarantee that so can you.
I'll just finish with these words :
Or in my own words (right @raif71 ? ) : NEVER GIVE UP !!!
Have a great day everyone !
*goes back to listening*
This is a happy follow-up of previous ASR threads like this one. I have some revelations to make. This is the first one :
WE HAVE COMPLETELY SUCCEEDED.
IT HAPPENED NEARLY ONE WEEK AGO (but I needed some free time to write this).
ASIO4ALL DETECTS BOTH TOPPING USB DACS IN OUR SYSTEM,
AND AGGREGATES THEM INTO A SINGLE 4-CHANNEL VIRTUAL DAC.
THERE ARE NO SYNC ISSUES AT ALL (see part 8 for technical details).
This schematic is now a delicious reality. I can confirm this after several dual listening sessions with two individually EQed headphones :
So how did we do it ? There are some important steps, that I'm putting here for future readers. Because people need to know that THIS CAN BE DONE.
Some people, on ASR and elsewhere, told us that it couldn't be done. That we would run into issues. Well, THEY WERE WRONG. ALL OF THEM.
Here are the detailed steps, feel free to ask questions if that's not detailed enough for you. I hope this is an interesting read for everybody, even if you don't intend to do exactly the same thing. Enjoy !
1. Get Windows 10
For some unknown reason, ASIO4ALL wouldn't detect our Topping E30 DACs under Windows 7 or Windows 8.1 :
However, we found out that it was only Windows-related. After moving to Windows 10, we only needed to install ASIO4ALL, without ever installing the Topping drivers. ASIO4ALL is the only thing that's needed, and its developer specifically requests to NOT install manufacturer drivers.
And then, magically...
Both DACs are detected, and both are activated at the same time (see the blue on/off sign to the left of each DAC). End of story, right ? Well, not yet ! First let's go back to our previous operations.
2. Choose the right EQ option
Our whole purpose being to EQ our headphones individually and simultaneously, we needed to create all the corresponding EQ presets. For that, we needed to choose the right EQ option.
Since ASIO4ALL uses ASIO which is an exclusive bit-perfect audio path between the player and the DACs, completely bypassing Windows audio mixer, we couldn't use popular system-wide EQs like Equalizer APO that use Windows audio mixer. What are the other options ?
Our audio player (foobar2000) allows for several EQ options :
- A basic integrated 18-band stereo EQ
- A couple of VST Host plug-ins that allow to use any VST plug-in within foobar, including VST PEQs.
- A convolution plug-in (Convolver), which also needs a VST PEQ at some point.
Option 2 (using a VST PEQ within foobar in real time) would be ideal if the CPU is powerful enough. However, there are a couple of issues :
- Most VST PEQs on the market are stereo, and here we need a 4-channel PEQ. I have yet to find a free (or not too expensive) 4-channel VST PEQ (so far I've only found expensive pro stuff with lots of functions that we don't need, like FabFilter Pro-Q 3). Any ideas ?
- Current VST Host plug-ins for foobar2000 (foo_vst and George Yohng's VST Wrapper) are known to not be very stable. It's a bit like the Russian Roulette, lol.
Which leaves us with option 3, which is also the most complicated : convolution. So how does that beast work ? Well, convolution means creating EQ presets in advance (except that we call them "impulse responses" in this case), and feeding the convolution plug-in with them so it can work in real time during playback.
Convolution needs a VST PEQ too at some point, so now we need to choose the right VST PEQ for our needs. But here's the kicker : Convolution only needs a stereo VST PEQ to function. What ? How ? We'll see that in part 4.
3. Choose the right VST PEQ
With the precious help of a foobar forums member, we measured several PEQs (ffmpeg / KVR QRange with 2 different settings / DDMF IIEQPro). Details are on the link for those who want them.
Measurements showed all PEQs frequency responses to be really close until 5-7 KHz, with some notable differences afterwards (here's an example for the AT M50x) :
Spectrogram convinced us that DDMF IIEQPro (preferrably with "AnaPeaks" type filters, see its manual) was the best EQ option here (minimum phase, no pre-echo) :
DDMF IIEQPro is not free, but its price is very reasonable. The site seems to be down at the moment though.
If you want a free alternative, just pick KVR QRange and set it to "minimum phase".
4. Create EQ presets (part 1 - audio editor)
First we need an audio editor (in our case Audacity which is free), and the VST PEQ we just choosed (IIEQ Pro).
Since Audacity supports VSTs, we only had to install IIEQPro as an Audacity VST plug-in, and then use it within Audacity.
In our case we have 2 DACs and 3 headphones to EQ (in alphabetical order : Audioquest Nighthawk Carbon aka "1", Hifiman Sundara aka "2", Sennheiser HD600 aka "3"). That leaves all these possibilities :
- 00 : no EQ at all
- 12 : Nighthawk EQ on DAC 1, Sundara EQ on DAC 2
- 13 : Nighthawk EQ on DAC 1, HD600 EQ on DAC 2
- 21 : Sundara EQ on DAC 1, Nighthawk EQ on DAC 2
- 23 : Sundara EQ on DAC 1, HD600 EQ on DAC 2
- 31 : HD600 EQ on DAC 1, Nighthawk EQ on DAC 2
- 32 : HD600 EQ on DAC 1, Sundara EQ on DAC 2
- Create a basic 44100 Hz 4-channel impulse within Audacity. It's basically a 4-channel waveform that consists of 4096 samples of silence. Then with the pencil retouching tool, create a basic 1-sample impulse located right in the middle, at sample #2048 :
- Once that's ready, just save it as a multichannel wav (caution : format has to be 32-bit float, unless your player/convolver doesn't support 32-bit files which would be a shame). For example "Basic Impulse.wav".
Then we are going to use that basic impulse to create all our EQ presets or "impulse responses".
- Select two of the four channels to be EQed (in this case channels 1-2, see how they're highlighted)
- Launch the PEQ VST (IIEQPro) within Audacity via the "Effects" menu
- The first time we launch the PEQ VST, we take the time to create all the needed PEQ presets by copying the tables from Oratory, InnerFidelity, etc., and saving them as IIEQPro presets. That doesn't take very long.
- Load one of the IIEQPro presets that we have just created (here for example the latest HD600 Oratory preset)...
- ... and apply it once to the two channels that we've previously selected. See the difference ? It looks minor, but everything is there :
- Select channels 3-4, and repeat the operation with a different PEQ preset.
- When all 4 channels have been EQed, just save this "impulse response", always as wav 32-bit float, naming it appropriately (in our case we named our presets like previously said : 12.wav, 13.wav, 21.wav, 23.wav, 31.wav, 32.wav).
You will also have to use a Dynamic DSP plug-in such as foobar2000's Dynamic DSP (v1 is compatible with foobar 1.6 and is sufficient in our case, v2 isn't yet). Here's a Dynamic DSP silent video tutorial (made for a different use but you'll get the idea).
5. Create EQ presets (part 2 - music player)
Now within the music player, we need to create the corresponding DSP presets.
For foobar2000, we use the built-in DSP Manager :
- Add "Convert stereo to 4 channels" to the audio chain (lossless duplication, see our schematic)
- Add a "Convolver" instance.
- Edit the Convolver instance (click on the three dots), and load one of the corresponding "impulse response" files that we have previously created with Audacity. Don't forget to UNCHECK "Auto level adjust".
- Just name the DSP preset accordingly ("2-3" in our screenshot) and click on "Save" to save it within the DSP Manager.
- Repeat the operation for all other EQ presets. We're nearly there !
6. ASIO setup in the music player
- Download and install ASIO support for foobar2000
- Go to foobar2000 preferences ( File > Preferences > Playback > Output > ASIO) and check that ASIO4ALL is detected (BTW also make sure that you CHECK "Use 64-bit ASIO drivers" and "Run with high process priority") :
Note that if you double-click on "ASIO4ALL v2" you can get the ASIO4ALL control panel that we showed earlier in part 1.
- Add a new custom channel mapping in order to send channels 1-2 to DAC #1, and channels 3-4 to DAC #2 :
Note that under foobar2000, channels are named "Left, Right, Center, LFE, etc." instead of "1, 2, 3, 4, etc.". It's not a problem.
- Go to Preferences > Playback > Output and select as "Device" the name of the custom channel mapping that we have just created :
7. ASIO4ALL setup for 44100 Hz
Everything was ready and we were full of hope, so we tried playing some music on both connected headphones.
- Good news : both headphones worked simultaneously.
- Bad news : there were lots of artifacts, like "Tac-tac-tac-tac-tac" lots of times per second. It was terrible !
Important : don't forget to do that for each of the DACs, as they have individual ASIO buffers !
We listened again, and... TA-DAAAAA ! It finally worked beautifully !!!
8. What about sync issues ?
Many people here and elsewhere, including the one and only @JohnYang1997 , told us that there would be sync issues, because of the lack of a master clock. Seems obvious. We were told that the DACs would slowly drift apart (some samples per second, if we were lucky), and that ultimately the drifting would cause issues (audio glitches for instance).
Well, THAT DIDN'T HAPPEN AT ALL. Allow me to explain.
ASIO4ALL has a user manual. Here's what it says on page 5/11 :
" Multi-device-setups require that all the devices involved are running from the same clock source. You can achieve this by daisy-chaining devices via S/PDIF etc. Fortunately, most USB devices will automatically synchronize themselves for as long as the host controllers they are connected to have a common clock source, which is trivially true for the USB host controllers embedded in the south bridge on any mainboard. "
In other words, there won't be any sync issues for most USB devices, like Topping E30 DACs. Problem solved guys !
We have tested this extensively already, including playing long pieces of classical music (15 minutes of continuous play). The DACs don't drift apart in any noticeable way. There are no audio glitches at all, no sync issues at all, and we both finish listening at the exact same time. It's really a wonderful experience !
So let me say this once and for all :
- YES, we can aggregate several USB DACs with ASIO4ALL and Windows 10, and use them as a single multi-channel virtual DAC
- NO, there are no sync issues at all for Hi-Fi purposes (it would of course be different for studio purposes where latency is critical)
9. ASIO4ALL setup for higher samplerates
Now that everything worked fine for 99% of our audio files (44100 Hz), I wanted to make sure that it worked too for those 1% of hi-res files (88.2 / 96 / 176.4 / 192 KHz and beyond). So I selected a 192 KHz file, with no EQ to begin with, and I played it on both headphones.
Again, there were those horrendous audio artifacts ("Tac-tac-tac-tac-tac"). But this time the ASIO4ALL buffers were already at 2048 samples. So what could we do ?
Once again, the solution was easy (but you need to know that it exists) : increase ASIO4ALL Buffer offsets from 4ms to 10ms (the max being 20ms) :
Important : like said before, don't forget to do this for each of the connected DACs.
... and voilà ! This is it guys : even 192 KHz audio files played perfectly, with no glitches nor delays. All our wishes were granted.
For the record, it worked too with EQ. We just needed to create the corresponding EQ presets with the relevant samplerates, and use Dynamic DSP to have foobar automatically switch between them depending on the samplerate. Yes, it's a bit tedious. But you only have to do it once.
10. Conclusion
There's no real conclusion here. Just a mere testimony that IT WORKS. IT ABSOLUTELY WORKS. IT'S STABLE, IT'S BEAUTIFUL, AND ANYBODY CAN DO IT.
I'm just a "perpetual beginner" in the audio world, but I'm very commited.
So if it can be done, I probably can find a way to do it.
And if I can do it, I guarantee that so can you.
I'll just finish with these words :
" He didn't know that it was impossible. And that's precisely why he succeeded at it. "
Or in my own words (right @raif71 ? ) : NEVER GIVE UP !!!
Have a great day everyone !
*goes back to listening*
Last edited: