Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: How to output to 2 different headphones with different EQ presets ? (Read 4973 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

How to output to 2 different headphones with different EQ presets ?

Hi everyone,

I forgot to say "simultaneously"  :D Here's the story :
My GF and I have two pairs of headphones (which we're gonna upgrade soon). We like to listen to them simultaneously and compare our impressions on music.
I'd like to EQ both headphones to get the most out of them, using sites like this one : https://www.reddit.com/r/oratory1990/wiki/index/list_of_presets
But of course if I add an EQ to foobar's DSP, that EQ will apply to both headphones, so it will only be ideal for one of them.

So what I'd like somehow would be foobar to output simultaneously on two different outputs (two USB ports I guess), each output having its own EQ preset. Something like this :
FOO --> EQ1 --> USB1 --> DAC1 --> Amp1 --> Headphone1
BAR --> EQ2 --> USB2 --> DAC2 --> Amp2 --> Headphone2

Doesn't sound very easy or even possible. But is there a way ?  :-\

The only thing I've thought would be having two separate instances of foobar, outputting to different USB ports. But that would not be useful at all, because we'd need to perform each song search twice, hit play twice, we couldn't have shortcuts for both instances I guess, etc..

Another solution could be having some external software that would be able to duplicate foobar's output, EQ it individually and output it on both USB ports. Something like this :
foobar --> External software --> output1 --> EQ1 --> USB1
..........................................................--> output2 --> EQ2 --> USB2

Maybe there are other solutions. I don't know.

Thanks in advance for your help.

Re: How to output to 2 different headphones with different EQ presets ?

Reply #1
You could potentially sync the songs using something like foo_upnp. Then use foobar on different PCs with their own EQ settings/outputs.

Re: How to output to 2 different headphones with different EQ presets ?

Reply #2
Thanks Daeron. Although that would mean having two different PCs.
Here we're talking about listening in the same room, side by side, with only one PC.
Couldn't I sync the songs between two instances of foobar, on a sort of master/slave mode?
Then each instance would output to its own audio device, with its own EQ settings, and the problem would be solved!

Actually it's even more complicated. Instead of having two headphones I could have many (actually I have already more than two). But I would only play two at a time.
So I'd have n headphones, and n instances of foobar, each one with its own settings. And two DACs / headphone amps.
Among these instances, I would select any two at a time: instance A and instance B.
Instance A would output to DAC 1, and instance B would output to DAC 2.
This is what I'd like to achieve.

Re: How to output to 2 different headphones with different EQ presets ?

Reply #3
Just set up EQ in each of your DAC's control panel. If you're having problems duplicating output, there's software for that like Voicemeeter or AudioRouter. Voicemeeter got to have its own EQ too.

Re: How to output to 2 different headphones with different EQ presets ?

Reply #4
Thanks @Pollux88 .

You are assuming that my DACs have a built-in EQ, but it's not the case unfortunately.

Voicemeeter looks nice since its specs say "3 Inputs (2 physicals / 1 Virtual) and 3 Outputs (2 physicals / 1 Virtual)".
I would need 1 Input (Virtual) from foobar, and 2 Outputs (physical) to DACs.
Unfortunately, Voicemeeter's EQ is very basic (only 3 band).
I'm looking for a parametric EQ with about 10 bands, because that's what's needed for most of the headphone presets that I linked in my OP.

Voicemeeter Banana looks better, because it has a parametric EQ with 6 bands/cells. It's close to what I need : https://vb-audio.com/Voicemeeter/banana.htm

Any clues ? We're almost there ! :D

Re: How to output to 2 different headphones with different EQ presets ?

Reply #5
foobar2000+ASIO4ALL+2 virtual sound cards+2 instances of VSTHost
or, if you can afford Convolver instead of EQ, it will be much simpler:
foobar2000+Matrix Mixer+Convolver+ASIO4ALL
Matrix Mixer copies 2 channels, so signal becomes 4-channel. Then Convolver with 4-channel impulse (with different EQ preliminarily applied to different channels) process this signal. Then ASIO4ALL outputs different channels to different devices using custom channel mapping.

Re: How to output to 2 different headphones with different EQ presets ?

Reply #6
Hi Rollin, you're everywhere ! Saving the day again ! :D Thank you.

Actually I think the "simpler" solution would be Voicemeeter Banana, IF it had 10 bands. But it hasn't  :P  I have just emailed the developer, maybe he can add 4 more bands, who knows ?

Yes, I could use convolver instead of EQ, thanks to your excellent tutorial in that other topic. :) So that would mean :
  • Creating a 4-channel pulse for a given frequency (e.g. 44 KHz)
  • Loading it into Audacity
  • EQing channels 1 and 2 for a given headphone preset
  • EQing channels 3 and 4 for another headphone preset
  • Saving the EQed pulse
  • Feeding the convolver with it.

But Audacity's EQ doesn't seem to be a PEQ (with Frequency, Gain, Q-Factor, etc.). And the aforementioned presets require a PEQ. Take this one for example (see attached pic). So if I had a classic 10-band PEQ for Audacity, I guess I could solve my issue. Any clues ?

FYI, if I had more than 2 headphones, that really would complicate things, because i would need to create many pulses. Example :
3 headphones => 3 pulses (pulse12, pulse13, pulse23) for any given frequency
4 headphones => 6 pulses (pulse12, pulse13, pulse14, pulse23, pulse 24, pulse 34) for any given frequency
And that quickly escalates by n! factor (5 headphones = 10 pulses, 6 headphones = 24 pulses...).

Then I guess I would need to create as many instances of foobar as required (because that would be easier than switching pulses). For instance foobar12, foobar13, foobar23. And launch the right instance depending on the used headphones. Am I right, or is there a simpler solution ?

Re: How to output to 2 different headphones with different EQ presets ?

Reply #7
But Audacity's EQ doesn't seem to be a PEQ (with Frequency, Gain, Q-Factor, etc.). And the aforementioned presets require a PEQ. Take this one for example (see attached pic). So if I had a classic 10-band PEQ for Audacity, I guess I could solve my issue. Any clues ?
Audacity supports VST plugins. And Audacity is not the only audio editor. Also, what is problem to just draw EQ curve as seen on picture?

Re: How to output to 2 different headphones with different EQ presets ?

Reply #8
Somehow I knew you would say that, lol.

Another solution would be replacing the 2 DACs by a single multichannel DAC (ex : https://www.gearslutz.com/board/product-alerts-older-than-2-months/1294869-esi-launches-ugm192-gigaport-ex.html ). That would eliminate the need for ASIO4ALL. foobar would just output 4-channel sound every time : foobar2000+Matrix Mixer+Convolver, all to a single USB output.

Re: How to output to 2 different headphones with different EQ presets ?

Reply #9
You can equalize your headphones using Minidsp HA-DSP
DSP Headphone amplifier Equalizer.

Re: How to output to 2 different headphones with different EQ presets ?

Reply #10
Thanks. That could work for most headphones, but not for some electrostatic headphones like the Koss ESP/95X that come with their own amplifier. I'm looking for an universal solution, since the Koss is in my plans.

Re: How to output to 2 different headphones with different EQ presets ?

Reply #11
As for precise parametric eq, ffmpeg has parametric eq - https://ffmpeg.org/ffmpeg-filters.html#equalizer
For example, equalizing impulse for m50 will look like
Code: [Select]
ffmpeg.exe -i "impulse.wav" -af "lowshelf=f=90:g=2.8:t=q:w=0.9, equalizer=f=200:g=-3.3:t=q:w=0.9, equalizer=f=290:g=4.5:t=q:w=1.8, equalizer=f=2800:g=-3.7:t=q:w=1.5, equalizer=f=3670:g=2.7:t=q:w=4.5, equalizer=f=4340:g=-5:t=q:w=4.5, equalizer=f=5800:g=2.8:t=q:w=3.5, equalizer=f=7000:g=-3:t=q:w=6, equalizer=f=8100:g=-4.6:t=q:w=5, highshelf=f=11000:g=-10:t=q:w=0.8" -c:a pcm_f32le "result.wav"

Re: How to output to 2 different headphones with different EQ presets ?

Reply #12
You can output to 2 different headphones with different EQ presets using Jriver. 2 linked zones can be configured with separate parametric equalizer or convolution dsps.

Re: How to output to 2 different headphones with different EQ presets ?

Reply #13
Rollin, you always come with great solutions ! But sometimes they are a bit geeky for poor little me. I'm not a CLI expert like you.

Thanks @sacduser . Well, I'm an old foobar fan and I don't intend to change, lol.
I would use JRiver if I could still use foobar's GUI, and just play music on JRiver. In other words, JRiver would need to be pretty invisible to me, as I'd keep using foobar. Is that possible somehow ? Maybe with foo_run or another component ?

Re: How to output to 2 different headphones with different EQ presets ?

Reply #14
You can enable the WDM feature of Jriver and direct the output from Foobar to Jriver.

Re: How to output to 2 different headphones with different EQ presets ?

Reply #15
Thanks, I'll look into it.

Unrelated question : let's say I have 4-channel audio going out of foobar. Normally each listener will have volume control via the physical knobs on both headphone amps. But what if there weren't headphone amps ? Just wondering. Would foobar be able to provide separate stereo volume controls for channels 1-2 and channels 3-4 ?

I'm not talking about typing figures in Matrix Mixer, becuse that's unpractical. Rather about keyboard shortcuts. Two keys for Vol+/- on channels 1-2, and two other keys for Vol+/- on channels 3-4. Can this be achieved ?

Re: How to output to 2 different headphones with different EQ presets ?

Reply #16
OK, let's forget about the previous question if nobody can answer it.
I have tried @Rollin 's method (foobar2000+Matrix Mixer+Convolver) and indeed it works !
For that, I have found what seems to be a nice free VST PEQ for Audacity : https://www.kvraudio.com/product/qrange-by-lkjb
(if you have something better to suggest, please do)

So I created a 4-channel impulse with Audacity, then I applied the PEQ to it, and I saved the result (wav 32-bit float).
Then within foobar's DSP Manager, I used Matrix Mixer ("Convert stereo to 4 channels") and Convolver (loading the EQed impulse).
It works ! :D

I'm just not sure of the QRange PEQ settings that I've made (and I haven't found a user manual). Here's my test EQ, taken from here :



I'm wondering this (remember I'm a beginner on this stuff) :
  • What Process Mode must I choose? (click on the cogwheel to access them). "Low distortion", "Medium Distortion & OK Frequency Response" or "Good Frequency Response" ? I don't really understand the compromise that needs to be made between distortion and frequency response, sorry.
  • What are the Peak Curve (green) and the Hold Curve (red) ?
  • What means "Pre / Post" and "Routing : Mid" ?

If anybody can help... Thanks again !

Re: How to output to 2 different headphones with different EQ presets ?

Reply #17
What Process Mode must I choose? (click on the cogwheel to access them). "Low distortion", "Medium Distortion & OK Frequency Response" or "Good Frequency Response" ? I don't really understand the compromise that needs to be made between distortion and frequency response, sorry.
https://lkjbdsp.wordpress.com/2020/05/21/qrange-distortion/

Re: How to output to 2 different headphones with different EQ presets ?

Reply #18
Yes, that explains a lot indeed. However, the author talks about using QRange in real time, for real music and with real time constraints. I'm only using QRange once for a single calculation, with a very simple pulse signal, to transform it and save the result. Then I'm done with QRange. So I don't know what setting would be best for my particular use.

Also, all headphone PEQ presets ask that we reduce the global gain, which is normal. But since we're talking about an impulse here, do I still need to reduce the global gain ? For example here's how the 44.1 KHz pulse looks after EQ, with a global gain of -5.5 dB. Do you see my point ?



Re: How to output to 2 different headphones with different EQ presets ?

Reply #20
But since we're talking about an impulse here, do I still need to reduce the global gain ?
Yes.


 

Re: How to output to 2 different headphones with different EQ presets ?

Reply #22
For the record I have just realized one thing: why would I need Matrix Mixer when foobar's DSP Manager gives me already the option "Convert stereo to 4 channels" which is exactly what I need? :D
Makes things even simpler.

I still don't know which one of the 3 Process Modes I should choose within QRange though.

Re: How to output to 2 different headphones with different EQ presets ?

Reply #23
Here's an update with some info.  ;)

Now that I know that I can EQ the 2 headphones independently with Convolver and a 4-channel signal, I'm also trying to find a PEQ solution that would fit within foobar (so no Equalizer APO). There are lots of VST, but I'm also trying MathAudio Headphone EQ which is a native foobar2000 component : https://mathaudio.com/headphone-eq.htm

The problem with Headphone EQ is that it's a stereo-only component. I've contacted its developer, Sergey, and he says this :

Quote
Headphone EQ is a stereo plug-in. That means it has a single stereo input and a single stereo output. If it is necessary to process two stereo channels, the host program should use two instances of the Headphone EQ plug-in. Each instance works independently and has its own preset. It is necessary to split the audio channel and include two instances of the headphone EQ 'after' the splitter.
And also this :
Quote
If you try to process a 4-channel sound with a stereo plug-in, the host program (Foobar2000 in this case) decides what to do. The host program decides whether it will process two channels or show an error message. The Headphone EQ plug-in doesn't know anything about the source and the destination of the audio stream. It takes two buffers of sound from Foobar2000 and returns two processed buffers to Foobar2000. The plug-in doesn't know where Foobar2000 took that buffers and where Foobar2000 sends them to.

That leaves me wondering how foobar2000 works in that case. What would happen if I gave a 4-channel audio signal to MathLab Headphone EQ via foobar DSP manager : would it crash ? would it EQ only channels 1&2 ? Because if it did, I could find a way to make everything work for my case ! I could set up this DSP chain :
  • Split stereo signal into 4 channels
  • Headphone EQ instance #1 on the two first channels (which are channels 1&2)
  • Move channels (1234 becomes 3412) (I suppose there's a component that allows us to move channels, right ?  :-[ )
  • Headphone EQ instance #2 on the two first channels (which now are channels 3&4)
  • Move channels (3412 becomes 1234 again)

What do you guys think ?

Re: How to output to 2 different headphones with different EQ presets ?

Reply #24
What would happen if I gave a 4-channel audio signal to MathLab Headphone EQ via foobar DSP manager
Not so hard to test it. MathLab Headphone EQ will be entirely bypassed.