I'm trying to make an implementation of the Huggins Binaural Pitch illusion, which is where if you play whitenoise into each ear, but offset one ear by a period $T$ that it will create the illusion of a tone of $1/T$.

Unfortunately when I try this, I don't hear any tone.

I've found a python implementation here, but unfortunately I don't know python (I'm a C++ guy) and while I see that this person is doing some extra filtering work and other things, it's hard to pick apart which extra work may be required versus just dressing.

Here is a 3 second wav file that I've made:


The first 1.5 seconds is white noise. The second half of the sound has the right ear shifted forward 220 samples. The sound file has a sample rate of 44100, so that 220 sample offset corresponds to a period of 0.005 seconds aka 5 milliseconds aka 200hz.

I don't hear a 200hz tone though.

Can anyone tell me where I'm going wrong?

The 160 line single file standalone (no libs/non standard headers etc) c++ code is here: http://pastebin.com/ZCd0wjW1


1 Answer 1


I just glanced at a paper on this subject, and it appears that you should be introducing an inter-aural 0-to-2PI phase shift over a very narrow frequency range, rather than offsetting one signal by T. I can imagine a variety of ways to create the phase-modified noise signal, included filtering a noise signal with a high-Q 2nd-order allpass filter, or by directly creating two noise signals by summing randomly-phased sinusoids, and directly imposing the desired phase(Left)-phase(right) condition by setting the phases of the 2 arrays appropriately.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.