Katie Goonan and Kelly Guld (....our first attempt at any kind of programming...) Our patch is called "The 12 Green Guis". We had no idea of where to start...so we started at the beginning, with sine oscillators and other simple unit generators. We liked the idea of harmonizing and creating quasi-music, and we also wanted to create instrument-like sounds. The sound of the sawtooth waves together reminded us of stringed instruments, and the last two wavetable functions were reminiscent of organs. We stumbled upon the division function and discovered the beauty of the "swoosh". The "swoosh" sounds cool in conjunction with any of the other harmonies, and one can control the swoosh's amplitude and frequency, which only adds to its coolness. We were also intrigued by the pulse count function; it sounds melodic amongst the other, more stagnant harmonies of the sawtooth waves, etc. Basically, these 12 guis are pretty interesting, but should not (we repeat, should NOT) all be played together. Try out a few at a time (the harmonies sound pretty), go crazy with all 12 at once...if you dare. ( //first, the variables var w, //gui window variable s1, s2, s3, //slider variables; control harmonizing sawtooth waves s4, //slider variable, controls harmonizing sine wave s5, s6, //slider variable, controls "swoosher". s5 controls the amplitude of the "swoosh", s6 controls the frequency s7, //slider variable, controls a simple low frequency sine oscillator s8, //slider variable, controls a crazy pulse count function s9, s10, //slider variable for exploring beats. s10 controls the beats of s9. s9 controls the overall frequency. s11, s12; //slider variables, control a harmonizing wavetable exploration //next, the gui window parameters w = GUIWindow.new("panel", Rect.newBy(216, 73, 676, 613)) .backColor_(rgb(238,238,238)); s1 = SliderView.new( w, Rect.newBy(57, 76, 239, 47), "SliderView", 0, 0, 1000, 100, 'linear') .backColor_(rgb(98,214,172)).knobColor_(rgb(108,24,176)); StringView.new( w, Rect.newBy(57, 47, 124, 19), "Our First Sawtooth"); s2 = SliderView.new( w, Rect.newBy(60, 167, 237, 56), "SliderView", 0, 0, 1250, 125, 'linear') .backColor_(rgb(98,214,172)).knobColor_(rgb(108,24,176)); StringView.new( w, Rect.newBy(61, 142, 124, 19), "Our Second Sawtooth"); s3 = SliderView.new( w, Rect.newBy(60, 256, 241, 52), "SliderView", 0, 0, 1500, 150, 'linear') .backColor_(rgb(98,214,172)).knobColor_(rgb(108,24,176)); StringView.new( w, Rect.newBy(61, 232, 124, 19), "Our Third Sawtooth"); s4 = SliderView.new( w, Rect.newBy(64, 342, 238, 54), "SliderView", 0, 0, 1750, 175, 'linear') .backColor_(rgb(98,214,172)).knobColor_(rgb(108,24,176)); StringView.new( w, Rect.newBy(64, 318, 124, 19), "Chill Out, Sawteeth!"); s5 = SliderView.new( w, Rect.newBy(62, 427, 244, 53), "SliderView", 0, 0, 0.75, 0.05, 'linear') .backColor_(rgb(98,214,172)).knobColor_(rgb(108,24,176)); StringView.new( w, Rect.newBy(63, 403, 124, 19), "Amplitude of Shoosh"); s6 = SliderView.new( w, Rect.newBy(63, 517, 247, 54), "SliderView", 1, 1, 10, 1, 'linear') .backColor_(rgb(98,214,172)).knobColor_(rgb(108,24,176)); StringView.new( w, Rect.newBy(62, 487, 124, 19), "Frequency of Shoosh"); s7 = SliderView.new( w, Rect.newBy(362, 76, 232, 50), "SliderView", 0, 0, 440, 10, 'linear') .backColor_(rgb(98,214,172)).knobColor_(rgb(108,24,176)); StringView.new( w, Rect.newBy(360, 44, 128, 20), "Give Me A Sine"); s8 = SliderView.new( w, Rect.newBy(365, 165, 231, 55), "SliderView", 0, 0, 50, 1, 'linear') .backColor_(rgb(98,214,172)).knobColor_(rgb(108,24,176)); StringView.new( w, Rect.newBy(365, 139, 128, 20), "Wow! Pulses Rock!"); s9 = SliderView.new( w, Rect.newBy(366, 254, 230, 53), "SliderView", 0, 0, 200, 1, 'linear') .backColor_(rgb(98,214,172)).knobColor_(rgb(108,24,176)); StringView.new( w, Rect.newBy(365, 229, 128, 20), "Crazy Sounds"); s10 = SliderView.new( w, Rect.newBy(367, 339, 233, 55), "SliderView", 0, 0, 2, 0.1, 'linear') .backColor_(rgb(98,214,172)).knobColor_(rgb(108,24,176)); StringView.new( w, Rect.newBy(369, 316, 128, 20), "Crazy's Beat Control"); s11 = SliderView.new( w, Rect.newBy(370, 426, 233, 54), "SliderView", 0, 0, 300, 30, 'linear') .backColor_(rgb(98,214,172)).knobColor_(rgb(108,24,176)); StringView.new( w, Rect.newBy(368, 401, 128, 20), "First Wavetable"); s12 = SliderView.new( w, Rect.newBy(373, 514, 235, 53), "SliderView", 0, 0, 150, 15, 'linear') .backColor_(rgb(98,214,172)).knobColor_(rgb(108,24,176)); StringView.new( w, Rect.newBy(372, 487, 128, 20), "Wavetable's Partner"); //finally, the hard part: unit generator exploration { //a, b, c are all sawtooth waves, they are controlled by guis in such a way that they create interesting harmonies a = LinPan2.ar(LFSaw.ar((ControlIn.kr(s1)), 0.3), FSinOsc.kr(3)); b = LinPan2.ar(LFSaw.ar((ControlIn.kr(s2)), 0.3), FSinOsc.kr(3)); c = LinPan2.ar(LFSaw.ar((ControlIn.kr(s3)), 0.3), FSinOsc.kr(3)); //d is a sin oscillator which harmonizes with the sawtooth waves and tones down their harsh sounds d = LinPan2.ar(SinOsc.ar((ControlIn.kr(s4)), 0.3), FSinOsc.kr(3)); //e is a really cool division product that produces a "swooshing" noise that compliments the harmonies quite nicely e = PinkNoise.ar(ControlIn.kr(s5)) / FSinOsc.kr((ControlIn.kr(s6)), 0.5, 0.75); //f is a simple sine oscillator, sort of a basis for funky stuff to come f = SinOsc.ar(ControlIn.kr(s7)); //cool pulse count and impulse control. g = SinOsc.ar(PulseCount.ar( Impulse.ar(10), Impulse.ar(0.4)) * (ControlIn.kr(s8)), 0, 0.5); //t is the definition of the variable necessary for the chorusing wavetable oscillator t = Wavetable.sineFill(512, 2.0/[1,3,5,7,9,11,13,15]); //h, i, j all use t in their functions. h explores using beats in conjunction with frequency, both controlled by guis //i and j are simple, but interesting, harmonies of chorusing wavetable oscillators. h = COsc.ar(t, (ControlIn.kr(s9)), (ControlIn.kr(s10)), 0.5); i = COsc.ar(t, (ControlIn.kr(s11)), 0.5, 0.5); j = COsc.ar(t, (ControlIn.kr(s12)), 0.5, 0.5); //the following adds all of the waves so that we can play them in together under the control of guis (a + b + c + d + e + f + g + h + i + j) }.play )