// title: Vanguard - A1: Karplus-Strong Synthesis (musc-115-pluck) // author: Jonathan Coon // description: // This piece is a remix of my previous piece called "Avant Garde" in which a plucking synthesizer is used. In this piece, I have modified the plucking synth and have added more functionality, including reverb and vibrato control. // // Listen to the piece here: https://soundcloud.com/jonathan-coon/vanguard-musc-115-pluck // code: /******************************************/ // Jonathan Coon // A1: Karplus-Strong Synthesis // MUSC 115 - Experimental Sound Design // Santa Clara University // 10/29/2014 /******************************************/ // This piece is a remix of my previous piece called "Avant Garde" in which a plucking // synthesizer is used. In this piece, I have modified the plucking synth and have added // more functionality, including reverb and vibrato control. /************************/ // SYNTH DEFINITION /************************/ ( SynthDef("plucking2.0", {arg amp = 0.1, freq = 440, decay = 5, coef = 0.1, verbMix = 0.9, verbSize = 0.9, verbDamp = 0.0001, vibratoRate = 7, vibratoMul = 10, pan = 0; var env, snd, vibrato; env = Env.linen(0, decay, 0).kr(doneAction: 2); vibrato = SinOsc.kr(freq: vibratoRate, mul: freq/vibratoMul); snd = Pluck.ar( in: GrayNoise.ar(amp), trig: Impulse.kr(0), maxdelaytime: 0.1, delaytime: freq.reciprocal, decaytime: decay, coef: coef); snd = FreeVerb.ar(in: snd, mix: verbMix, room: verbSize, damp: verbDamp); snd = Pan2.ar(snd, pan); Out.ar(0, Splay.ar(snd, spread: 0.75, level: SinOsc.kr(freq: vibrato), center: 0)); }).add; ) /************************/ // ARRANGEMENT /************************/ s.record("/Users/jdcoon/SCU/Fall 2014/MUSC 115/A1/Pluck-Jonathan_Coon.wav"); s.stopRecording; ( Pseq( [ ~twinkle, Ppar([~phaser, ~accent, Pn(~twinkle, 2)], 1), Ppar([~melody, ~drums], 2), Pn(~romanianMinor, 2), ~spanish, ~mixolydian, ~egyptian2, Ppar([Pn(~egyptian1,2), ~egyptian2]), ~egyptian3, Ppar([Pn(~egyptian1,2), ~egyptian2, Pn(~egyptian3,2)]), ~freq1, Ppar([~freq1, ~siren2], 1), ~freq3, Ppar([~freq2, ~siren1], 1), Ppar([~up, ~down], 1), ~twinkle ] ).play; ) /************************/ // PATTERNS /************************/ // Twinkle ( ~twinkle = Pbind( \instrument, "plucking2.0", \scale, Scale.major, \degree, Pwhite(0,12), \ctranspose, 36, \amp, Pwhite(0.5, 0.9), \decay, Pwhite(7, 12), \coef, Pwhite(0.01, 0.1), \verbMix, 0.5, \verbSize, 0.9, \verbDamp, 0.2, \vibratoRate, 0.1, \vibratoMul, 10, \dur, Prand([3/16, 3/8, 1/8, 1/16], 50); ); ) // Phaser ( ~phaser = Pbind( \instrument, "plucking2.0", \freq, 40, \amp, 0.8, \decay, Pseg(Pseq((0.1, 0.5 .. 7)), Pgeom(7,0.8)), \coef, 0.1, \verbMix, Pgeom(0, 1.1), \verbSize, Pgeom(0, 1.1), \verbDamp, Pgeom(0, 1.1), \vibratoRate, 7, \vibratoMul, 10, \dur, Pseq([0.25/2], inf), \pan, Pseq([-1, 1], inf) ); ) // Accent ( ~accent = Pbind( \instrument, "plucking2.0", \degree, 0, \ctranspose, 24, \amp, 3.3, \decay, 1, \coef, 0.1, \verbMix, 0.5, \verbSize, 0.9, \verbDamp, 0.5, \vibratoRate, 1, \vibratoMul, 1, \dur, Pseq([3/8, 3/8, 1.25], 20), \pan, Pseq([Pn(-1, 3), Pn(1, 3), Pn(-0.7, 3), Pn(0.7, 3), Pn(-0.1, 3), Pn(0.1, 3)], inf) ); ) // Romanian Minor Scale ( ~romanianMinor = Pbind( \instrument, "plucking2.0", \scale, Scale.romanianMinor, \degree, Pwhite(0, 15), \amp, Pwhite(0.3, 0.7) * 2, \decay, Pwhite(7, 12), \coef, Pwhite(0.01, 0.1), \verbMix, 0.5, \verbSize, 0.1, \verbDamp, 0.3, \vibratoRate, 0.2, \vibratoMul, 0.02, \dur, Prand([0.1, 0.2, 0.4, 0.27, 0.13, 0.38], 50) ); ) // Melody ( ~melody = Pbind( \instrument, "plucking2.0", \degree, Pwhite(0,5), \ctranspose, -12/2, \amp, 1.8, \decay, 1, \coef, 0.1, \verbMix, 0.5, \verbSize, 0.5, \verbDamp, 0.5, \vibratoRate, 7, \vibratoMul, 0.01, \dur, Pseq([3/8, 3/8, 1, 1/16, 1/16, 1/16], 5), ); ) // Drums ( ~drums = Pbind( \instrument, "plucking2.0", \degree, Pwhite(0,5), \ctranspose, -12*4, \amp, 1.8, \decay, 1, \coef, 0.5, \verbMix, 0.5, \verbSize, 0.5, \verbDamp, 0.5, \vibratoRate, 2, \vibratoMul, 0.01, \dur, Pseq([3/8, 3/8, 1, 1/16, 1/16, 1/16], 5), ); ) // Spanish ( ~spanish = Pbind( \instrument, "plucking2.0", \scale, Scale.spanish, \degree, Pseq([Pwhite([-7, -3, 1, 5], [-4, 0, 4, 8]), Pwhite([5, 1, -3, -7], [8, 4, 0, -4])], inf), \ctranspose, 12, \strum, 0.03, \amp, 1.2, \decay, 4, \coef, 0.2, \verbMix, 0.5, \verbSize, 0.1, \verbDamp, 0.5, \vibratoRate, 0.2, \vibratoMul, 100, \dur, Pseq([3/4, 1/4, 1/2, 1/2], 3), ); ) // Mixolydian ( ~mixolydian = Pbind( \instrument, "plucking2.0", \scale, Scale.mixolydian, \degree, Pwhite(0, 15), \ctranspose, -12, \amp, 2, \decay, 7, \coef, 0.4, \verbMix, 0.5, \verbSize, 0.9, \verbDamp, 0.5, \vibratoRate, 0.1, \vibratoMul, 100, \dur, Pxrand([1/3, 1/2, 1], 128/2), ); ) // Egyptian ( ~egyptian1 = Pbind( \instrument, "plucking2.0", \scale, Scale.egyptian, \degree, Pseq([Pwhite([-7, -3, 1, 5], [-4, 0, 4, 8]), Pwhite([5, 1, -3, -7], [8, 4, 0, -4])], inf), \ctranspose, 12, \strum, 0.04, \amp, 1.8, \decay, 1, \coef, 0.25, \verbMix, 0.5, \verbSize, 0.9, \verbDamp, 0.5, \vibratoRate, 0.1, \vibratoMul, 100, \dur, Pn(1/8, 32), ); ) ( ~egyptian2 = Pbind( \instrument, "plucking2.0", \scale, Scale.egyptian, \degree, Pseq([Pwhite([-7, -3, 1, 5], [-4, 0, 4, 8]), Pwhite([5, 1, -3, -7], [8, 4, 0, -4])], inf), \ctranspose, 12, \strum, 0.06, \amp, 12, \decay, 0.1, \coef, 0.25, \verbMix, 0.5, \verbSize, 0.9, \verbDamp, 0.5, \vibratoRate, 1, \vibratoMul, 100, \dur, Pn(1/4, 32), ); ) ( ~egyptian3 = Pbind( \instrument, "plucking2.0", \scale, Scale.egyptian, \degree, Pseq([Pwhite([-7, -3, 1, 5], [-4, 0, 4, 8]), Pwhite([5, 1, -3, -7], [8, 4, 0, -4])], inf), \ctranspose, 12, \strum, 0.02, \amp, 2.3, \decay, 0.1, \coef, 0.1, \verbMix, 0.3, \verbSize, 0.9, \verbDamp, 0.5, \vibratoRate, 2, \vibratoMul, 0.1, \dur, Pn(1/8, 32), ); ) // Freq1 ( ~freq1 = Pbind( \instrument, "plucking2.0", \freq, Pwhite(0, 880), \amp, 0.4, \decay, 50, \coef, 0.1, \vibratoRate, Ppoisson(7.0), \dur, Pseq([Prand([0.51, 0.1, 0.1], 4), Pwhite(0, 4, 4), Pwhite(0, 1, 4)], 2), \pan, Pwhite(-1, 1) ); ) // Freq2 ( ~freq2 = Pbind( \instrument, "plucking2.0", \freq, Pwhite(0, 880), \amp, 0.35, \decay, 50, \coef, 0.1, \vibratoRate, Pgauss(0.0, 1.0), \dur, Pwrand([Prand([0.51, 0.1, 0.1], 4), Pwhite(0, 4, 8), Pwhite(0, 1, 4)], [0.9, 0.05, 0.05] , 4), \pan, Pwhite(-1, 1) ); ) // Freq3 ( ~freq3 = Pbind( \instrument, "plucking2.0", \freq, Pwhite(0, 880), \amp, 0.5, \decay, 50, \coef, 0.1, \vibratoRate, Pgauss(0.0, 100.0), \dur, Pwrand([Prand([0.51, 0.1, 0.1], 4), Pwhite(0, 4, 1), Pwhite(0, 1, 1)], [0.5, 0.25, 0.25] , 10), \pan, Pwhite(-1, 1) ); ) // Siren1 ( ~siren1 = Pbind( \instrument, "plucking2.0", \freq, Pseq([Pseries(600, -4, 100), Pseries(100, 4, 1000)], 1), \amp, 0.5, \decay, 0.7, \coef, 0, \verbMix, 1, \verbSize, 1, \verbDamp, 0.01, \dur, 0.04, \pan, Pseq((1, 0.99 .. -1) ++ (-1, -0.99 .. 1), inf) ); ) // Siren2 ( ~siren2 = Pbind( \instrument, "plucking2.0", \freq, Pseq([Pseries(600, 4, 100), Pseries(1000, -4, 100)], 1), \amp, 6.4, \decay, 0.1, \coef, 0, \verbMix, 1, \verbSize, 0.8, \verbDamp, 0.5, \vibratoRate, 0.01, \vibratoMul, 0.01, \dur, 0.04 ); ) // Ending ( ~up = Pbind( \instrument, "plucking2.0", \degree, 0, \ctranspose, Pseries(24, 0.1), \amp, Pseq([Pseries(0.7,0.1,3), Pseries(0.9,-0.1,3)], 24), \decay, 1, \coef, Pseq([Pseries(0.1,0.1,3), Pseries(0.9,-0.1,3)], 24), \verbMix, 1, \verbSize, 1, \verbDamp, 0.9, \vibratoRate, 1, \vibroatoMul, 0.1, \dur, 1/16 ); ~down = Pbind( \instrument, "plucking2.0", \degree, 0, \ctranspose, Pseries(24, -1), \amp, Pseq([Pseries(0.7,0.1,1), Pseries(0.9,-0.1,1)], 64), \decay, 1, \coef, Pseq([Pseries(0.1,0.1,1), Pseries(0.9,-0.1,1)], 64), \verbMix, 1, \verbSize, 1, \verbDamp, 0.9, \vibratoRate, 10, \vibroatoMul, 0.1, \dur, 1/16 ); )