Strudelify

The Flame

Cheap Trick

KeyE majorTempo103 bpm
0:00/0:00
// The Flame — Cheap Trick
// 103 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/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.

// chords · electric guitar jazz · "E Gtr1"
const electric_guitar_jazz = note(`<
  A B C@2 D@2 E@2 F@2 G@2 F@2 G@2 H I J@2 K L M ~@20 N@2 E@2 F@2 O@2 F@2 O@2 H I J@2 K L M ~@20 F@2 O@2 F@2 O@2 H I J@2
  K L M ~@36
>`.pickRestart({
  A: "~ [a3,b3] ~ [a3,b3]@2 ~ [a3,b3]@2, [a2,e3]@4 [a2,e3]@6 [a2,e3]@5 ~", B: "~ a3@5 c#4 d#4, [a2,e3]@7 ~, ~ b3@4 ~@3",
  C: "[~@14 b3@2 ~@10 f#3@2 ~@2 f#3 ~, b2@31 ~, e4@6 d#4@15 ~ d#4@10, ~@2 b3@10 ~@4 c#4@4 f#3@5 ~@7, ~@4 f#3@7 ~ f#3@6 b3@8 ~@2 b3@4]/2",
  D: "[[a2,e3]@4 [a3,b3]@2 ~@2 [a3,b3]@4 ~@2 [a3,b3]@4 ~@2 b3@7 ~ c#4@2 d#4@2, ~@6 [a2,e3]@5 ~ [a2,e3]@5 ~ [a2,e3]@14, ~@10 a3@5 ~]/2", // A5 Asus2 A5
  E: "[~@6 b3 ~@8 f#3, b2@13 ~ b2@18, e4@6 d#4@14 f#3@5 ~@7, ~@2 b3@9 ~@5 c#4@5 ~ d#4@10, ~@4 f#3@5 ~ f#3@6 ~@2 b3@8 ~@2 b3@4]/2",
  F: "[~@2 e3@2 [a3,b3]@2 ~@2 [a3,b3]@4 ~@2 [a3,b3]@4 ~@2 b3@7 ~ c#4@2 d#4@2, a2@5 ~ [a2,e3]@5 ~ [a2,e3]@5 ~ [a2,e3]@14, ~@10 a3@5 ~]/2", // Asus2 A5
  G: "[~@6 b3 ~@6 f#3 ~ [f#3,d#4], b2@13 ~ b2@17 ~, e4@6 d#4@14 f#3@5 ~@7, ~@2 b3@9 ~@5 c#4@5 ~ d#4@6 ~@4, ~@4 f#3@5 ~ f#3@7 ~ b3@8 ~@2 b3@4]/2", // D#m
  H: "g#4 c#4 e4 g#4@2 c#4 e4 g#4", I: "~ c#4 e4 f#4@2 c#4 e4 c#4",
  J: "[g#4 c#4 e4 g#4@2 c#4 e4 g#4@2 c#4 e4 f#4@2 c#4 e4 c#4]/2", K: "g#4 b3 e4 g#4@2 b3@2 e4",
  L: "f#4 b3 e4 f#4@2 b3 e4 f#4", M: "e4@2 a3@2 b3@2 e4 ~ e4@2 a3@2 b3@4",
  N: "[~@2 [a2,e3]@2 [a3,b3]@2 ~@2 [a3,b3]@4 ~@2 [a3,b3]@4 ~@2 b3@7 ~ c#4@2 d#4@2, ~@6 [a2,e3]@5 ~ [a2,e3]@5 ~ [a2,e3]@14, ~@10 a3@5 ~]/2", // A5 Asus2 A5
  O: "[~@6 b3 ~@6 f#3 ~ [f#3,d#4], b2@13 ~@7 f#3@5 ~@7, e4@6 d#4@15 ~ d#4@6 ~@4, ~@2 b3@9 ~@5 c#4@5 ~@11, ~@4 f#3@5 ~ f#3@7 ~ b3@8 ~@2 b3@4]/2", // D#m
})).s("gm_electric_guitar_jazz").gain(0.52)

// chords · synth strings 1 · "Str S3"
const synth_strings_1 = note(`<
  A@2 B@2 ~@2 C@2 ~@2 C@2 ~@2 C@2 D ~@2 E F ~@2 G@2 H I A@2 H I A@2 H I H J K@3 L@2 ~@3 C@2 ~@2 C@2 ~@2 C@2 D E M E F
  ~@2 G@2 H I A@2 H I A@2 H I H J K@3 L@2 ~@3 C@2 ~@2 C@2 D E M E N@2 ~ G@2 H I A@2 H I A@2 H I O H K@3 L@2 ~ H I A@2 H
  I A@2 H I A@2 H I A@2
>`.pickRestart({
  A: "[a2,e3]/2", B: "[b3@31 ~]/2", C: "b3/2", D: "[c#3,c#4]", E: "a2", F: "e3",
  G: "[~ [b1,b2,f#3,b3]@2 [a1,e3,a3] [b1,b2,f#3,b3]@2 [a1,a2,e3,a3] [b1,b2,f#3,b3]@2 [a1,a2,e3,a3]@5 ~@2, ~@6 a2 ~@25]/2", // B5 A5 B5 A5 B5 A5
  H: "[e3,b3]", I: "[b2,f#3]", J: "[a2,e3]", K: "[e3,b3]/3", L: "[d3,a3]/2", M: "c#3",
  N: "[g#3@6 a3@6 b3@15 ~@5, e2@15 ~@17]/2", O: "[e3,a3]",
})).s("gm_synth_strings_1").gain(0.28)

// chords · synth strings 1 · "Str S3" · soft notes
const synth_strings_1_soft = note(`<
  ~@2 A@2 B@2 C@2 B@2 C@2 B@2 C@2 ~ D E F G@2 H ~@20 B@2 C@2 B@2 C@2 B@2 C@2 ~ F I F G@2 H ~@20 B@2 C@2 B@2 C@2 ~ F I F
  J K H ~@36
>`.pickRestart({
  A: "[f#3@31 ~]/2", B: "[a2,e3]/2", C: "f#3/2", D: "[a2,a3]", E: "[c#3,c#4]", F: "a3", G: "[g#4 [b2,f#4], b3@15 ~]/2",
  H: "[a2,a3,e4]", I: "c#4", J: "g#4", K: "[b2,f#4]",
})).s("gm_synth_strings_1").gain(0.16)

// chords · pad poly · "SynBs3"
const pad_poly = note(`<
  ~@4 A@2 ~@21 B C D ~ B E D ~@12 F@2 ~@18 B C D ~ B E D ~@9 G H I J G K L M N ~@10 B C D ~ B E D ~@11 B C D ~ B E D ~ B
  C D ~ B E
>`.pickRestart({
  A: "[~@2 [a3,b3] ~ [a3,b3]@3 ~ [a3,b3]@4 ~@2 [a3,b3]@4 ~@2 [a3,b3]@10 ~@2, ~@20 c#4 ~@11]/2", // Asus2
  B: "[b4,b5]@3 [a4,a5]@3 [g#4,g#5]@2", C: "~@3 [a4,e5]@3 [a4,c#5]@2, e4@3 ~, e5@4 c#5@7 ~@5, ~@2 b4@9 ~@5",
  D: "[g#4,b4]", E: "~@3 [a4,e5]@3 [a4,c#5]@2, e4@3 ~, e5@4 c#5@7 ~@5, ~ b4@5 ~@2",
  F: "[[b4,e5]@6 [f#4,b4]@8 c#5 ~ [e4,a4]@10 ~@6, ~@15 b4@11 ~@6]/2", G: "~@2 b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~",
  H: "b3@3 ~ b3 ~ b3@7 ~@3", I: "[e4,e5]@5 ~ [d#4,d#5]@7 ~@3", J: "c#5@4 b4 ~ b4@10",
  K: "b3@3 ~ b3 ~ b3@5 ~@2 b3 f#4 ~", L: "[g#4,g#5]@5 ~ [f#4,f#5]@6 b4@2 ~@2, ~@12 b3 ~@3", M: "[c#5,c#6]@3 [b4,b5]@5",
  N: "[c#5,e5,c#6]@15 ~", // C#m
})).s("gm_pad_poly").gain(0.56)

// chords · electric guitar clean · "E Gtr2"
const electric_guitar_clean = note(`<
  ~@23 A B C D E@2 F G H@2 C G I J K L M@3 N ~@19 A B C D E@2 F G H@2 C G I J K L M@3 N O@2 P@2 Q@2 R@2 S ~@6 A B C D
  E@2 F G H@2 C G T U K L M@3 N C D E@2 F G H@2 C D V@2 F G H@2
>`.pickRestart({
  A: "~@2 [b1,b2,f#3,b3,d#4] ~ [b1,b2,f#3,b3,d#4] ~ [a1,a2,e3,a3,c#4] ~ [b1,b2,f#3,b3,d#4]@3 ~ [a1,a2,e3,a3,c#4] ~ [b1,b2,f#3,b3,d#4]@2", // B A B A B
  B: "~@2 [a1,a2,e3,a3,c#4] ~ [a1,a2]@8 a1@4, ~ [e3,a3,c#4]@3", C: "[e1,e2,e3,b3,e4,g#4]@15 ~",
  D: "[b1,b2,b3,d#4,f#4]@15 ~, c3 ~@15", E: "[~@7 b1, [a1,a2,a3,c#4,e4]@31 ~]/2", F: "~ e3@15, [e1,e2,b3,e4,g#4]@15 ~",
  G: "[b1,b2,b3,d#4,f#4]@15 ~", H: "[~@7 b1, [a1,a2,a3,c#4,e4]@15 ~]/2", I: "[e2,e3,b3,e4,g#4]@15 ~",
  J: "[a2,a3,c#4]@15 ~", K: "[a1,a2,a3,c#4,e4]@15 ~", L: "[b1,b2,b3,d#4,e4]@15 ~",
  M: "[[g#3,c#4,e4]@13 ~@3 [d3,a3,d4,e4,f#4]@31 ~, [c#2,c#3]@15 d2@32 ~]/3", N: "[d2,d3,a3,d4,e4,f#4]@15 ~",
  O: "[[a1,a2,e3,a3]@31 ~]/2", P: "[[b1,b2,f#3,b3]@31 ~]/2", Q: "[[a1,a2,e3,a3]@31 ~, g3 ~@31]/2",
  R: "[[b1,b2,f#3,b3]@15 ~]/2", S: "[c#2,c#3,g#3,c#4]@15 ~", T: "[a2,a3,c#4,e4]@15 ~", U: "[g#2,e3,b3]@15 ~",
  V: "[[a2,a3]@11 ~@3 b1@2, [a1,c#4,e4]@31 ~, ~@22 [b2,b3]@9 ~]/2", // A B
})).s("gm_electric_guitar_clean").gain(0.36)

// bass · slap bass 2 · "SlapB2"
const bass = note("<~@37 A B C D E F ~@33 A B C D E F ~@29 A B C D E F ~@16>".pickRestart({
  A: "[a1,a2] ~ [a1,a2] ~ [a1,a2] ~ [a1,a2] ~ [a1,a2] ~ [a1,a2] ~ [a1,a2] ~ [a1,a2] ~", // A
  B: "[b1,b2] ~ [b1,b2] ~ [b1,b2] ~ [b1,b2] ~ [b1,b2] ~ [b1,b2] ~ [b1,b2] ~ [b1,b2] ~", // B
  C: "[c#2,c#3] ~ [c#2,c#3] ~ [c#2,c#3] ~ [c#2,c#3] ~ [c#2,c#3] ~ [c#2,c#3] ~ [c#2,c#3] ~ [c#2,c#3] ~", // C#
  D: "[d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~", // D
  E: "[d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3] ~ [d2,d3]@2", F: "[d2,d3]",
})).s("gm_slap_bass_2").gain(0.66)

// drums · kick
const kick = s("bd").struct("<~@23 A B C@16 D A E ~@2 F C@15 A G C@16 D H C@15 A B C@16 D H C@16>".pickRestart({
  A: "~@3 x!2 ~@2 x", B: "~ x ~@2 x ~@3", C: "x ~@2 x!2 ~@2 x", D: "x ~@2 x!2 ~@3", E: "x", F: "~@7 x", G: "~ x!5 ~ x",
  H: "~@2 x ~ x ~@3 x ~ x ~ x!3 ~",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@23 A B C@17 D ~@19 A E C@16 F G C@15 A B C@17 G C@16>".pickRestart({
  A: "~ x!2 ~@3 x ~", B: "~@2 x ~@2 x!3", C: "~ x ~ x", D: "x!2 ~@4 x ~", E: "~@12 x!2 ~@2", F: "~@4 x ~@7 x ~@2 x",
  G: "x!2 ~@5 x ~@8",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@42 [~@5 x ~@2] ~@90>").gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D E B F G H E B F H E B F H E B H@2 E B I J K L@13 M L N ~@2 O P@2 Q P@3 ~ L R S T U V W X Y Z I J K L@13 M L N
  ~ K L@13 M K J K L@13 M L N ~ K L@7 K L@2 AA L@4
>`.pickRestart({
  A: "~@4 x!2 ~ x", B: "~ x!6 ~", C: "~@2 x!5 ~", D: "x ~ x ~ x!4", E: "~ x!2 ~ x!2 ~ x", F: "x!2 ~ x ~ x!2 ~",
  G: "x ~ x ~@2 x!3", H: "x ~ x ~ x!3 ~", I: "~ x!4 ~ x!2", J: "~ x!2 ~ x!4", K: "x!5 ~ x!2", L: "x!8",
  M: "x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@2", N: "x ~ x ~ x ~ x ~ x!2 ~@2 x ~ x ~", O: "~@3 x", P: "~ x ~ x", Q: "~ x!2 ~",
  R: "x!2 ~@3 x!3", S: "x!2 ~@4 x!2", T: "x!3 ~@2 x!3", U: "x!2 ~@2", V: "x!2 ~@6", W: "~@2 x!6", X: "~@7 x",
  Y: "x ~@6 x", Z: "x", AA: "x!3 ~@3 x!2",
})).gain(0.48)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@25 A ~@25 B ~ C D E F G H I J K ~@2 A ~@17 A ~@16 A ~@17 A ~@7 A ~@7
>`.pickRestart({
  A: "~@5 x ~@2", B: "x!8", C: "~@2 x!3 ~@3", D: "~@2 x!4 ~@2", E: "~@3 x!2 ~@3", F: "~ x ~ x!5", G: "~@2 x!6",
  H: "x!2 ~@6", I: "x!7 ~", J: "~ x!6 ~", K: "~ x!7",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@128 [~@3 x ~@4] ~@4>").gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~ B ~@2 A ~ B ~ A ~ B ~ A ~@3 A ~@111>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~@2 x!2 ~@4",
})).gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@3 A@2 ~@3 A ~@3 A ~@2 A@2 ~@112>".pickRestart({
  A: "~@5 x ~@2",
})).gain(0.64)

// drums · bongos
const bongos = s("bongo:18").struct("<~@3 A ~@3 A@2 ~@3 A ~@3 A ~@2 A@2 ~@112>".pickRestart({
  A: "~@3 x",
})).gain(1.26)

// drums · congas
const congas = s("conga:13").struct("<~@5 A ~@4 A ~@3 A ~@3 A ~@3 A ~@24 B@15 ~@71>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x ~ x",
})).gain(2.56)

stack(
  electric_guitar_jazz, synth_strings_1, synth_strings_1_soft, pad_poly, electric_guitar_clean, bass, kick, snare,
  low_tom, hihat, hihat_soft, open_hat, mid_tom, high_tom, bongos, congas
)

More by Cheap Trick