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: foo_dsp_xfeed (Read 73666 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

foo_dsp_xfeed

Heya,

this is the discussion thread for foo_dsp_xfeed, a Crossfeed DSP component.
For those who don't know what that is: it enables a more relaxed and natural listening experience with headphones. A more detailed explanation why and how it works is given below.

Download

Usage
1) Install the downloaded zip file using the Components preferences page.
2) Add "Crossfeed" to the list of active DSPs (Playback - DSP Manager preferences page).
3) Configure it.

Explanation
Let's take a look at the image below.



When listening with headphones, the left ear only hears sound coming from the left speaker (LL) and the right ear only the sound coming from the right speaker (RR). This often results in unnatural stereo separation or spaciousness and can cause listening fatigue.

When listening with speakers, sound from the right speaker also arrives at the left ear (RL), with a small time delay though. This time delay is known as interaural time difference (ITD). Additionally, there's a difference in level known as interaural level difference (ILD). In the image above, line thickness indicates these level differences.

In reality, things aren't that simple. The level difference, for example, is not constant because the head obstructs higher frequencies a lot better than low frequencies (aka head shadow). While at low frequencies the attenuation can be as low as and even lower than 3 dB, it can reach up to about 20 dB at high frequencies.
To make things more complex, both the ITD and ILD change depending on the angle of the speakers.

As the delay and level differences are reduced to zero, the left and right speakers merge into a single center speaker (effectively mono).

How is this DSP component different from ...
Compared to simple crossfeed effects, this implementation does not only crossfeed bass and lower mids but all frequencies up to Fs/2.
By configuring crossfeed levels for both low and high frequencies, this DSP can be set up to mimic the acoustic shadow of your own head.
-> For example, hi-hat sounds panned hard to the left/right on a recording can be moved "out of the head" coherently with all the other instruments.

The configuration dialog looks like this:


Please give it a try and let me know what you think, thanks.
"I hear it when I see it."

foo_dsp_xfeed

Reply #1
Nice.
Put it right in and worked outta the box.

foo_dsp_xfeed

Reply #2
Can't hear any considerable differences from "Bauer Stereo to Binaural" effect. What are the advantages of this component??
🇺🇦 Glory to Ukraine!

foo_dsp_xfeed

Reply #3
I updated the first post which should hopefully answer your question(s). Thanks for giving it a try.

edit:
v0.1.1 released
"I hear it when I see it."

foo_dsp_xfeed

Reply #4
Thanks.
Please, add the "Load Defaults" button to the component configuration window.
🇺🇦 Glory to Ukraine!

foo_dsp_xfeed

Reply #5
This one really nails the illusion of listening to stereo speakers in a room! Some early stereo material still needs bass frequencies mono-ized but that's beside the point. Thanks for writing this plugin xnor!

foo_dsp_xfeed

Reply #6
xnor, after listening to my favorite albums through your plugin for a couple of days I'm still amazed by how much I like your crossfeed implementation over other ones I've used in the past. One thing that strikes me is the improved intelligibility of low-end ranges. Of course this is just my subjective evaluation. Out of curiosity, how did you decide on the default values?

foo_dsp_xfeed

Reply #7
I'm glad you enjoy it as much as I do.

The defaults (-3, -12 dB and 250 us in v0.1.1) aren't perfect and also don't work with every head. The low frequency crossfeed level isn't that critical because the time delay and resulting phase shift is more important in that frequency range - to our hearing anyway. Additionally, many recordings (except the ones you mentioned) already have bass in the center so this value can be increased to your liking.

The high frequency level should be lower in theory because if you look at some 30° HRTFs you can see average level differences of roughly -18 dB. Though these HRTFs are measured in anechoic chambers. My component doesn't add reverb (yet) so I increased the default to account for that.

The time delay also is based on averaged 30° HRTFs, but is highly head-shape dependent. You can approximate this value with: ITD = d/(2 * c) * (a+ sin(a)) where d is your head's diameter (in m), c is the speed of sound (~343 in m/s) and a the angle (for example 30°/180*pi, in rad). As you can see this simple model assumes that your head is spherical.
"I hear it when I see it."

foo_dsp_xfeed

Reply #8
Fascinating. Headphone users are using DSP to add stereo crosstalk and loudspeaker users are using DSP to remove it.

foo_dsp_xfeed

Reply #9
Fascinating. Headphone users are using DSP to add stereo crosstalk and loudspeaker users are using DSP to remove it.

Yeah, loudspeaker folks use it to achieve effects like somebody whispering into your left or right ear (special FX, "3D sound" ...) or artificially expand the stereo image/stage width. Imo, the latter doesn't make much sense with stereo music that wasn't mastered with this in mind (virtually all stereo music). And you also have to keep in mind that crosstalk cancellation only works down to a couple decibels with speakers, else you'll get awful coloration, a tiny sweet-spot and so on. So headphones have an advantage if you need that unnatural separation (e.g. for binaural recordings) because they provide it out of the box and adding a delayed, equalized signal is easy to do compared to crosstalk cancellation.

I've been using different crossfeed implementations from the day I started listening to music with headphones. Imo, even the simplest kind of crossfeed circuit or DSP is already a big improvement.
"I hear it when I see it."

foo_dsp_xfeed

Reply #10
...adding a delayed, equalized signal is easy to do compared to crosstalk cancellation.

But that's precisely how crosstalk cancellation is done except the added signal is inverted and applied to the opposite channel. I'm putting the finishing touches on an Ambiophonics plugin for foobar2000 and I've observed none of the deficiencies you claim.

foo_dsp_xfeed

Reply #11
But that's precisely how crosstalk cancellation is done except the added signal is inverted and applied to the opposite channel.

That would be a simple way of (trying to) doing it but afaik more (complex) filters are required to achieve acceptable results. I was thinking about conventional loudspeaker positioning though where things can get quite hairy.

Quote
I'm putting the finishing touches on an Ambiophonics plugin for foobar2000 and I've observed none of the deficiencies you claim.

Have you measured how well the cancellation works at the listening position? And 1 m next to it?
There are records where, e.g. in the beginning of a track, one channel is basically silence (below -60 dB anyway) while the other contains some loud instrument. In no way you'll hear something like that in the real world and neither did the artist or engineers because they listening to it on stereo speakers without any crosstalk cancellation. And I also don't think that an inverted signal could cancel the crosstalk in a way to even come close to such an unnatural level of separation.

From Wikipedia, Ambiophonics "generates a speaker-binaural soundfield that emulates headphone-binaural". Just like I wrote above, crosstalk cancellation has its applications like binaural recordings, "3D sound" etc., but stereophonic music designed with and for conventional stereo loudspeaker setups is not one of them for the reasons outlined before, imo, ymmv. Also, I think that some of the premises which Ambiophonics builds upon are not correct, but this gets quite a bit off-topic here and is better discussed in another thread.
"I hear it when I see it."

foo_dsp_xfeed

Reply #12
I'm glad you enjoy it as much as I do.

The defaults (-3, -12 dB and 250 us in v0.1.1) aren't perfect and also don't work with every head. The low frequency crossfeed level isn't that critical because the time delay and resulting phase shift is more important in that frequency range - to our hearing anyway. Additionally, many recordings (except the ones you mentioned) already have bass in the center so this value can be increased to your liking.

The high frequency level should be lower in theory because if you look at some 30° HRTFs you can see average level differences of roughly -18 dB. Though these HRTFs are measured in anechoic chambers. My component doesn't add reverb (yet) so I increased the default to account for that.

The time delay also is based on averaged 30° HRTFs, but is highly head-shape dependent. You can approximate this value with: ITD = d/(2 * c) * (a+ sin(a)) where d is your head's diameter (in m), c is the speed of sound (~343 in m/s) and a the angle (for example 30°/180*pi, in rad). As you can see this simple model assumes that your head is spherical.


Thanks for the explaination. I couldn't quite folow the equation but that wouldnt be the first time...I you'd feel like breaking it down further for me it would make me very glad.

BTW I'm now routing my broswer and video player throught FB2K to make use of your crossfeed plugin. Consider me a fan

foo_dsp_xfeed

Reply #13
There are records where, e.g. in the beginning of a track, one channel is basically silence (below -60 dB anyway) while the other contains some loud instrument. In no way you'll hear something like that in the real world and neither did the artist or engineers because they listening to it on stereo speakers without any crosstalk cancellation.

I’ll never know what the artist or recording engineer heard nor do I care. The recording is what it is. I do know that when you add two signals that have frequencies in common there will be a continuum of constructive and destructive interference. The left and right channels of nearly all stereo recordings have frequencies in common. I also know that when you reinforce a signal with a phase shifted copy of itself you get a comb-filter effect. Most stereo recordings have center channel information that is common to both channels. The comb-filter and related effects are the damage done by stereo crosstalk. I find reducing those effects beneficial; you find the opposite.

 

foo_dsp_xfeed

Reply #14
Thanks for the explaination. I couldn't quite folow the equation but that wouldnt be the first time...I you'd feel like breaking it down further for me it would make me very glad.

BTW I'm now routing my broswer and video player throught FB2K to make use of your crossfeed plugin. Consider me a fan

Heh, yeah that is a nice idea. It would rock to have certain DSP components installed as system-wide APOs (audio processing objects) so sound from any application could be processed but afaik these can only be installed with a sound card driver. (Win32 devs please correct me if I'm wrong.)

Regarding the equation, here's an example: d = 15 cm = 0.15 m, a = 30° = 0.524 rad. This angle spans between M and SR or M and SL in the image in post #1 or see the image below. An angle of 90° would mean that the speakers are not in the front but exactly to the left and right of your head, which is where the ITD reaches its maximum (~700 us).

ITD = 0.15/(2 * 343) * (0.524 + sin(0.524)) = 2.24e-4 s = 224 us

If you use the windows calculator make sure you set it to 'Rad' instead of degrees.


I’ll never know what the artist or recording engineer heard nor do I care.

Even if we don't know for sure it's very, very unlikely that they heard a crosstalk canceled let alone Ambiophonics filtered version.

Most likely the setup looked similar to this:


(correct speaker placement for monitoring stereo recordings)

Quote
Most stereo recordings have center channel information that is common to both channels. The comb-filter and related effects are the damage done by stereo crosstalk. I find reducing those effects beneficial; you find the opposite.

In theory you get a couple deep comb notches with the first one located near 2 kHz, yes, but those gaps are filled with reflections, reverberation and are further reduced by diffraction and so on. That's one of the reasons why stereo doesn't sound right in anechoic environments, but it sounds fine in normal listening rooms.
Secondly, the high frequencies where comb filtering occurs are supposed to add in terms of energy and not amplitude. Thirdly, the common part of the signal is significantly lower in level at higher frequencies.
Altogether, the "damaging and destructive crosstalk" is only a problem if you want to listen to binaural stuff with loudspeakers, imo, ymmv.
"I hear it when I see it."

foo_dsp_xfeed

Reply #15
0.15/(2 * 343) * (0.524 + sin(0.524))


Thanks! If anyone else is interested in calculating the optimum value for them selfs all you need to to is substitute '0.15' for your heads diameter in meters and paste that line into Google. Voila!
(Probably obvious to most members here but I hope this helps less math literate folks like me  )

foo_dsp_xfeed

Reply #16
Headphone DSPs have had always my interest, so thanks for this. Unfortunately i haven't currently the possibility to hear or test it as my PC is broken, so i've a question. Does your component use frequency-dependent ITDs?
BS2B definitely isn't simple crossfeed component, it does use frequency-dependent ITD, doesn't suffer from comb filter effect as it isn't FFT based and it is my favorite non HRTF headphone DSP.
With respect to HRTF based DSP, i think TB Isone has no competition, however it is commercial VST plugin intended primarily for mixing purposes.

foo_dsp_xfeed

Reply #17
Does your component use frequency-dependent ITDs?

ITD is not really frequency-dependent. It is not constant either but right now the component does not deal with custom head-shapes or ear (dis)placement related effects. Actually, I don't think that there is any plugin out there that deals with this, because it's not really that important or would be cumbersome to configure I guess.

Quote
BS2B definitely isn't simple crossfeed component, it does use frequency-dependent ITD, doesn't suffer from comb filter effect as it isn't FFT based and it is my favorite non HRTF headphone DSP.

Don't get me wrong, when I write 'simple' I don't mean trivial or bad. But bs2b, just like its electronic circuit counterparts, takes the signal, applies a low pass filter, delays the output and mixes it into the other channel. This is why you see a decreasing ITD with increasing frequency: because of the low pass filter there is nothing left to delay at higher frequencies. And since there is not much left there also occurs no comb filtering, which however is a trait of stereophonic sound.
It works well enough (I used it myself quite some time) but it's a simplified model.
"I hear it when I see it."

foo_dsp_xfeed

Reply #18
Thanks for your comment, i must definitely try your crossfeed sometimes when possible. However , i'd be curious to know your opinion about TB Isone when compared with xfeed.

foo_dsp_xfeed

Reply #19
I gave it a try quite some time ago so I'll have to take another look at a recent version.

edit: typo fixed, re-upped.
edit2: current version has a bug where the labels lag behind the sliders, will be fixed with the next version.

edit3: 0.1.3 released.

When adjusting the volume please make sure that you don't run into clipping. View - Visualizations - Peak Meter is a good indicator but to be sure take a couple of files and convert/process them e.g. to 32-bit wav with the crossfeed enabled. Scan the resulting files with ReplayGain and check the track peaks.
"I hear it when I see it."

foo_dsp_xfeed

Reply #20
The positioning of instruments is indeed more agreeable with this plugin enabled. However, it seems to suffer a bit from the same problem most crossfeeds do: Higher frequencies seem to be attenuated to a higher degree, making the sound seemingly warmer but also less sharply defined. Is there a way to compensate for this? Or should the plugin maybe be used in conjunction with noise sharpening?

foo_dsp_xfeed

Reply #21
Sandrine, with the latest release you can adjust the shelving EQ. I recommend leaving it at 0 dB but if it sounds too muffled with your headphones you can set this to -3 dB for example, or insert a standalone EQ into your DSP chain and boost treble there.

That higher frequencies seem to be attenuated is not a 'bug', it's intended this way.
"I hear it when I see it."

foo_dsp_xfeed

Reply #22
Thanks for this.

It's interesting to find and try out new crossfeed plugins! I've used quite a few since getting my headphone amplifier in 2004 with built-in crossfeed.


foo_dsp_xfeed

Reply #23
However , i'd be curious to know your opinion about TB Isone when compared with xfeed.

I gave the latest version a quick listen. The hrtf cues don't work for me at all and I guess the same is true for many headphones that are more or less diffuse-field equalized. Disabling the cues (strength set to zero) helps a bit and makes the plugin more behave like my component, but renders the knobs on the right side useless. Anyway, imo the job of equalization should best be left to an EQ plugin/component, which also offers a lot more flexibility.
The speaker designer seems to be a simple 3 band EQ which I set to flat because again, I prefer to use a dedicated EQ for this job.
The room designer is a nice add-on. I've been planning to add an optional room reverb feature to my component as well. I haven't done much with artificial reverb so far so this will be an interesting journey.


Thanks for this.
It's interesting to find and try out new crossfeed plugins! I've used quite a few since getting my headphone amplifier in 2004 with built-in crossfeed.

You're welcome!
It's even more interesting to design and implement one. 
"I hear it when I see it."

foo_dsp_xfeed

Reply #24
Sorry for being a little off topic. In the lack of proper crossfeed software on the Mac, I recently found Canz3D. It's more than just crossfeed but a room simulation with quite a lot parameters. Atm I'm just using the default preset (Full blown) and am very impressed by the result. Not sure if you're intending to head this way in the long run. Just wanted to mention it here. On windows/foobar your component is currently my favorite dsp for headphone listening. Keep up the great work!