// ambiophonic processor // // Improved phase cancelation using subtraction // of the channels first tried by Howard Moscovitz, // No filters, no feedback. I have found it sounds // better this way // July 8, 2008 // Howard Moscovitz // // July 13, 2008 // Les Hall // modified to be a class, to work with adc input, // and added a MAUI volume slider // instantiate the classes ambio A; MAUI_stuff M; // the patch adc.left => A.L_in; adc.right => A.R_in; A.L_out => dac.left; A.R_out => dac.right; // the patch parameters M.volume_slider.value () / 100.0 => dac.gain; // time after time... while (true) { second => now; } // define the class class ambio { Gain L_in => Gain L_minus; Gain R_in => Gain R_minus; -1 => L_minus.gain => R_minus.gain; L_in => Gain L_prime; R_minus => L_prime; R_in => Gain R_prime; L_minus => R_prime; L_prime => DelayA L_delay; R_prime => DelayA R_delay; 0.080::ms => dur delay; L_delay.max (10*delay); L_delay.delay (delay); R_delay.max (10*delay); R_delay.delay (delay); -1.0 => L_delay.gain => R_delay.gain; R_delay => Gain L_out; L_in => L_out; L_delay => Gain R_out; R_in => R_out; 0.5 => L_out.gain => R_out.gain; } // MAUI Slider class MAUI_stuff { MAUI_View control_view; MAUI_Slider volume_slider; control_view.size (200, 75); control_view.name ("Volume"); control_view.display (); volume_slider.name ("Volume, %"); volume_slider.range (0, 100); volume_slider.value (20); volume_slider.size (200, 75); volume_slider.position (0, 0); control_view.addElement (volume_slider); fun void volume_adjust () { while (true) { volume_slider.onChange () => now; volume_slider.value () / 100.0 => dac.gain; } } spork ~ volume_adjust (); }