// Simple Guitar Design version 0.1.0 // Copyright 2009 Kijjasak Triyanond (kijjaz@gmail.com) // This software is protected by the GNU General Public License class kjz_SympatheticString { Gain input => LPF in_f => Delay d1 => Delay d2; samp => d2.max => d2.delay; d1 => Gain d1_g; d2 => Gain d2_g; d1_g => Gain sum; d2_g => sum; sum => Gain feedback => d1; sum => Gain output; // initialization second => d1.max; .55 => d1_g.gain; // direct feedback .45 => d2_g.gain; // filtered feedback .995 => feedback.gain; // overall feedback 10000 => in_f.freq; fun void freq(float x) { second / x => d1.delay; } } Noise s => LPF s_f => Delay d1 => Delay d2; samp => d2.max => d2.delay; d1 => Gain d1_g; d2 => Gain d2_g; d1_g => Gain sum; d2_g => sum; sum => Gain feedback => d1; sum => LPF guitarbody => Dyno master => dac; // initialization second => d1.max; // i'm sure i don't wanna play a note lower than 1Hz for now. guitarbody.set(6000, 2); // filter the outcome of the sound .25 => d1_g.gain; // direct feedback .75 => d2_g.gain; // filtered feedback .997 => feedback.gain; // overall feedback .8 => master.gain; // lower the volumn a bit it case things blows up master.limit(); // PICK TONE SECTION 2 => s_f.Q; // Pick tone sustain 600.0 => float PickTone; .5 => float PickToneFreqMod; // testing: Add sympathetic strings kjz_SympatheticString syms[3]; 48 => Std.mtof => syms[0].freq; 48 + 7 => Std.mtof => syms[1].freq; 48 + 12 => Std.mtof => syms[2].freq; HPF sympathetics => master; 1000 => sympathetics.freq; .05 => sympathetics.gain; for(int i; i < 3; i++) { guitarbody => syms[i].input; syms[i].output => sympathetics; } [0, 7, 12, 14, 15, 14, 12, -2, -4, 7, 12, 14, 15, 14, 12, 19, 17, 7, 8, 10, 12, 7, 8, 6, 7, -5, -1, 2, 5, 9, 11, 14] @=> int Melody1[]; int i; float freq; while(true) { Melody1[i] + 60 => Std.mtof => freq; second / freq => d1.delay; PickTone + freq * PickToneFreqMod => s_f.freq; 1 => s.gain; second / freq => now; 0 => s.gain; .5::second => now; (i + 1) % Melody1.cap() => i; }