Created
October 2, 2025 11:28
-
-
Save nourspace/7fcecb3fb8f23ad3b4e55e0d49313ba4 to your computer and use it in GitHub Desktop.
Palm City - Techno
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 3-Minute Palm City | |
// Techno @ 120 BPM | |
setcpm(120/4) | |
// samples('github:geikha/tidal-drum-machines') | |
// samples('github:tidalcycles/dirt-samples') | |
// ARRANGEMENT SECTIONS (96 cycles total = ~3.2 minutes) | |
// Pattern /16 = 6 elements × 16 cycles each = 96 total cycles | |
// At 120 BPM: each cycle = 2 seconds | |
let intro = "<1 1 0 0 0 0>/16" // cycles 0-31 (time 00:00-01:04) | |
let buildup = "<0 0 1 0 0 0>/16" // cycles 32-47 (time 01:04-01:36) | |
let drop = "<0 0 0 1 1 0>/16" // cycles 48-79 (time 01:36-02:40) | |
let outro = "<0 0 0 0 1 1>/16" // cycles 64-95 (time 02:08-03:12) | |
// ^^ OVERLAP: cycles 64-79 play both drop + outro | |
//////// TESTS ///////// | |
// let intro = "<0 0 0 0 0 0>/16" | |
// let buildup = "<0 0 0 0 0 0>/16" | |
// let drop = "<0 0 0 0 0 0>/16" | |
// let outro = "<1 1 1 1 1 1>/16" // Only outro plays | |
//////// TESTS ///////// | |
// DRUM PATTERNS | |
// let kickPattern = s("bd*4").gain("1 .8 .9 .8") | |
// let mainHats = s("hh*8").gain(".3 .2 .4 .2 .3 .2 .5 .2") | |
// let openHats = s("~ ~ oh ~").gain(.6) | |
// let buildupHats = mainHats.fast(2) // double-time for tension | |
// let percussion = s("rim*4").n("0 ~ 1 2").gain(.3) | |
// DRUM PATTERNS - Enhanced with Roland machines | |
let kickPattern = s("bd*4").gain("1 .8 .9 .8").bank('RolandTR909') | |
let mainHats = s("hh*8").gain(".3 .2 .4 .2 .3 .2 .5 .2").bank('RolandTR909') | |
let openHats = s("~ ~ oh ~").gain(.6).bank('RolandTR909') | |
let buildupHats = mainHats.fast(2) // double-time for tension | |
let percussion = s("rim*4").n("0 ~ 1 2").gain(".3").bank('RolandTR808') | |
// BASS ELEMENTS | |
let bassLine = n("0 3 7 5 0 10 7 3").s("sawtooth").octave(2).gain(.8) | |
let bassAccents = n("0 ~ 7 ~").s("sawtooth").octave(3).gain(.5).delay(.125) | |
let bassFilter = sine.range(200,800).slow(1) | |
let buildupBassFilter = sine.range(200,50).slow(2) // closing filter | |
// MELODIC ELEMENTS | |
let leadMelody = n("12 ~ 15 ~ 19 ~ 17 ~").s("square").octave(5).gain(.5) | |
.lpf(sine.range(1000,3000).fast(4)).delay(.125).room(.3) | |
// NEW: CLASSICAL ORCHESTRAL LAYERS | |
// Synthetic strings using multiple oscillators | |
let strings1 = stack( | |
n("<[0,4,7] [2,5,9] [7,11,2] [5,8,0]>/2").s("sawtooth").octave(4), | |
n("<[0,4,7] [2,5,9] [7,11,2] [5,8,0]>/2").s("square").octave(4).gain(.3) | |
).gain(.3).lpf(sine.range(600,1800).slow(6)).room(.7) | |
// More bouncy synthetic strings | |
let strings2 = stack( | |
n("<[0,4,7] [2,5,9] [7,11,2] [5,8,0]>/2").s("sawtooth").octave(4), | |
n("<[0,4,7] [2,5,9] [7,11,2] [5,8,0]>/2").s("square").octave(4).gain(.3) | |
).gain(.3).lpf(sine.range(600,1800).slow(6)).room(.7) | |
.late("0 .02 0 .01") // swing timing | |
.sometimes(fast(2)) // occasional double hits | |
.gain(sine.range(.2,.4).fast(1)) // bouncy volume modulation | |
// Even more rhythmic bounce | |
let strings3 = stack( | |
n("<[0,4,7] [2,5,9] [7,11,2] [5,8,0]>/2").s("sawtooth").octave(4) | |
.struct("x ~ x ~"), // add rhythmic gaps | |
n("<[0,4,7] [2,5,9] [7,11,2] [5,8,0]>/2").s("square").octave(4).gain(.3) | |
).gain(.3).lpf(sine.range(600,1800).slow(6)).room(.7) | |
.late("0 .02 0 .01") | |
let cello = n("0 3 7 5 0 10 7 3").s("sawtooth").octave(1) | |
.gain(slider(4.1, 0, 10, 0.1)).lpf(sine.range(150,400).slow(2)) | |
let violin1 = n("19 ~ 22 ~ 26 ~ 24 ~").s("square").octave(5) | |
.gain(slider(5, 0, 10, 0.1)).delay(slider(0.3, 0, 1, 0.05)).room(.5).sometimes(fast(2)) | |
let violin2 = n("19 ~ 22 ~ 26 ~ 24 ~").s("square").octave(5) | |
.gain(slider(5, 0, 10, 0.1)).delay(saw.range(0.5, 2.5).slow(16)).room(.5).sometimes(fast(2)) | |
let violin3 = n("19 ~ 22 ~ 26 ~ 24 ~").s("square").octave(5) | |
.gain(slider(1.5, 0, 10, 0.1)).delay(sine.range(0.5, 2.5).slow(32)).room(.5).sometimes(fast(2)) | |
let violin4 = n("19 ~ 22 ~ 26 ~ 24 ~").s("square").octave(5) | |
.gain(tri.range(0.5, 3).slow(16)).delay(tri.range(0.5, 2.5).slow(16)).room(.5).sometimes(fast(2)) | |
// Electric glitch elements | |
let electricGlitch = s("click*16").gain(".05 .15 .05 .1 .2 .05 .15 .1") | |
.pan(sine.range(-.4,.4).fast(6)).hpf(3000).delay(.03125) | |
let electricBass = n("0 ~ 7 ~ 0 ~ 12 ~").s("square").octave(2) | |
.gain(.6).shape(.4).lpf(400).hpf(60) | |
let glitchPerc = s("perc*8").mask("1 0 1 1 0 1 0 1") | |
.gain(.2).pan(rand.range(-.2,.2)).delay(.03125).hpf(1000) | |
// OUTRO EFFECTS | |
let outroFilter = sine.range(2000,200).slow(8) | |
// Orchestral outro enhancement | |
let outroStrings = strings3.gain(.6).lpf(sine.range(1200,400).slow(8)) | |
let outroViolin = violin4.gain(.8).delay(sine.range(.8,3).slow(12)) | |
stack( | |
// INTRO - Gradual build | |
// kickPattern.mask(intro), | |
// mainHats.mask(intro), | |
// INTRO - Gradual build | |
kickPattern.mask(intro), | |
mainHats.mask(intro), | |
strings3.mask(intro).gain(.2), | |
// BUILDUP - Tension with filter close and fast hats | |
// kickPattern.mask(buildup), | |
// buildupHats.mask(buildup), | |
// bassLine.lpf(buildupBassFilter).mask(buildup), | |
// BUILDUP - Tension with filter close and fast hats | |
kickPattern.mask(buildup), | |
buildupHats.mask(buildup), | |
bassLine.lpf(buildupBassFilter).mask(buildup), | |
cello.mask(buildup), // <- ADD THIS LINE | |
// DROP - Full arrangement | |
kickPattern.mask(drop), | |
mainHats.mask(drop), | |
openHats.mask(drop), | |
bassLine.lpf(bassFilter).mask(drop), | |
bassAccents.mask(drop), | |
leadMelody.mask(drop), | |
percussion.mask(drop), | |
violin4.mask(drop), // <- ADD THIS LINE | |
electricGlitch.mask(drop), // <- ADD THESE | |
electricBass.mask(drop), // <- | |
glitchPerc.mask(drop), // <- | |
// OUTRO - Filter sweep out | |
// kickPattern.lpf(outroFilter).mask(outro), | |
// mainHats.lpf(outroFilter).mask(outro) | |
// OUTRO - Filter sweep out | |
kickPattern.lpf(outroFilter).mask(outro), | |
mainHats.lpf(outroFilter).mask(outro), | |
outroStrings.mask(outro), // <- Enhanced strings | |
outroViolin.mask(outro), // <- Enhanced violin | |
electricGlitch.mask(outro).gain(.05).lpf(outroFilter), // <- Fading glitch | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment