Strudelify

Badge

Cream

KeyG majorTempo105 bpm
0:00/0:00
// Badge — Cream
// 105 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 72 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(105/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 · fretless bass · "Bass"
const bass = note(`<
  ~ A B C D E F G@2 H I J K L M N@2 O P Q R@2 S I J K T U V@2 ~@4 W@2 X@2 Y@2 Z@2 AA@2 AB@2 AC AD AE AF AG AH AI AJ AI
  AK AL@2 AM AN AO@2 AP AQ AR AS AT T AU AV@2 ~
>`.pickRestart({
  A: "a1@8 ~@4 c2@4 ~@4 e2@5 ~@2 c2@5", B: "~@4 d2@2 ~@2 d2@2 ~ d2@2 ~@2 d2@4 ~@13",
  C: "g1@9 ~@3 c2@5 ~@3 e2@5 ~@2 c2@5", D: "~@3 d2@2 ~@2 d2@2 ~ d2@2 ~@2 d2@4 ~ f#1@7 ~ g1@5",
  E: "a1@10 ~@2 c2@5 ~@3 e2@6 ~@2 c2@4", F: "d2@2 ~@3 d2@2 ~ d2@2 ~@2 d2@2 ~@3 d2@5 ~@10",
  G: "[d#2 e2@2 ~ e2@2 ~@2 e2@2 ~@3 e2 ~@3 e2@2 ~ e2@4 ~@7 d#2@2 e2@2 ~@2 e2 ~@2 e2 ~@3 e2@9 d2@3 c2@4 b1@3 ~]/2",
  H: "~ a1@9 ~@2 c2@5 ~@3 e2@8 ~ c2@3", I: "c#2@2 d2@2 ~ d2@2 ~@2 d2@2 ~@2 d2 ~@3 d2@2 ~@2 d2@4 ~@6 d#2",
  J: "~ e2 ~@2 e2@2 ~@2 e2 ~@3 e2 ~@3 e2@2 ~@2 e2@2 ~@10",
  K: "~@4 e3@2 ~@2 d3@2 ~@2 c3@2 ~@2 b2 ~@3 a2 ~@3 g2 ~ f2 ~ e2 ~ d2 ~", L: "c2@2 ~ g1 c2 g1 ~@2",
  M: "~@13 e1@3 a1@4 ~ e1@3 a1@6 ~@2", N: "[~@12 f#1@4 b1@4 ~ f#1@3 b1@4 ~ a1@19 ~@16]/2", O: "~@19 e1@4 g1@4 ~ g#1@4",
  P: "a1@9 ~@3 c2@5 ~@2 e2@6 ~@2 c2@4 c#2", Q: "d2@2 ~@3 d2@2 ~ d2@2 ~@2 d2@2 ~@2 d2@5 ~@11",
  R: "[d#2 e2@2 ~ e2@2 ~@2 e2@2 ~@3 e2 ~@3 e2@2 ~@2 e2@5 ~@5 d#2@2 e2@2 ~@2 e2 ~@2 e2 ~@3 e2@8 ~ d2@3 c2@5 b1@3]/2",
  S: "~ a1@9 ~@2 c2@5 ~@3 e2@9 c2@3", T: "c2@3 g1 c2 g1 ~@2", U: "~@13 e1@3 a1@5 e1@4 a1@7",
  V: "[~@12 f#1@4 b1@5 f#1@3 b1@5 a1@20 ~@15]/2", W: "[~@28 c2@12 ~@5 b1@11 g1@8]/2",
  X: "[~ d2@11 ~@12 d2@5 c2@8 ~@8 b1@11 ~ g1@6 ~]/2", Y: "[d2@15 ~@9 d2@3 ~@2 c2@8 ~@7 b1@13 g1@7]/2",
  Z: "[c#2 d2@2 ~@2 d2 ~@3 d2 ~@3 d2 ~@3 d2@2 ~@2 d2@2 ~@2 d2@2 ~ c2@8 ~ d2@2 ~ c2@3 ~ b1@11 g1@8 ~]/2",
  AA: "[~ d2@2 ~@2 d2 ~@2 d2@2 ~@2 d2 ~@3 d2@2 ~@9 c2@8 ~@5 c2@5 ~ b1@10 ~ g1@7]/2",
  AB: "[~ d2@2 ~@2 d2 ~@2 d2 ~@3 d2 ~@4 d2@3 a1@5 ~@4 c2@11 ~@4 b1@8 ~ g1@9 ~@2]/2",
  AC: "d2@15 ~@2 d3@2 ~ d3 ~ d3 ~ d3 ~@3 d3 ~@3", AD: "c2@12 b1@11 ~ g1@7 ~",
  AE: "d2@8 d2@4 ~ a2 ~@3 d3 ~ d3 ~ d3 ~@2 d3 ~@2 d3 ~@2 d3 ~", AF: "c2@12 ~ b1@9 ~@2 g1@7 ~",
  AG: "d2@8 g#2 a2@2 ~@2 a2@2 ~ g2@2 ~ f2@2 d2@9 ~@2", AH: "c2@4 ~@2 b1@5 ~ g1@4",
  AI: "d2@16 d3@4 c3@3 a2@3 ~ f2@2 ~ d2@2, ~@16 c#3 ~@9 g2@2 ~@4", AJ: "c2@12 ~ b1@10 ~ g1@8",
  AK: "c2@9 c2@3 b1@10 ~@2 g1@6 ~@2",
  AL: "[d2@8 ~@8 c#2 d2@2 ~@2 c#2 d2@2 ~@2 c#2 ~ d2@2 ~ c2@8 ~@6 c2 ~@2 b1@8 ~ g1@7]/2",
  AM: "d2 d2@15 ~@4 d2@4 c2@4 b1@2 ~@2", AN: "~@15 d3@3 e3@4 g3@2 a3@6 ~@2, a1@13 ~@3",
  AO: "[a2@3 b2@12 ~ e3@3 f#3@4 a3@2 b3@5 ~@6 e2@2 ~@2 e2@2 ~@3 e2 ~@3 e2@2 ~@2 e2@5 ~@6, ~@31 e3@8 ~@25]/2",
  AP: "~ e2@2 ~@2 e2 ~@2 e2 ~@3 e2@7 ~@2 d2@3 c2@4 b1@3 ~", AQ: "a1@7 ~@10 d3@2 e3@3 g3@2 a3@4 a2@2 ~@2",
  AR: "~@2 d2@2 ~ d2@2 ~@2 d2@2 ~@2 d2 ~@3 d2@2 ~@2 d2@4 ~@7, b2 ~@7",
  AS: "e2@4 e2@2 ~@2 e2 ~@3 e2 ~@3 e2@2 ~@2 e2@2 ~@10",
  AT: "~@4 e3@2 ~@2 d3@2 ~@2 c3@2 ~@2 b2 ~@3 a2 ~@2 g2 ~@2 f2 ~ e2 ~ d2 ~", AU: "~@13 e1@3 a1@5 e1@3 a1@8",
  AV: "[~@6 f#1@2 b1@2 f#1@2 b1@2 a1@9 ~@9]/2",
})).s("gm_fretless_bass").gain(0.48)

// chords · piano
const piano = note("<~@5 A B C D A B C D E F G ~@2 A B C D A B C D E F G ~@30 A B C D A B C D E F G ~@2>".pickRestart({
  A: "[e4,a4]@5 ~@3 [e4,c5]@4 a4@4 [e4,d5]@4 ~ c5@3 [e4,a4]@4 ~@4, ~@5 e4 ~@2", // A5 C E7 A5
  B: "[a4,d5] ~ [a4,f#5] d5 [a4,g5] [a4,f#5] [a4,d5] ~", // D5 D A7 D D5
  C: "~@3 [b4,d5,f#5] ~ [b4,d5,f#5]@2 ~@2 [b4,d5,f#5]@3 ~@2 [b4,d5,f#5] ~ [b4,d5,f#5]@3 ~ [b4,e5,g5] [b4,e5,g5]@2 ~@3 [b4,e5,g5]@5 ~", // Bm Em
  D: "~@5 [b4,d5,f#5] [b4,d5,f#5]@2 ~@2 [b4,d5,f#5]@3 ~ [b4,d5,f#5] ~ [b4,d5,f#5]@3 ~ [b4,e5,g5] ~ [b4,e5,g5]@4 [b4,e5,g5] ~ [b4,e5,g5]@3 ~", // Bm Em
  E: "[g4,c5,e5]@15 ~@13 [b4,d5,f#5]@3 ~", F: "~ [a4,d5,f#5]@22 ~@9", G: "[g4,b4,e5]@7 ~",
})).s("gm_piano").gain(0.32).pan(0.8)

// chords · rock organ · "Organ"
const rock_organ = note("<~@60 A B@2 C D E@2 F ~@4>".pickRestart({
  A: "~@8 [d6,f#6,a6]@11 ~ [d6,e6,a6]@3 ~ [d6,f#6,a6]@8", B: "[[d6,g6,b6]@57 ~@7]/2", C: "~@8 [a5,c6,e6]@23 ~",
  D: "[d6,f#6]@2 e6 [d6,f#6], a6", E: "[[d6,g6,b6]@3 ~]/2", F: "e6",
})).s("gm_rock_organ").gain(0.32).pan(0.8)

// chords · overdriven guitar · "Break Guitar"
const overdriven_guitar = note("<~@30 A@2 B@4 C@22 D ~@13>".pickRestart({
  A: "[~@16 d3@5 f#3@3 a3@3 ~@10 g3@3 ~@11 b3@5 ~@3 b3@5, ~@29 c3@11 ~ b3@8 ~@15, ~@44 b2@11 ~ g2@7 ~]/2",
  B: "[~@4 a3@4 d4@2 ~ a3@5 d3@5 f#3@3 a3@3 ~@10 g3@3 ~@11 b3@5 ~@3 b3@5, a3@3 ~@38 b3@8 ~@15, ~ d3@11 ~@17 c3@11 ~@4 b2@11 ~ g2@7 ~]/2",
  C: "[~@4 a3@4 d4@2 ~ a3@3 ~@2 d3@5 f#3@3 a3@3 ~@10 g3@3 ~@11 b3@5 ~@3 b3@5, a3@3 ~@38 b3@8 ~@15, ~ d3@11 ~@17 c3@11 ~@4 b2@11 ~ g2@7 ~]/2",
  D: "~ a3 ~@6, a3@3 ~@29, ~ d3@11 ~@20",
})).s("gm_overdriven_guitar").gain(0.4)

// chords · distortion guitar · "Lead Guitar"
const distortion_guitar = note(`<
  ~ A@2 B@2 C D E F C D E G H I J@2 ~ C D E F C D K G L@2 M@2 ~@14 N@2 O@4 P@2 Q R@2 S T@2 U V ~ W X Y ~ Z AA AB ~ AC@3
>`.pickRestart({
  A: "[[a3,c4,e4,a4]@2 ~@6 [a3,c4,e4,a4] ~@15 [a3,c4,e4,a4]@2 ~@6 [d4,f#4,a4] ~@6 [a3,d4] [f#4,a4]@2 ~@5 [a3,d4,f#4,a4] ~@16, ~@31 a3@2 ~@31]/2", // Am D D5 F#m D
  B: "[[a3,c4,e4,a4]@2 ~@6 [a3,c4,e4,a4] ~@6 c4 [a3,e4,a4] ~@7 [a3,c4,e4,a4] ~@7 [d4,f#4,a4]@2 ~@6 [a3,d4,f#4,a4] ~@6 [a3,d4,f#4,a4] ~@16, ~@31 a3@2 ~@31]/2", // Am A5 Am D
  C: "~@8 [a3,c4,e4,a4]@2 ~@10 [a3,c4,e4,a4] ~@11", D: "~@8 [a3,d4,f#4,a4]@2 ~@10 [a3,d4,f#4,a4] ~@11",
  E: "~@4 [b3,e4,f#4,b4]@2 ~@2 [b3,e4,f#4,b4]@2 ~@2 [b3,e4,f#4,b4] ~@2 [b3,e4]@2 ~ [b3,b4] [e4,g4] ~ [b3,e4,g4,b4]@2 ~@2 [b3,e4,g4]@7, ~@14 [f#4,b4]@2 ~@8 b4@7 ~", // Bsus4 E5 B Em B5
  F: "~@5 [e4,f#4,b4] ~@2 [b3,e4,f#4,b4]@2 ~@2 [b3,e4,f#4,b4] ~@2 [b3,e4,f#4,b4]@2 ~ b3 [e4,g4,b4] b3 [e4,g4,b4] ~@2 [e4,g4,b4]@5 ~@3, ~@2 b3 ~@13", // Esus2 Bsus4 Em
  G: "~@5 [e4,f#4,b4] ~@2 [b3,e4,f#4,b4]@2 ~@2 [b3,e4,f#4,b4] ~@2 [b3,e4,f#4,b4]@2 ~ b3 [e4,g4,b4] b3 [e4,g4,b4] ~@3 b4@5 ~@2, ~@2 b3 ~@9 [e4,g4]@3 ~", // Esus2 Bsus4 Em
  H: "~ [a3,c4,e4,a4]@10 ~@17 [a3,c4,e4] ~@3", I: "[a3,d4,f#4,a4]@7 ~@25",
  J: "[[b3,d4,f#4,b4]@2 ~@5 [a3,c4,e4,b4]@6 ~@3]/2", // Bm Am
  K: "~@4 [b3,e4,f#4,b4]@2 ~@2 [b3,e4,f#4,b4]@2 ~@2 [b3,e4,f#4,b4] ~@2 [b3,e4]@2 ~ [b3,b4] [e4,g4] ~ [b3,e4,g4,b4]@2 ~@2 [b3,e4,g4]@4 ~@3, ~@14 [f#4,b4]@2 ~@8 b4@5 ~@3", // Bsus4 E5 B Em B5
  L: "[[a3,c4,e4,a4]@8 ~@4 [g3,c4,e4]@3 ~ a3@4 [g3,c4,e4]@2 ~@2 [d3,g3]@2 e3@2 g3@2 ~ [a3,c4,e4,a4]@4 ~@5 [c4,e4,a4]@2 ~@2 [d4,f#4,b4]@5 ~@3 [c4,e4,a4]@4 ~@4 d4@2 c4@2, ~@8 g3 ~@23]/2", // Am C G5 Am Bm Am
  M: "[a3 b3 ~@4 e4 d4 b3 ~ d4 ~ b3 ~ [a3,c4,e4,b4]@12 ~@6]/2", // Am
  N: "[~@8 d5@8 d5@8 d5@4 d5@11 c5@4 ~@2 g4@3 a4 ~@3 d5@2 c5@2 a4@2 g4@2 f4@4]/2",
  O: "[d4@3 ~@5 f#4@3 a4@2 d5@3 ~@4 f5@7 ~ d5@7 ~ b4@2 ~@2 g5@5 ~@3 g5@2 ~@2 f#5@2 ~@2 g5@2 ~@2 f#5@10 ~@3 d5@2 ~ a4@2 ~@2 f5@5 ~ d5 ~ e5@2 d5 ~ e5@12 d5@2 ~@2 a4@2 ~@2 f5@5 d5@2 ~ e5@4 d5@4]/4",
  P: "[~@4 a4@3 b4@2 d5@3 d5@6 ~@3 f#5@3 a5@2 g5@2 f5@7 d5@2 c#5@2 d5@6 ~@3 a5@3 g5@2 f5@3 g5@4 ~ f5@3]/2",
  Q: "~ d5@3 a5@3 ~ a5@2 ~@2 a5 ~@2 a5@2 ~@2 a5@2 ~ a5@2 g5@2 ~ f5@5",
  R: "[~@3 d5@2 c#5@2 d5@5 ~@4 f5@2 f#5@2 a5@2 ~@2 f5@3 e5@2 d5@7 ~@4 b5@7 f5@7 ~ d5@5 b4@2 ~@2]/2",
  S: "d5@8 b4@2 ~@2 d5@9 b4@3 d5@2 b4@3 ~@3",
  T: "[f5@5 ~@9 f#5@5 ~@2 f#5@5 ~ f5@2 ~ f#5@5 f5@3 ~@2 d5@8 a4@3 ~ c5@2 a4@2 g4@2 f4@2 d4@3 ~]/2",
  U: "d4@4 ~@4 a4@3 ~ d5@2 ~@2 b4@2 d5@2 g4@2 f4@2 d4@2 f4@2 d4@2 c4@2, ~@11 b4@2 ~@2 a4@2 ~@15", V: "a3 ~@3",
  W: "~@2 a4@2 e5@2 b4 ~ e5@6 b4@2", X: "f#5@4 b4@4 f#5@2 ~@2 g5@8 b4@3 ~ b4@2 ~ g4@4 ~, ~@13 a4 ~@2", Y: "a4@9 ~@23",
  Z: "~@3 d5@8 ~ d5@8 b4@4 a4@5 ~@3", AA: "d4 e4 d4@2 b3@2 ~@4 a3 b3 a3 g3 e3 ~", AB: "c4 ~@3",
  AC: "[~@6 e4 f#4 [a4,d5] ~ [f#4,b4] ~ [f#4,a4] ~ [a3,c4,e4,b4]@24 ~@10]/3", // D5 B5 F#m Am
})).s("gm_distortion_guitar").gain(0.32).pan(0.2)

// chords · distortion guitar · "Lead Guitar" · soft notes · Am A5 Am F#m A5 F#m
const distortion_guitar_soft = note(`<
  ~
  [~@5 [a3,c4,e4,a4] ~@6 [e4,a4] ~@3 [e4,a4]@2 ~@2 [e4,a4] ~@7 [e4,a4]@2 ~@2, ~@15 [a3,c4]@2 ~@15]
  [~@3 [f#4,a4] ~@7 f#4 ~@20]
  [~@4 [e4,a4] ~@7 [e4,a4] ~@7 [e4,a4] ~@7 [e4,a4]@2 ~@2]
  [~@4 [f#4,a4] ~@6 [f#4,a4] ~@20]
  ~@67
>`).s("gm_distortion_guitar").gain(0.16).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A B A B A B A B A B A ~@2 A B A B A B A B A B A C ~@5 C ~@9 D@13 E A B A B A B A B A B A ~@2
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@2 x!3 ~ x", C: "x", D: "x!2 ~ x!3 ~ x", E: "x!2 ~ x ~@4",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@71>").gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@5 A@11 ~@2 A@11 ~@6 A@9 B A@13 B A@11 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@3 x!5 ~ x ~",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~ A ~@16 A ~ A ~@5 B ~@37>".pickRestart({
  A: "~@5 x ~@2", B: "~@4 x!4",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A@2 B A B A@2 C A C A ~@2 A@5 C A C B A B D ~@5 A E C A C A@4 F A@3 G@2 A G@3 H A G A F A C A C A C A C A C A ~@2
>`.pickRestart({
  A: "x!8", B: "x!5 ~ x!2", C: "x!7 ~", D: "x", E: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~", F: "x!2 ~@6", G: "x!3 ~ x!4",
  H: "x!6 ~ x",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@33 [~@31 x] [~@2 x!2 ~@4 x ~ x!2 ~@20] ~@37>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@7 A B ~@2 C D E ~ F ~@4 G H ~ I H J ~@2 K ~@8 I ~ I ~@4 L ~@2 M N@2 ~ N@3 O ~ N ~ L ~ I ~ I ~ I P Q ~ I R ~@2
>`.pickRestart({
  A: "~ x ~@6 x ~@2 x ~@3 x ~@3 x ~@12", B: "~@4 x ~@3 x ~@3 x ~@2 x ~@3 x ~@4 x ~@2 x ~@3 x",
  C: "~@5 x ~@2 x ~@3 x ~@3 x ~@2 x ~@12", D: "~@4 x ~@2 x ~@4 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3", E: "x",
  F: "~@5 x ~@2 x ~@3 x ~@3 x ~@2 x ~@4 x ~@7", G: "~@2 x!5 ~", H: "~ x!6 ~", I: "~@7 x",
  J: "~@4 x ~@3 x ~@2 x ~@4 x ~@3 x ~@3 x ~@3 x ~@3", K: "~@4 x!4", L: "~ x ~@2", M: "~@15 x", N: "~@3 x ~@4",
  O: "~@3 x", P: "~@4 x ~@3 x ~@3 x ~@2 x ~@4 x ~@3 x ~@2 x ~@4", Q: "~@4 x ~@3 x ~@2 x ~@4 x ~@2 x ~@4 x ~@2 x!2 ~@3",
  R: "~@5 x!3",
})).gain(0.56)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@7 A ~@6 B ~@5 C ~@3 D ~@11 E ~@29 F ~@5>".pickRestart({
  A: "~ x ~@6", B: "~@7 x", C: "~ x ~@2 x ~@27", D: "~@29 x ~@2", E: "~@15 x", F: "x",
})).gain(0.32)

// drums · crash
const crash = s("cr").struct("<~@5 A ~@6 B ~@2 C ~@2 A ~@9 D ~@16 A ~@13 A ~@7 A ~ D ~@2>".pickRestart({
  A: "x", B: "~@3 x", C: "~@29 x ~@2", D: "~@7 x",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@45 [x!8]!13 ~@14>").gain(0.48)

// drums · ride
const ride = s("rd").struct("<~@69 [~@7 x] ~@2>").gain(0.64)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@45 [~ x ~ x ~ x ~ x]!13 ~@14>").gain(2.03)

// drums · shaker
const shaker = s("sh").struct("<~@45 [x!4]!13 ~@14>").gain(0.48)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@45 [~ x ~ x ~ x ~ x]!13 ~@14>").gain(0.32)

stack(
  bass, piano, rock_organ, overdriven_guitar, distortion_guitar, distortion_guitar_soft, kick, rim, snare, low_tom,
  hihat, mid_tom, open_hat, open_hat_soft, crash, tambourine, ride, cabasa, shaker, shaker_soft
)

More by Cream