Strudelify

Shower Me With Your Love

Surface

KeyA majorTempo68 bpm
0:00/0:00
// Shower Me With Your Love — Surface
// 68 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(68/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@10 A B C D E F G H I J K L I J K L M N O P Q R O P Q R A B C D E F G H I J K L I J K L O S A B C D E F G H T U V W X
  U V W X U V W X Y ~ Z@3
>`.pickRestart({
  A: "c#1@6 ~ c#1 f#0@5 ~ f#0@2", B: "b0@6 ~ b0 e1@4 d1@3 ~", C: "c#1@6 ~ c#1 f#1@4 f#0@3 ~",
  D: "b0@6 ~ b0 e1@4 e0@3 ~", E: "d1@4 ~@2 d0@7 ~ d0@2", F: "c#1@4 ~@2 f#0@7 ~ f#0 ~", G: "b0@6 ~ b0 b0@8",
  H: "e1@6 b0@2 e0@4 e1@3 ~", I: "a0@7 ~ g#0@7 ~", J: "f#0@7 f#0 e0 ~ e0@6", K: "d1@8 c#1@7 ~",
  L: "b0@6 d1 d#1 e1@4 e0@3 ~", M: "a0@6 ~ e0 a0@4 ~ a0 ~ a0", N: "a0@7 e0 a0 ~ a0@5 ~", O: "a0@6 ~ a0 a0@6 ~@2",
  P: "f#0@4 ~@2 c#1@7 ~ c#1@2", Q: "d1@6 ~ d1 d1@7 ~", R: "e1@6 ~ e1!2 b0 e0@2 ~ e0 b0 e1", S: "e0@8 e1@4 d1@3 ~",
  T: "f0@3 f0 f1@2 f0@4 f1@3 c1 f0 ~", U: "a#0@7 ~ a0@7 ~", V: "g0@7 g0 f0 ~ f0@6", W: "d#1@8 d1@7 ~",
  X: "c1@6 d#1 e1 f1@4 f0@3 ~", Y: "a#0@15 ~", Z: "[~@5 a#0@32 ~@11]/3",
})).s("gm_acoustic_bass").gain(0.72)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A B C D E F C D E F G H I J K L M N@2 O P Q R O P S T U C D E F C D E V G H I J K L M N@2 O P Q R O P S W X G H I J K
  L M Y@2 Z AA AB AC Z AA AB AD Z AA AB AC AE AF AG@3
>`.pickRestart({
  A: "~@2 b4 b4@2 g#5@3, [f#2,c#3,e3,a3,b3]@3 [e2,b2,e3,e5]@4 ~, ~@3 [g#3,g#4]@3 ~@2, ~@5 b4@2 ~", // F#m7 E5 G#
  B: "a5@4 e6@2 c#6@9 ~, [f#3,a4,c#5,e5]@15 ~", C: "a3@6 a3@2 [a3,g#4,b4,e5]@7 ~, [a4,b4,c#5,e5] ~",
  D: "~@4 e4@2 [g#4,b4]@4 [g#4,b4,c#5,e5]@5 ~, [c#4,f#4,a4,c#5]@6 [c#3,g#3,e4]@9 ~, ~@3 c#4@3 ~@2", // G#m C#m7 F#m C#m
  E: "~@6 e5 ~@3 d5@4 ~@2, [d2,d3,d4,f#4,a4,c#5]@15 ~, ~@3 a5@4 ~, ~@7 f#5@7 ~@2", // Dmaj7
  F: "[e2,e3,d4,f#4,a4,c#5]@4 b4@2 [b4,e5] [e4,g#4], ~@4 [e4,f#4,g#4]@3 ~", // Dmaj7 E5 E
  G: "[c#3,c#4,e4,g#4]@8 a3@3 ~@3 f#4@2, ~ [c#3,a4], ~@8 [c#4,f#4]@5 c#4@3, ~@8 f#3@2 ~ f#3@5, ~@3 [a3,c#5,e5]", // C#m F#m F#5 A
  H: "b2@2 ~ a3 ~@3 b3, [d4,f#4]@2 [b3,a4] [d4,g#4,b4], a3@3 ~ e3@4, b3 ~@3 b2@4 ~@2 g#3@6", // D B7 G#dim
  I: "~@4 [c#5,e5]@4 a3@4 ~ a4@3, [c#3,c#4,e4,g#4] [c#3,f#3,c#4,f#4], ~@3 a3", // C#m F#5
  J: "b2@4 ~@2 d4@2 ~@2 g#3@2 [b3,g#4]@3 ~, f#4@2 [b3,a4] ~, [a3,d4]@5 a3@3 e3@7 ~, ~ b2 ~@2", // E B7 D5
  K: "[d3,a3,d4,f#4,a4,c#5]@6 [d3,a3,e4,g#4,b4]@9 ~", L: "[e4,g#4,b4]@4 ~@2 [c#4,e4,f#4,a4]@9 ~",
  M: "[b2,f#3,b3,a4,b4,d5,f#5]@15 ~", // Bm7
  N: "[e4@6 ~@4 g#3@2 ~@4 a3@4 ~@2 [c#4,e4] ~ [g#3,c#4,e4]@4 [g#3,c#4,e4]@3 ~, [e3,a4,b4,d5]@15 ~ [a2,c#4,e4,c#5]@7 ~@9, b3@12 b3@19 ~, ~@6 e4@6 ~@8 e3@3 ~ [c#3,b4]@7 ~, ~@21 a3@2 ~@9]/2", // C#m Esus4 A C#7
  O: "[a3,c#4]@4 ~@2 f#4 ~@5 [b3,b4]@2 [e4,g#4] ~, [c#3,f#3,f#4,a4]@7 ~ [e3,e4,g#4]@6 ~@2, ~@4 a3@3 ~ b3@4 ~@4, ~@5 c#4@2 ~@3 [g#3,a4]@4 ~@2", // A B E F#m E Amaj7
  P: "~@4 [e4,a4]@2 [f#4,a4] ~@5 [c#4,e4,a4]@3 ~, [d3,d4,f#4]@7 ~ a2@7 ~, a4@4 ~@6 e3@5 ~, ~@2 a3@5 ~ [c#4,e4,a4]@4 ~@4", // A5 F#m A D A
  Q: "~@6 f#4 [g#3,b3] ~@4 g#4@2 f#5@2, [b3,f#4]@7 ~@3 g#3@5 ~, [a3,d4]@4 a3@3 ~ [e3,b3,a4]@7 ~, ~@2 b2@5 ~@9, ~@5 d4@2 ~@9", // G#m B5 D5 Esus4
  R: "a3@4 ~@2 [c#4,e4] ~ [g#3,c#4,e4]@4 [g#3,c#4,e4]@3 ~, [a2,c#4,e4,c#5]@7 ~@9, ~@4 e3@3 ~ [c#3,b4]@7 ~, ~@5 a3@2 ~@9", // C#m A C#7
  S: "~@6 f#4 [g#3,b3] [e3,b3,a4]@7 ~, [b3,f#4]@7 ~@9, [a3,d4]@4 a3@3 ~@9, ~@2 b2@5 ~@9, ~@5 d4@2 ~@9", // G#m Esus4 B5 D5
  T: "a2@3 ~@3 e5 ~@6 a4@3, [e4,a4,c#5]@7 [c#5,e5]@9, ~@5 a3@11, ~@3 b4 ~ e4@3", // A C#m
  U: "~@5 a5@2 g#5@2 ~@2 e5@2 [d4,c#5] d5 ~, [d3,d4,f#4]@7 ~@2 f#5@2 ~@5, ~@5 [f#4,a4]@2 ~", // Dmaj7 D F#m
  V: "[e2,e3,d4,f#4,a4]@4 b4@2 [b4,e5] [e4,g#4], ~@4 [e4,f#4,g#4]@3 ~", // D E5 E
  W: "e4@5 ~@8 e5@3, a2@5 a5@3, [a4,c#5]@3 a4@5, ~@5 e4@11, ~@7 c#5@9", // A
  X: "[d3,f#4,a4,d5,f#5]@8 [d4,f#4,a4]@4 [e4,g#4,b4]@3 ~", // D E
  Y: "[e4@6 ~@4 g#3@2 ~@4 d#4@3 ~@7 d#5@5 ~, [e3,a4,b4,d5]@15 ~ f2@6 a#4@2 f3@7 ~, b3@12 b3@19 ~, ~@6 e4@6 ~@4 [g4,a#4]@4 d#4@11 ~, ~@19 f3@2 g4@10 ~]/2", // Esus4 Gm
  Z: "a#3@4 ~@2 [d4,f4] ~ [a3,d4,f4]@4 [a3,d4,f4]@3 ~, [a#2,d4,f4,d5]@7 ~@9, ~@4 f3@3 ~ [d3,c5]@7 ~, ~@5 a#3@2 ~@9", // Dm A# D7
  AA: "[a#3,d4]@4 ~@2 g4 ~@5 [c4,c5]@2 [f4,a4] ~, [d3,g3,g4,a#4]@7 ~ [f3,f4,a4]@6 ~@2, ~@4 a#3@3 ~ c4@4 ~@4, ~@5 d4@2 ~@3 [a3,a#4]@4 ~@2", // A# C F Gm F A#maj7
  AB: "~@4 [f4,a#4]@2 [g4,a#4] ~@5 [d4,f4,a#4]@3 ~, [d#3,d#4,g4]@7 ~ a#2@7 ~, a#4@4 ~@6 f3@5 ~, ~@2 a#3@5 ~ [d4,f4,a#4]@4 ~@4", // A#5 Gm A# D# A#
  AC: "~@6 g4 [a3,c4] ~@4 a4@2 g5@2, [c4,g4]@7 ~@3 a3@5 ~, [a#3,d#4]@4 a#3@3 ~ [f3,c4,a#4]@7 ~, ~@2 c3@5 ~@9, ~@5 d#4@2 ~@9", // Am C5 D#5 Fsus4
  AD: "~@6 g4 [a3,c4] [f3,c4,a#4]@7 ~, [c4,g4]@7 ~@9, [a#3,d#4]@4 a#3@3 ~@9, ~@2 c3@5 ~@9, ~@5 d#4@2 ~@9", // Am Fsus4 C5 D#5
  AE: "[a#3,a#4]@5 ~@2 d5 ~@4 [c5,a5]@3 ~, [c5,d5,f5] ~, ~@5 a#3@3 ~@8, ~@3 a#4 [a4,d5,f5]@4", // A# F Dm7 Dm
  AF: "~ [d5,a#5]@3 [c5,a5]@3 ~ [a4,f5]@2 [f3,d#4,g4,a#4,d5]@6", // Gm F Dm D#maj7
  AG: "[[f3,d#4,g4,a#4,c5]@4 ~ [a#3,a4]@4 ~@6 a4@21 ~@12, ~@5 [a#2,f3,c5]@31 ~@12, ~@5 f4@5 c4@26 ~@12, ~@3 a#3@9 ~@4, ~@3 a4 f4@8 ~@4]/3", // Cm7 A#maj7 A#sus2
})).s("gm_epiano2").gain(0.56)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@18 A B C D E@2 F@2 G@2 H@2 I J K@2 L M N O@2 P Q@3 R A B C D S@2 T@2 U V W X W Y Q@3 R Z AA AB AC AD AE@2 AF@2 AG AH
  AI@2 AJ AK@4
>`.pickRestart({
  A: "[a4,c#5] [g#4,b4]", B: "[f#4,a4]@4 g#4 f#4 e4@2, ~@2 e4 ~", C: "[d4,f#4] [c#4,e4]",
  D: "[d4,f#4]@2 [e4,a4] [e4,b4]", E: "[[e4,c#5,a5]@4 [b4,g#5]@4 [a4,f#5]@4 g#4 a4 b4@2, ~ c#4@2 [b3,e5]]/2",
  F: "[f#5@4 a5@4 e5@4 a5@3 ~ d4@8 [e3,d4,f#4,a4]@8, a4@3 ~, d4 c#4 ~@2]/2", G: "[[a4,a5]@31 ~]/2", H: "e4/2", I: "f#4",
  J: "a4@8 b4@7 ~", K: "[e5@31 ~]/2", L: "[d4,f#4,a4,c#5]@15 ~", M: "[d5,f#5]@8 [b4,g#5]@7 ~", N: "e5",
  O: "[~@8 a5@4 b5@12 c#6@7 ~, e5 ~]/2", P: "a5@12 g#5@3 ~",
  Q: "[[c#5,e5]@6 [e5,g#5]@16 ~@10 d5@4 c#5@4 a4@4 b4@3 ~, ~@11 a5@12 ~]/3", // C#m E
  R: "d6@4 c#6@4 a5@4 b5@3 ~, [d4,f#4,a4]@15 ~", // D
  S: "[[e4,c#5,a5]@4 [b4,g#5]@4 [a4,f#5]@4 g#4 a4 b4@2, e6, ~ c#4@2 [b3,e5]]/2", // A E D E5
  T: "[f#5@4 a5@4 e5@4 a5@3 ~ d4@8 [e3,d4,f#4,a4]@8, a4@3 ~, [d4,d6]@8 [c#4,c#6]@8 d6@15 ~]/2", // D C#
  U: "[a4,a5]@13 [g#4,g#5]@3", V: "[f#4,f#5]@8 [a4,a5]@4 [b4,b5]@3 ~", W: "[e4,g#4,b4] [f#4,a4,c#5]",
  X: "[f#4,a4,d5] e5", Y: "[f#4,a4,d5]@8 ~@4 g#5@3 ~, a5@3 ~, ~@8 e5@7 ~", Z: "~@10 c6@5 ~, [f4,f5]@15 ~",
  AA: "[a#4,d5] [a4,c5]", AB: "[g4,a#4]@4 a4 g4 f4@2, ~@2 f4 ~", AC: "[d#4,g4] [d4,f4]",
  AD: "[d#4,g4]@2 [f4,a#4] [f4,c5]", AE: "[[f4,d5,a#5]@4 [c5,a5]@4 [a#4,g5]@4 a4 a#4 c5@2, f6, ~ d4@2 [c4,f5]]/2",
  AF: "[g5@4 a#5@4 f5@4 a#5@3 ~ d#4@8 [f3,d#4,g4,a#4]@8, a#4@3 ~, [d#4,d#6]@8 [d4,d6]@8 d#6@15 ~]/2", // D# D
  AG: "[a#4,d5,a#6] [a4,c5,a6]", AH: "[g4,a#4,g6]@4 a4 g4 f4@2, ~@8 f6@7 ~, ~@2 f4 ~",
  AI: "[[d#4,g4,g5,g6]@2 [d4,f4]@2 [d#4,g4]@2 [f4,a#4] [f4,c5], ~ [a#5,a#6]@2 [c6,c7]]/2", AJ: "[a#5,a#6]",
  AK: "[~ c4@9 c5@10 ~ [a#2,a#3,c4,f4,a4]@30 ~@13, ~ [a#3,d#4,g4,a#4]@19 ~@44]/4", // F D#
})).s("gm_string_ensemble_2").gain(0.24)

// other · alto sax
const alto_sax = note("<~@53 A@2 B C D E ~@21>".pickRestart({
  A: "[~@13 c#5@7 e5 ~ b4@7 c#5@2 e5]/2", B: "a4@4 ~@3 a4 g#4 a4 b4 c#5@2 d5 e5 ~", C: "f#5@4 e5@4 ~@3 a3@3 b3@2",
  D: "d4@2 c#4 d4@2 e4@2 f#4@2 a4@2 g#4 a4@2 b4 ~", E: "b4@7 a4@2 ~@7",
})).s("gm_alto_sax").gain(0.7)

// drums · kick
const kick = s("bd").struct("<~@10 A@8 B@8 A@18 B@8 A@11 B@12 C ~ D ~@2>".pickRestart({
  A: "x ~@6 x!2 ~@7", B: "x ~@6 x!2 ~ x ~@5", C: "x", D: "~@5 x ~@10",
})).gain(0.71)

// drums · rim
const rim = s("rim").struct("<~@10 [~ x ~ x]!8 ~@8 [~ x ~ x]!18 ~@8 [~ x ~ x]!10 ~@18>").gain(0.57)

// drums · snare
const snare = s("sd").struct("<~@18 A@8 ~@18 A@8 ~@10 B A@7 C A@4 ~@5>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!2 ~@2", C: "~@4 x ~@7 x ~ x!2",
})).gain(0.71)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@62 [~@10 x!2 ~@4] ~@7 [~@10 x!2 ~@4] ~@9>").gain(0.21)

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

// drums · hihat
const hihat = s("hh").struct("<A@10 B@17 C B@25 C B@21 A D E ~@2>".pickRestart({
  A: "~ x ~ x", B: "x!4", C: "x ~@3 x ~@3 x ~@4 x ~@2", D: "~@3 x ~@4", E: "~ x ~@14",
})).gain(0.71)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@10 A B A B A B A B A B A B A B A B C D 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 D A B A B A B A B A@2 B A B
  A B A B A B A B ~@2 E ~@2
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~@2 x ~@3 x ~@3 x ~@2 x!2 ~", D: "~ x ~ x ~ x!2 ~", E: "x",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<~@17 A ~@17 A ~@7 A ~@17 A@2 ~@17>".pickRestart({
  A: "~@7 x",
})).gain(0.71)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B C ~ A ~ A ~ A ~ A D ~ A ~ A ~
  A ~ A ~ A ~ A ~@2 E ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@15 x", C: "~@14 x!2", D: "~@7 x ~@8", E: "~ x ~@6",
})).gain(0.71)

// drums · high tom
const high_tom = s("ht").struct("<~@17 A ~@17 A ~@7 A ~@17 A ~@18>".pickRestart({
  A: "~@9 x ~@3 x ~@2",
})).gain(0.71)

// drums · crash
const crash = s("cr").struct("<~@18 A ~@25 A ~@3 A ~ A ~@12 A ~@7 A ~@8>".pickRestart({
  A: "x",
})).gain(0.71)

// drums · ride
const ride = s("rd").struct("<A ~ A ~ A ~ A ~ A ~@9 B@8 A C ~@16 B@8 A C ~@8 A B@12 A D E ~@2>".pickRestart({
  A: "x", B: "x!4", C: "~ x", D: "~ x ~@8 x ~@5", E: "x ~@4 x ~@10",
})).gain(0.71)

stack(
  bass, epiano2, string_ensemble_2, alto_sax, kick, rim, snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom,
  open_hat, high_tom, crash, ride
)

More by Surface