// title: "The Hills" - The Weeknd // author: melliott // description: // This is a cover of a song by Abel Tesfaye titled "The Hills" done in SuperCollider. // // You can find the original here. // WARNING: VIDEO IS SOMEWHAT GRAPHIC. LYRICS ARE NSFW. // https://www.youtube.com/watch?v=yzTuBuRdAyA // code: /////////////////////////////////////// /////// RUN THE SYNTH DEFS ////////// /////////////////////////////////////// ( 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(doneAction: 2); 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("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(doneAction: 2); 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("plucking", {arg amp = 0.1, freq = 440, decay = 5, dampen = 0.1; var env, snd; env = Env.linen(0.5, decay, 0).kr(doneAction: 2); snd = Pluck.ar( in: WhiteNoise.ar(amp), trig: Impulse.kr(0), maxdelaytime: 0.1, delaytime: (freq*2).reciprocal, decaytime: decay, coef: dampen); snd = snd * env; Out.ar(0, [snd, snd]); }).add; SynthDef("sawSynth", { arg freq = 440, amp = 0.1, att = 0.1, rel = 2, lofreq = 1000, hifreq = 3000; var env, snd; env = Env.perc( attackTime: att, releaseTime: rel, level: amp ).kr(doneAction: 2); snd = Saw.ar(freq: freq * [0.99, 1, 1.001, 1.008], mul: env); snd = LPF.ar( in: snd, freq: LFNoise2.kr(1).range(lofreq, hifreq) ); snd = Splay.ar(snd); Out.ar(0, snd); }).add; ) /////////////////////////////////////// //////// RUN ME vvvvv RUN ME ////////// /////////////////////////////////////// ( // 113/60 is the BPM of the song propper. t = TempoClock.new(128/60); // 'transp1' should be '1' in the song propper. ~transp1 = 0; ~transp2 = ~transp1 - 1; { var chords = Pbind( \instrument, \sawSynth, \midinote, Pseq([ [35, 38, 42], [31, 35, 38], [28, 31, 35], [35, 38, 43] ] + ~transp1, inf) + 12, \dur, 8, \amp, 0.6, \rel, 8 ); var hibells = Pbind( \instrument, \plucking, \midinote, Pseq([ 67, 66, 64, 62, 59, 62, 64, 66 ] + ~transp1, inf) + 12, \dur, 1, \amp, 1, \rel, 1 ); var hibells2 = Pbind( \instrument, \sawSynth, \midinote, Pseq([ 67, 66, 64, 62, 59, 62, 64, 66 ] + ~transp1, inf) + 12, \dur, 1, \amp, 0.2, \rel, 1 ); var kick1 = Pbind( \instrument, "kick", \midinote, Pseq([1], inf), \amp, Pseq([2, 2, 0, 0], inf), \rel, 1, \dur, Pseq([1.5, 0.5, 1, 1], inf), \sinfreq, Pseq([45, 45, \rest, \rest], inf), \glissf, 0.5 ); var hihats = Pbind( \instrument, "hihat", \dur, 0.5, \amp, Pseq([0.1, 0.3, 0.3, 0.3], inf), \glissf, 0.2, \rel, 0.05 ); var clap = Pbind( \instrument, "hihat", \midinote, Pseq([1], inf), \dur, 1, \amp, Pseq([0, 0, 1, 0], inf), \ffreq, 2000, \glissf, 0.2, \rel, 1.5 ); var scream = Pbind( \instrument, "kick", \sinfreq, Pseq([500], 1), \dur, 10, \amp, 0.6, \rel, 4, \glissf, 10 ); var abel0 = Pbind( \instrument, \sawSynth, \midinote, Pseq([ 66, 66, 66, 66, 69, 66, 64, 62, 64, 62 ] + ~transp1, 4), \dur, Pseq([ 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1, 3 ], 4), \amp, 0.9, \rel, 1 ); var abel1 = Pbind( \instrument, \sawSynth, \midinote, Pseq([ 66, 66, 66, 69, 66, 64, 62, ] + ~transp1, 1) + 12, \dur, 0.5, \amp, 0.9, \rel, 1 ); var abel2 = Pbind( \instrument, \sawSynth, \midinote, Pseq([ 64,59,62 ] + ~transp1, 1) + 12, \dur, 2, \amp, 0.9, \rel, 1 ); var abel3 = Pbind( \instrument, \sawSynth, \midinote, Pseq([ 64, 64, 66, 64, 62 ] + ~transp1, 1) + 12, \dur, Pseq([2, 0.2, 0.2, 1.6, 2], 1), \amp, 0.9, \rel, 1 ); var abel4 = Pbind( \instrument, \sawSynth, \midinote, Pseq([ 64, 59, 62, 64, 59, 62, ] + ~transp1, 3) + 12, \dur, Pseq([0.75,0.75,0.5, 0.75,0.75,0.5], 3), \amp, 0.9, \rel, 1 ); var piano = Pbind( \instrument, \plucking, \midinote, Pseq([ Pn([60, 63, 67], 8), Pn([68, 72, 63], 8), Pn([65, 68, 72], 8), Pn([68, 71, 63], 8), ] + ~transp2, 2), \dur, 1, \amp, 0.6, \rel, 1 ); var piano2 = Pbind( \instrument, \sawSynth, \midinote, Pseq([ Pn([60, 63, 67], 8), Pn([68, 72, 63], 8), Pn([65, 68, 72], 8), Pn([68, 71, 63], 8), ] + ~transp2, 2), \dur, 1, \amp, 0.3, \rel, 1 ); var abel6 = Pbind( \instrument, \sawSynth, \midinote, Pseq([ \rest, \rest, 72, 82, 82, 79, 72, 82, 82, 74, 72, 70, 72 ] + ~transp2, 1), \dur, Pseq([ 1, 0.5, 0.5, 0.75, 0.75, 2, 0.5, 0.75, 0.75, 3, 0.5, 0.5, 2 ], 4), \amp, 0.9, \rel, 1 ); var abel7 = Pbind( \instrument, \sawSynth, \midinote, Pseq([ 79, 82, 84, 79, 77, 75, \rest, 79, 82, 84, 79, 77, 75, 75, 74, 70, 72 ] + ~transp2, 1), \dur, Pseq([ 0.25, 0.25, 3.5, 0.5, 0.5, 2.5, 0.5, 0.25, 0.25, 3.5, 0.5, 0.5, 2.5, 0.5, 0.5, 0.5, 0.5 ], 4), \amp, 0.9, \rel, 1 ); var abel8 = Pbind( \instrument, \sawSynth, \midinote, Pseq([ 79, 82, 84, 79, 77, 75, \rest, 79, 82, 84, 84, 87, 86 ] + ~transp2, 1), \dur, Pseq([ 0.25, 0.25, 3.5, 0.5, 0.5, 2.5, 0.5, 0.25, 0.25, 3.5, 0.5, 0.5, 3.5 ], 4), \amp, 0.9, \rel, 1 ); ~chordsPlayer = chords.play(t); 32.wait; abel0.play(t); //Your man on the road... ~hibellsPlayer = hibells.play(t); ~hibells2Player = hibells2.play(t); 32.wait; ~hihatsPlayer = hihats.play(t); ~clapPlayer = clap.play(t); abel0.play(t); //I can't find your house... 30.wait; ~chordsPlayer.stop; ~hibellsPlayer.stop; ~hibells2Player.stop; ~hihatsPlayer.stop; ~clapPlayer.stop; scream.play(t); //AHHHHHH 2.25.wait; abel1.play(t); //I only call you when it's 3.5.wait; ~chordsPlayer.reset.play(t); ~hihatsPlayer.reset.play(t); ~clapPlayer.reset.play(t); ~kick1Player = kick1.play(t); abel2.play(t); //Half-past-five. 4.5.wait; abel1.play(t); //The only time that I'll 3.5.wait; abel2.play(t); //be by your side 4.5.wait; abel1.play(t); //I only love it when you 3.5.wait; abel4.play(t); //Touch me, Not feel me... uh... awkardddddd.... etc. 12.5.wait; abel1.play(t); //I only call you when it's 3.5.wait; abel2.play(t); //Half-past-five. 4.5.wait; abel1.play(t); //The only time that I'll 3.5.wait; abel3.play(t); //be by yOUr side 4.5.wait; abel1.play(t); //I only love it when you 3.5.wait; abel4.play(t); //Touch me, Not feel me... uh... awkardddddd.... etc. 12.5.wait; ~chordsPlayer.stop; ~hihatsPlayer.stop; 2.wait; ~kick1Player.stop; ~clapPlayer.stop; 1.5.wait; ///////////////////////////////////// Verse + Chorus abel0.play(t); ~chordsPlayer.reset.play(t); ~hibellsPlayer = hibells.play(t); ~hibells2Player = hibells2.play(t); 32.wait; ~hihatsPlayer = hihats.play(t); ~clapPlayer = clap.play(t); abel0.play(t); 30.wait; ~chordsPlayer.stop; ~hibellsPlayer.stop; ~hibells2Player.stop; ~hihatsPlayer.stop; ~clapPlayer.stop; scream.play(t); //AHHHHHH 2.25.wait; abel1.play(t); //I only call you when it's 3.5.wait; ~chordsPlayer.reset.play(t); ~hihatsPlayer.reset.play(t); ~clapPlayer.reset.play(t); ~kick1Player = kick1.play(t); abel2.play(t); //Half-past-five. 4.5.wait; abel1.play(t); //The only time that I'll 3.5.wait; abel3.play(t); //be by your side 4.5.wait; abel1.play(t); //I only love it when you 3.5.wait; abel4.play(t); //Touch me, Not feel me... uh... awkardddddd.... etc. 12.5.wait; abel1.play(t); //I only call you when it's 3.5.wait; abel2.play(t); //Half-past-five. 4.5.wait; abel1.play(t); //The only time that I'll 3.5.wait; abel3.play(t); //be by your side 4.5.wait; abel1.play(t); //I only love it when you 3.5.wait; abel4.play(t); //Touch me, Not feel me... uh... awkardddddd.... etc. 12.5.wait; ~chordsPlayer.stop; ~hihatsPlayer.stop; 2.wait; ~kick1Player.stop; ~clapPlayer.stop; 1.5.wait; ///////////////////////////////////// Bridge ~pianoPlayer = piano.play(t); ~piano2Player = piano2.play(t); abel6.play(t); //The hills have eyes... 15.wait; abel7.play(t); //Who are you... Who are you... 17.wait; abel6.play(t); //Hide your eyes... 15.wait; abel8.play(t); //Who are you... Who are youuuuu... 19.wait; ///////////////////////////////////// Chorus Only abel1.play(t); //I only call you when it's 3.5.wait; ~chordsPlayer.reset.play(t); ~hihatsPlayer.reset.play(t); ~clapPlayer.reset.play(t); ~kick1Player = kick1.play(t); abel2.play(t); //Half-past-five. 4.5.wait; abel1.play(t); //The only time that I'll 3.5.wait; abel3.play(t); //be by your side 4.5.wait; abel1.play(t); //I only love it when you 3.5.wait; abel4.play(t); //Touch me, Not feel me... uh... awkardddddd.... etc. 12.5.wait; abel1.play(t); //I only call you when it's 3.5.wait; abel2.play(t); //Half-past-five. 4.5.wait; abel1.play(t); //The only time that I'll 3.5.wait; abel3.play(t); //be by your side 4.5.wait; abel1.play(t); //I only love it when you 3.5.wait; abel4.play(t); //Touch me, Not feel me... uh... awkardddddd.... etc. 12.5.wait; ~chordsPlayer.stop; ~hihatsPlayer.stop; 2.wait; ~kick1Player.stop; ~clapPlayer.stop; 1.5.wait; }.fork(t); )