Auditory illusion with exponentially-spaced frequencies

I’m sure someone has researched this auditory illusion but it’s new to me. All of the sinewaves have a fixed frequency, but that isn’t what you hear. I’m sure it’s related to the way that linearly-spaced frequencies add up to an impulse.

(
a = {
	// Exponentially-spaced steps
	// 300, 300 * 1.00277, 300 * (1.00277^2), 300 * (1.00277^3) etc.
	var sig = SinOsc.ar((4 ** Array.series(200, 0, 0.002)) * 300).sum;
	(sig * 0.02).dup
}.play;
)

a.free;

hjh

5 Likes

Very nice! Some variations:

{var t = Impulse.ar(freq: 0.1, phase: 0)
;var sinosc = {arg freq; (Phasor.ar(trig: t, rate: (freq * SampleDur.ir), start: 0, end: 1, resetPos: 0) * 2 * pi).sin}
;var k = 160
;var b = TRand.ar(lo: 2, hi: 2.25, trig: t)
;var n = TRand.ar(lo: 0.002, hi: 0.02, trig: t)
;var f0 = TRand.ar(lo: 90, hi: 180, trig: t)
;var fMul = b ** Array.series(size: k, start: 0, step: n)
;var e = EnvGen.ar(envelope: Env.perc(attackTime: 1, releaseTime: 10, level: 0.1), gate: t)
;Splay.ar(sinosc.value(f0 * fMul), spread: 1, level: e, center: 0, levelComp: true)}
2 Likes

This is fascinating - some kind of edge case in our auditory pre-processing maybe - we correlate harmonics and make estimates of resonances unconsciously - somehow that goes wrong in this cases I imagine…

Rising:

(
a = {
	var sig = SinOsc.ar((0..199).lincurve(0, 199, 300, 300 * (4 ** (199 * 0.002)), -2)).sum;
	(sig * 0.02).dup
}.play;
)

hjh

Pseudo-Doppler:

{Splay.ar(SinOsc.ar((2 ** Array.series(100, 0, 0.002)) * 120)) * 0.1}

Psuedo-Doppler-Formants:

{Splay.ar(Saw.ar((2 ** Array.series(100, 0, 0.002)) * 120)) * 0.1}

Oh this thread is so awesome.