Strudelify

Steal My Sunshine

LEN

KeyE majorTempo100 bpm
0:00/0:00
// Steal My Sunshine — LEN
// 100 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Guitar" named as a guitar, played on electric guitar clean (its piano patch is not one)
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · flute
const flute = note(`<
  ~@20 A ~ A ~ A ~ A ~@21 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "e5@5 ~@3",
})).s("gm_flute").gain(0.26)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  A B A B C D E F C D E F C D E F C D E F C D C D C D C D A B A B C D C D C D C D C D C D C D C D C D C D C D C D C D C
  D C D C D C D C D C D C D G D G D G D G H@2
>`.pickRestart({
  A: "[d#4,f#4,b4]@2 ~ [d#4,g#4,b4] ~@3 [d#4,f#4] [d#4,f#4,b4]@2 ~ [d#4,g#4,b4] ~ [d#4,f#4,b4] ~ [d#4,f#4]", // B G#m D#m B G#m B D#m
  B: "[d#4,f#4,b4]@2 ~ [d#4,g#4,b4] ~@3 [d#4,f#4] [d#4,f#4,b4]@2 ~ [d#4,g#4,b4] ~ [d#4,f#4,b4] ~@2", // B G#m D#m B G#m B
  C: "[c#4,e4,a4]@2 ~ [c#4,e4,a4] ~ [c#4,e4,a4] [b3,e4,g#4]@2 ~@2 [b3,e4,g#4]@2 [b3,e4,g#4]@2 ~ [b3,e4]", // A E E5
  D: "[b3,d#4,f#4]@2 ~ [b3,d#4,g#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] [b3,d#4,f#4]@2 ~ [b3,d#4,g#4]@3 [b3,d#4,f#4]@2", // B G#m B G#m B
  E: "[c#4,e4,a4]@2 ~ [c#4,e4,a4] ~@2 [b3,e4,g#4]@2 ~@2 [b3,e4,g#4]@2 [b3,e4,g#4]@2 ~ [b3,e4]", // A E E5
  F: "[b3,d#4,f#4]@2 ~ [b3,d#4,g#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] [b3,d#4,f#4]@2 ~ [b3,d#4,g#4] ~ [b3,d#4,f#4] [b3,d#4,f#4]@2", // B G#m B G#m B
  G: "[c#4,e4,a4]@2 ~ [c#4,e4,a4] ~ [c#4,e4,a4] [b3,e4,g#4]@2 ~@2 [b3,e4,g#4]@2 [b3,e4,g#4]@2 ~@2", // A E
  H: "[[b3,d#4,f#4]@2 ~ [b3,d#4,g#4] ~ [b3,d#4,f#4] ~ [b3,d#4,f#4] [b3,d#4,f#4]@2 ~ [b3,d#4,g#4]@3 [b3,d#4,f#4]@18]/2", // B G#m B G#m B
})).s("gm_electric_guitar_clean").gain(0.6)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B C@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "a1@6 e1@8 ~ b1", B: "b1@7 b1 b1@6 e1@2", C: "[b1@61 ~@3]/4",
})).s("gm_electric_bass_pick").gain(0.6)

// drums · kick
const kick = s("bd").struct("<~@4 [x ~@2 x ~@2 x ~@3 x ~@5]!24 ~@4 [x ~@2 x ~@2 x ~@3 x ~@5]!48 x>").gain(0.5)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!4 [x!8]!24 [x!4]!4 [x!8]!48 ~>").gain(0.5)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@7 x",
})).gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@12 x!2 ~@2",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct("<~@3 [~@7 x] ~@27 [~@7 x] ~@49>").gain(0.5)

// drums · crash
const crash = s("cr").struct("<~@80 x>").gain(0.5)

// drums · cowbell
const cowbell = s("cb").struct("<[~@3 x ~@7 x ~@4]!80 ~>").gain(0.35)

// drums · bongos
const bongos = s("bongo:18").struct("<[x ~@6 x!2 ~@7]!80 ~>").gain(0.91)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<[~@3 x!3 ~@5 x!3 ~@2]!80 ~>").gain(2.22)

stack(
  flute, electric_guitar_clean, bass, kick, snare, hihat, low_tom, mid_tom, open_hat, crash, cowbell, bongos,
  agogo_bells
)