crosstalk_canceller

NODE

Cancels what each speaker sends to the opposite ear, so the image can extend past the speakers.

Parameters

FIELDWHAT IT DECIDESRANGEREQUIRED
band_low_hzHighpass corner frequency [Hz] for the cancellation signal to protect bass punch (optional, 50-2000 Hz).50 〜 2,000no
depthCrosstalk cancellation depth (0.0 = bypassed, 1.0 = full cancellation).0 〜 1yes
speaker_angle_degHalf-angle between listener and speakers [deg] (e.g. 30 deg for standard 60-deg equilateral triangle).10 〜 90no
{
  "depth": 0.5,
  "speaker_angle_deg": 30,
  "type": "crosstalk_canceller"
}

How it is computed

1. Δt around the head is derived from speaker_angle_deg
   using the Woodworth spherical head model
2. D = Δt in samples at the internal rate
3. the crossing signal is low passed at 2 kHz (the head shadow)
4. blended into the opposite channel, inverted:

   L_out = norm · ( L - depth · LPF( R(t - D) ) )
   R_out = norm · ( R - depth · LPF( L(t - D) ) )

band_low_hz keeps the cancellation out of the bottom end
Woodworth is the textbook model for the time it takes sound to travel around a sphere the size of a head. The 2 kHz low pass stands for the fact that the far ear hears a duller version.

Using it

  • The speaker angle has to be your actual angle.

    The delay is derived from it. If the value does not match your room, the cancellation lands at the wrong time and the effect collapses, usually into a hollow sound.

  • It is for speakers, not for headphones.

    Headphones have no acoustic crosstalk to cancel, so the node only adds an inverted delayed copy of the other channel.

  • It is a narrow sweet spot by construction.

    The cancellation is correct at one listening position. Moving your head out of it does not damage anything, but the effect goes away.

  • Keep it out of the bass.

    Cancelling low frequencies across channels removes energy rather than repositioning it, which is what band_low_hz is there to prevent.