Strudelify

Love Fool

The Cardigans

KeyA majorTempo112 bpm
0:00/0:00
// Love Fool — The Cardigans
// 112 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Clean Power.
setcpm(112/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 · "Guitar Plucks (GS)"
const electric_guitar_jazz = note(`<
  A B C D E F C D E F C D E F C D G ~@21 A B C D E F C D E F C D E F C D G ~@35
>`.pickRestart({
  A: "[g4,c5,e5] ~ [g4,c5,e5] ~@4 [g4,c5,e5]", B: "~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~@2",
  C: "[g4,c5,e5] ~ [g4,c5,e5] ~@4 [c5,e5,f5]", D: "~ [c5,e5,f5] ~@6", E: "[b4,e5,f5] ~ [b4,e5,f5] ~@4 [b4,e5,g5]",
  F: "~ [b4,e5,g5] ~@6", G: "[b4,e5,f5] ~ [b4,e5,f5] ~@5",
})).s("gm_electric_guitar_jazz").gain(0.2)

// chords · pad bowed · "Cardigans & Chimes Backup"
const pad_bowed = note(`<
  A@2 ~ B@2 C@2 B@2 C@2 B@2 C@2 B@2 ~@10 D@5 ~@5 E@2 ~@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 ~@10 D@5 ~@7 F G ~@9 H@2
>`.pickRestart({
  A: "[[a4,c5,e5]@7 ~]/2", B: "[~@2 [c5,e5]@3 ~@3, ~@7 [d4,f4]@12 ~@13]/2",
  C: "[~@2 [b4,e5]@3 ~@3, ~@7 [c4,g4]@12 ~@13]/2", // E5 C5
  D: "[~@8 [a4,c#5]@6 ~ [f#4,c#5]@6 ~@3 [g#4,c#5]@6 ~ [g#4,c#5]@6 ~@3, ~@15 [c#4,e4]@12 ~@2 [b3,d4]@12 ~@6 [b3,d4]@12 ~@2 [a3,e4]@12 ~@7]/5", // A F#5 C#5 C#m Bm A5
  E: "[~ [a4,c5,e5], ~@15 [a3,e4]@16 ~]/2", F: "e4 f#4 g#4 f#4", G: "[e4,g#4]@3 ~",
  H: "[~@5 a4@26 ~, ~@3 a3@25 ~@4, ~@4 [c4,e4]@25 ~@3]/2", // C
})).s("gm_pad_bowed").gain(0.16)

// bass · synth bass 1 · "Rhythmic Bass"
const bass = note(`<
  A@2 B ~ C ~ B ~ C ~ B ~ C ~ B ~ D E F G H I H I H I H I J@2 K@2 H I H L M N A@2 B ~ C ~ B ~ C ~ B ~ C ~ B ~ D E F G H
  I H I H I H I J@2 K@2 H I H L M N H I H I H I H I H I M O@3
>`.pickRestart({
  A: "a2/2", B: "a1 ~@3 a1 c2 ~ d2", C: "g1 ~@3 g1 b1 ~ c2", D: "g1 ~@3 g1 b1 ~ b1", E: "c2 ~@2 c2 c#2 ~@2 c#2",
  F: "d2 ~@2 d2 d#2 ~@2 d#2", G: "e2", H: "a1 ~ c#2 ~ d2@2 ~ b1", I: "~@2 b1@2 d2@2 ~@2 e2@4 ~@2 e2 ~",
  J: "[f#2@6 c#2@2 f#2@2 c#2@3 ~ b1@8 f#2@2 b2@2 f#2@2 ~@2 d#2 e2]/2",
  K: "[e2@6 ~@2 e2@2 b1@3 ~ a1@8 a1@2 d2@2 ~@2 e2@2 ~@2, ~@3 b1@2 ~@11]/2", L: "~@2 b1@2 d2@2 ~@2 e2@4 ~@2 a1 ~",
  M: "a1@3 ~ d2@3 ~", N: "e2@7 ~", O: "[e2@18 ~@3 a1@22 ~@5]/3",
})).s("gm_synth_bass_1").gain(0.6)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@10 A@2 B@4 ~ C D E ~@8 F@2 G@2 H ~@3 I@2 ~@10 A@2 J@4 ~ C D K ~@8 F@2 G@2 H ~@3 I@2 ~@10 L@3 ~
>`.pickRestart({
  A: "[b4@7 c5@6 ~@3]/2", B: "[d4@7 b3@5 b3@16 ~@4]/4", C: "[e3,g3,b3] ~@2 [e3,g3,b3] [e3,g3,a#3] ~@2 [e3,g3,a#3]",
  D: "[d3,f3,a3] ~@2 [d3,f3,a3] [d#3,f#3,a3] ~@2 [d#3,f#3,a3]", E: "[e3,g#3]",
  F: "[e4@2 c#4 e4@2 c#4@2 e4@2 c#4@2 e4 c#4@2 b3@2]/2", G: "[d4@4 b3@2 d4@4 b3@4 d4@4 c#4@4 d4@2 e4@3 f#4@2 g#4@3]/2",
  H: "~ [g4,g#4] [e4,f4,f#4] ~@13, a4 ~@7", // G#maj7
  I: "[[a3,c#4,e4,a4]@5 ~@3 [d4,f4,a4]@5 ~@3 [g#3,c4,e4]@16, ~@7 a3@5 ~@3 e3@16 ~]/2", J: "[a4 e4@6 b3@5 b3@16 ~@4]/4",
  K: "[e3,g#3,b3]", L: "[[a3,c#4,e4,a4]@5 ~@3 [d4,f4,a4]@5 ~@3 [g#3,c4,e4]@21 ~@11, ~@7 a3@5 ~@3 e3@21 ~@12]/3",
})).s("gm_distortion_guitar").gain(0.31)

// chords · electric guitar muted · "Muted Guitar Jam"
const electric_guitar_muted = note(`<
  ~@20 A B A B A B A C ~@4 A B A B ~@22 A B A B A B A C ~@4 A B A B ~@2 A B A B A B A B A B ~@4
>`.pickRestart({
  A: "~@2 [a4,c#5]!4 ~ c#5 [a4,c#5,f#5] ~ c#5 [a4,c#5,f#5] ~ c#5 [a4,c#5,f#5] ~", // A F#m
  B: "~@2 [a4,c#5]!4 ~ f#4 [g#4,c#5] ~ f#4 [g#4,c#5] ~ f#4 [g#4,c#5] ~", // A C#5
  C: "~@2 [a4,c#5]!4 ~ f#4 [g#4,c#5] [f#4,g4,b4,c5] f4 ~@5", // A C#5 Cmaj7
})).s("gm_electric_guitar_muted").gain(0.51)

// chords · electric guitar muted · "Muted Guitar Jam" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@21 A ~ A ~ A ~ B ~@5 A ~ A ~@23 A ~ A ~ A ~ B ~@5 A ~ A ~@3 A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@8 e4 ~@2 e4 ~@2 e4 ~", B: "~@10 [d4,d#4,e4,g#4,a4,a#4] c#4 ~@4",
})).s("gm_electric_guitar_muted").gain(0.31)

// chords · electric guitar clean · "Clean Power"
const electric_guitar_clean = note("<~@36 A@2 ~@36 A@2 ~@10 B@3 ~>".pickRestart({
  A: "[~@7 d4@5 ~@3 g#3@16 ~]/2", B: "[~@7 d4@5 ~@3 g#3@21 ~@12]/3",
})).s("gm_electric_guitar_clean").gain(0.41)

// other · whistle · "Whistle Riff"
const whistle = note("<~@18 c#6 f#6 ~@36 c#6 f#6 ~@32>").s("gm_whistle").gain(0.31)

// other · piano · "Shawn Lewis, 1997."
const piano = note("<[a4 ~@15] ~@89>").s("gm_piano").gain(0.05)

// drums · kick
const kick = s("bd").struct("<A@17 B A@19 C A@17 B A@30 B C D ~>".pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x", D: "~@5 x ~@10",
})).gain(0.8)

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

// drums · hihat
const hihat = s("hh").struct("<A@18 B ~ A@7 C A@9 D A@18 B ~ A@7 E A@9 ~ A@11 ~@3>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", B: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x ~@3", C: "x!2 ~@2 x!2 ~@7 x ~@2", D: "x ~@12 x!3",
  E: "x!2 ~@2 x!2 ~@4 x ~@2 x ~@2",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<A B A@16 C ~ A@7 D A@9 E A B A@16 C ~ A@7 D A@8 B ~ A@10 B ~@3>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@4", C: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~ x ~@2",
  D: "~@2 x!2 ~@2 x!3 ~@2 x ~@4", E: "~ x ~@14",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B A@2 ~ A ~ A ~ A ~ A ~ B A C ~
>`.pickRestart({
  A: "x", B: "x!2", C: "~@5 x ~@10",
})).gain(0.64)

stack(
  electric_guitar_jazz, pad_bowed, bass, distortion_guitar, electric_guitar_muted, electric_guitar_muted_2,
  electric_guitar_clean, whistle, piano, kick, snare, hihat, open_hat, crash
)

More by The Cardigans