// Binaural Shifter // Copyright 2009 Les Hall // // Single Side Band Modulation technique // Developed by Donald K. Weaver, 1956 // http://www.cim.mcgill.ca/~clark/nordmodularbook/nm_spectrum_shift.html // parameters 100 => float fdelta; class modulate { second/samp/4 => float f; Gain input; input => Gain multSin1 => LPF lpf1 => Gain multSin2 => Gain sum => Gain output; SinOsc sin1 => multSin1; SinOsc sin2 => multSin2; input => Gain multCos1 => LPF lpf2 => Gain multCos2 => sum; SinOsc cos1 => multCos1; SinOsc cos2 => multCos2; 3 => multSin1.op => multSin2.op => multCos1.op => multCos2.op; 0.25 => cos1.phase => cos2.phase; f => lpf1.freq => lpf2.freq; fun void set(int sign) { if (sign > 0) { f => sin1.freq => cos1.freq; f + fdelta => sin2.freq => cos2.freq; } else { f + fdelta => sin1.freq => cos1.freq; f => sin2.freq => cos2.freq; } } } modulate left; modulate right; left.set(1); right.set(-1); SinOsc osc => left.input; osc => right.input; 100 => osc.freq; 0.25 => osc.gain; left.output => dac.left; right.output => dac.right; // time loop while (true) { second => now; }