// title: Villainous - 115granular // author: melliott // description: // SoundCloud: // https://soundcloud.com/mileselliott/villainous-115gran/s-2BERP // // Samples: // https://drive.google.com/open?id=0B_RfpesVhgStVGdqWTVsV0lUeHM // code: ( a = Buffer.read(s, "C:/Users/Xtlas/Desktop/Villainous.wav"); b = Buffer.read(s, "C:/Users/Xtlas/Desktop/fsa.wav"); ) // SynthDefs ( SynthDef("vox", {arg rate = 1, amp = 1, buffer, startPos = 0, attack = 0.02, release = 0.5, ffreq = 1000, rq = 0.1, panning = 0; var snd, env; env = Env.perc(attackTime: attack, releaseTime: release, level: amp).kr(doneAction: 2); snd = PlayBuf.ar( numChannels: 2, bufnum: buffer, rate: rate, startPos: startPos.linlin(0, 1, 0, BufFrames.kr(buffer)) ); snd = snd * env; snd = BPF.ar(snd, ffreq, rq); snd = Pan2.ar(snd, panning); Out.ar(0, snd); }).add; SynthDef("granny2", {arg rate = 1, amp = 1, buffer, startPos = 0, attack = 0.02, release = 0.5, ffreq = 1000, rq = 0.1, panning = 0; var snd, env; env = Env.perc(attackTime: attack, releaseTime: release, level: amp).kr(doneAction: 2); snd = PlayBuf.ar( numChannels: 1, bufnum: buffer, rate: rate, startPos: startPos.linlin(0, 1, 0, BufFrames.kr(buffer)) ); snd = snd * env; snd = BPF.ar(snd, ffreq, rq); snd = Pan2.ar(snd, panning); Out.ar(0, snd); }).add; SynthDef("granny2verb", {arg rate = 1, amp = 1, buffer, startPos = 0, attack = 0.02, release = 0.5, ffreq = 1000, rq = 0.1, panning = 0; var snd, env; env = Env.perc(attackTime: attack, releaseTime: release, level: amp).kr(doneAction: 2); snd = PlayBuf.ar( numChannels: 1, bufnum: buffer, rate: rate, startPos: startPos.linlin(0, 1, 0, BufFrames.kr(buffer)) ); snd = snd * env; snd = BPF.ar(snd, ffreq, rq); snd = Pan2.ar(snd, panning); snd = FreeVerb.ar(snd, 0.8); Out.ar(0, snd); }).add; SynthDef("kick", {arg out = 0, amp = 0.5, sinfreq = 60, glissf = 0.9, att = 0.01, rel = 0.45, pan = 0; var env, snd, ramp; env = Env.perc( attackTime: att, releaseTime: rel, level: amp).kr(2); // start from sinfreq, go to sinfreq times glissf factor, over rel duration. ramp = XLine.kr( start: sinfreq, end: sinfreq * glissf, dur: rel ); snd = SinOsc.ar( freq: ramp, phase: 0, mul: env, add: 0); snd = Pan2.ar(snd, pan); Out.ar(out, snd); }).add; SynthDef("hihat", {arg out = 0, amp = 0.5, att = 0.01, rel = 0.2, ffreq = 12000, pan = 0; var env, snd; env = Env.perc( attackTime: att, releaseTime: rel, level: amp).kr; snd = WhiteNoise.ar( mul: env, add: 0); snd = LPF.ar( in: snd, freq: ffreq, mul: 1, add: 0); Out.ar(out, Pan2.ar(snd, pan)); }).add; SynthDef("bass", {arg out = 0, amp = 0.5, att = 0.01, rel = 0.2, freq = 440, pan = 0; var env, snd; env = Env.perc( attackTime: att, releaseTime: rel, level: amp).kr; snd = Pulse.ar(freq: freq, mul: env); snd = LPF.ar( in: snd, freq: freq, mul: 1, add: 0); Out.ar(out, Pan2.ar(snd, pan)); }).add; ) ( ~chords = Pbind( \instrument, "granny2", \rate, 1, \amp, 20, \startPos, 0, \attack, 0.02, \release, 0.2, \ffreq, midicps(Pseq([ Pn([60, 63, 67], 4), Pn([59, 63, 67], 4), Pn([58, 63, 67], 4), Pn([53, 60, 65], 4), ], 2) + 2), \rq, 0.002, \buffer, b, // which buffer to play from \dur, 0.5, \panning, Pwhite(-0.1, 0.1), ); ( ~chordsverb = Pbind( \instrument, "granny2verb", \rate, 1, \amp, 5, \startPos, 0, \attack, 0.2, \release, 2.5, \ffreq, midicps(Pseq([ Pn([60, 63, 67], 4), Pn([59, 63, 67], 4), Pn([58, 63, 67], 4), Pn([53, 60, 65], 4), ], 2) + 2), \rq, 0.002, \buffer, b, // which buffer to play from \dur, 0.5, \panning, Pwhite(-0.1, 0.1), ); ~higher1 = Pbind( \instrument, "granny2", \rate, 1, \amp, 15, \startPos, 0.9, \attack, 0.05, \release, 0.5, \ffreq, midicps(Pseq([ 70, 72, 75, 72, 70, 72, 75, 72, 79, 77, 77, 79, 77, 75, 72, 0, 79, 82, 84, 87, 0, 86, 84, 82, 0, 82, 84, 79, 70, 72, 75, 0 ], 1) + 2), \rq, 0.01, \buffer, b, // which buffer to play from \dur, Pseq([ 0.5, 0.5, 0.5, 0.5, 0.3, 0.5, 0.5, 0.7, 0.5, 0.5, 0.5, 0.5, 0.3, 0.5, 0.5, 0.7, 0.5, 0.5, 0.5, 0.5, 0.5, 0.3, 0.5, 0.7, 0.5, 0.5, 0.5, 0.5, 0.3, 0.5, 0.5, 0.7 ], 1), \panning, Pwhite(-0.5, 0.5) ); ~higher2 = Pbind( \instrument, "granny2", \rate, 1, \amp, 15, \startPos, 0.9, \attack, 0.05, \release, 0.5, \ffreq, midicps(Pseq([ 70, 72, 75, 72, 70, 72, 75, 72, 79, 77, 77, 79, 77, 75, 72, 0, 79, 75, 79, 82, 0, 86, 84, 82, 82, 82, 84, 79, 70, 72, 75, 0 ], 1) + 2), \rq, 0.01, \buffer, b, // which buffer to play from \dur, Pseq([ 0.5, 0.5, 0.5, 0.5, 0.3, 0.5, 0.5, 0.7, 0.5, 0.5, 0.5, 0.5, 0.3, 0.5, 0.5, 0.7, 0.5, 0.5, 0.5, 0.5, 0.5, 0.3, 0.5, 0.7, 0.5, 0.5, 0.5, 0.5, 0.3, 0.5, 0.5, 0.7 ], 1), \panning, Pwhite(-0.5, 0.5) ); ~blow = Pbind( \instrument, "granny2", \rate, 2.6, \amp, 1, \ffreq, midicps(70 + 2), \startPos, 0.1, \attack, 0.0, \release, 1.5, \rq, 0.6, \buffer, b, // which buffer to play from \dur, Pn(1, 1), \panning, 0 ); ~blow2 = Pbind( \instrument, "granny2", \rate, Pseq([3.0, 2.6], inf), \amp, Pseq([Pn(0, 6), 1, 0.9], 2), \ffreq, midicps(Pseq([ 72, 70 ], inf) + 2), \startPos, 0.1, \attack, 0.0, \release, 1.5, \rq, 0.6, \buffer, b, // which buffer to play from \dur, 1, \panning, Pseq([-0.5, 0.5], inf) ); ~lyrics = Pbind( \instrument, "vox", \rate, 1, \amp, 0.63, //\ffreq, midicps(70), \startPos, 0.0001, \attack, 0.0, \release, 999, \rq, 10, \buffer, a, // which buffer to play from \dur, Pn(1, 1), \panning, 0 ); ~bgvox = Pbind( \instrument, "vox", \rate, -8, \amp, 3, \startPos, 1, \attack, 0.0, \release, 999, \rq, 0.1, \ffreq, 145, \buffer, a, // which buffer to play from \dur, Pn(1, 1), \panning, 0 ); ~kick = Pbind( \instrument, "kick", \amp, 1, \rel, 1, \dur, Pseq([1.5, 2, 0.25, 0.25], 4), \sinfreq, 67, \glissf, 0.9 ); ~hat = Pbind( \instrument, "hihat", \dur, Pseq([Pn(0.25, 7), Pn(0.05, 5), Pn(0.25, 8)], 4), \amp, Pseq([0.15, 0.18], inf)/3, \glissf, 0.2, \ffreq, 10000, \rel, 0.1 ); ~clap = Pbind( \instrument, "hihat", \midinote, Pseq([1], inf), \dur, 1, \amp, Pseq([0, 0, 0.85, 0], 4), \ffreq, 2000, \glissf, 0.2, \rel, 1.5 ); ~bass = Pbind( \instrument, "bass", \midinote, Pseq([62, 61, 60, 55], 2), \dur, Pseq([Pn(2, 4)], inf), \amp, 0.8, \rel, 3, \ctranspose, -24 ); ~bass2 = Pbind( \instrument, "bass", \midinote, Pseq([62, 61, 60, 55], 2), \dur, Pseq([Pn(2, 4)], inf), \amp, 0.5, \rel, 3, \ctranspose, -36 ); Pspawner({ arg maestro; TempoClock.default.tempo = 90/60; maestro.seq(Ppar([~chords, ~chordsverb])); maestro.seq(Ppar([~chords, ~chordsverb, ~bgvox])); maestro.seq(Ppar([~chords, ~chordsverb, ~hat, ~lyrics])); maestro.seq(Ppar([~chords, ~chordsverb, ~hat, ~higher1])); maestro.seq(Ppar([~chords, ~chordsverb, ~hat, ~higher2])); maestro.seq(Ppar([~chords, ~chordsverb, ~hat, ~higher1, ~clap, ~kick, ~blow2, ~blow, ~bass, ~bass2])); maestro.seq(Ppar([~chords, ~chordsverb, ~hat, ~higher2, ~clap, ~kick, ~blow2, ~blow, ~bass, ~bass2])); maestro.seq(Ppar([~chords, ~chordsverb, ~hat])); maestro.seq(Ppar([~chords, ~chordsverb, ~hat])); maestro.seq(Ppar([~chords, ~chordsverb, ~hat, ~higher1, ~clap, ~kick, ~blow2, ~blow, ~bass, ~bass2])); maestro.seq(Ppar([~chords, ~chordsverb, ~hat, ~higher2, ~clap, ~kick, ~blow2, ~blow, ~bass, ~bass2])); TempoClock.default.tempo = 900; maestro.seq(Ppar([~chords, ~chordsverb, ~hat, ~higher1, ~clap, ~kick, ~blow2, ~blow, ~bass, ~bass2])); maestro.seq(Ppar([~chords, ~chordsverb, ~hat, ~higher2, ~clap, ~kick, ~blow2, ~blow, ~bass, ~bass2])); maestro.seq(Ppar([~chords, ~chordsverb, ~hat, ~higher1, ~clap, ~kick, ~blow2, ~blow, ~bass, ~bass2])); maestro.seq(Ppar([~chords, ~chordsverb, ~hat, ~higher2, ~clap, ~kick, ~blow2, ~blow, ~bass, ~bass2])); maestro.suspendAll; TempoClock.default.tempo = 1 }).play ) )