Strudelify
Lady Marmalade cover art

1997 · All Saints

Lady Marmalade

All Saints

KeyG minorTempo115 bpm
0:00/0:00
// Lady Marmalade — All Saints
// 115 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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 · electric bass finger
const bass = note(`<
  ~ A ~@3 B C B C B C B C B C B C B C B C B C B C B C B C B C B D E C B C B C B C B C B C B C B C B C B C B C B D E C B
  C B C B C B C ~ C B ~@4 C B C B C B C B ~ F C B C B C B C B C B C B C B C B ~@8 C B C B C B C B ~
>`.pickRestart({
  A: "g1@2 d2@2 g1@2 d2 ~ g1@2 d2 ~ g1@2 d2 ~", B: "~@5 d2 f2 g2", C: "g1 d2 f2 bb2 ~ f2 g2 c2", D: "g2@3 f2 d2@3 c2",
  E: "bb1@3 c2 bb1@2 g1@2", F: "g1@2 d2@2 g1@2 d2@2 g1@2 d2 ~ g1@2 d2@2",
})).s("gm_electric_bass_finger").gain(0.34)

// bass · piano
const bass_2 = note(`<
  ~@2 A B A C A C A C A C A C A C A C ~@16 A C A C A C A C ~@16 A C A C A C A C ~@8 A C A C A C A C D E A C A C A C A C
  A C A C A C A C ~@8 A C A C A C A C ~
>`.pickRestart({
  A: "g1 d2 f2 bb2 ~ f2 g2 c2", B: "~@10 d2@2 [g5,d6,f6] ~ g2@2, ~@6 f2 ~", C: "~@5 d2 f2 g2", D: "g2@3 f2 d2@3 c2",
  E: "bb1@3 c2 bb1@2 g1@2",
})).s("gm_piano").gain(0.18)

// chords · rock organ
const rock_organ = note(`<
  ~@26 A@2 B@2 A@2 ~ C D E D ~ F@2 D ~@9 A@2 B@2 A@2 G@2 D E D ~ F@2 D ~@23 F@2 ~@6 H@2 ~@6 F@2 ~@6 F@2 ~@3
>`.pickRestart({
  A: "[[bb3,d4,bb4,d5]!3 [g3,bb3,g4,bb4]!2 [g3,bb3,g4,bb4]@2 [a3,c4,a4,c5]@2 [f3,c4,f4,c5] ~@6]/2", // Bb Gm Am F5
  B: "[[bb3,d4,bb4,d5]@2 [bb3,d4,bb4,d5]@2 [bb3,d4,bb4,d5]@2 [g3,bb3,g4,bb4]@2 [g3,bb3,g4,bb4]@2 [g3,bb3,g4,bb4]@4 [a3,c4,a4,c5]@4 [bb3,d4,bb4,d5] [a3,c4,a4,c5] [g3,bb3,g4,bb4]@2 ~@10]/2", // Bb Gm Am Bb Am Gm
  C: "~@3 [g3,d4]", D: "[a3,c4,a4,c5]!7 [g3,bb3,g4,bb4]", E: "~@2 [a3,c4,a4,c5] [g3,bb3,g4,bb4] ~@4",
  F: "[~ [a3,c4,a4,c5]!2 [a3,c4,a4,c5]@2 [a3,c4,a4,c5]@2 [a3,c4,a4,c5]@2 [a3,c4,a4,c5]!2 ~@2 [g3,bb3,g4,bb4] ~@2]/2", // Am Gm
  G: "[~@12 [d4,g4] ~ [g4,d5]@13 ~ [g3,d4]@4]/2", // G5
  H: "[~ [a3,c4,a4,c5]!2 [a3,c4,a4,c5]@2 [a3,c4,a4,c5]@2 [a3,c4,a4,c5]@2 [a3,c4,a4,c5] [a3,c4,a4,c5]@3 [g3,bb3,g4,bb4] ~@2]/2", // Am Gm
})).s("gm_rock_organ").gain(0.01)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@5 A B C D E F C D G F C D G ~@8 F C D G F C H@2 F C D G F C D G F C D G F C D G F C D G F C H@2 F C D G F C D G F C
  D G F C D G F C I ~@7 F C D G F C D G F C D G F C D G ~@8 F C D G F C D G ~
>`.pickRestart({
  A: "~@7 [g3,bb3,d4,f4]", // Gm7
  B: "[g3,bb3,d4,f4]@4 [g3,bb3,d4,f4] ~@3 [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,e4]@2", // Gm7 Em7b5
  C: "[g3,bb3,d4,e4]@2 [g3,bb3,d4,e4] ~ [g3,bb3,d4,e4] ~ [g3,bb3,d4,e4] ~@3 [g3,bb3,d4,e4]@2 [g3,bb3,d4,e4] ~ [g3,bb3,d4,e4] ~", // Em7b5
  D: "[g3,bb3,d4,f4]@4 [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~@3 [g3,bb3,d4,e4]@2", // Gm7 Em7b5
  E: "[g3,bb3,d4,e4]@2 [g3,bb3,d4,e4] ~ [g3,bb3,d4,e4]@2 [g3,bb3,d4,e4] ~ d4@2 f4@2 g4@2 [g3,bb3,d4,e4]@2", // Em7b5
  F: "[g3,bb3,d4,f4]@4 [g3,bb3,d4,f4] ~@5 [g3,bb3,d4,f4]@2 [g3,bb3,d4,f4] ~ [g3,bb3,d4,e4]@2", // Gm7 Em7b5
  G: "[g3,bb3,d4,e4]@2 [g3,bb3,d4,e4] ~ [g3,bb3,d4,e4]@2 [g3,bb3,d4,e4] ~ [g3,bb3,d4,e4] ~ [g3,bb3,d4,e4] ~@3 [g3,bb3,d4,e4]@2", // Em7b5
  H: "[g3,bb3,d4,f4]/2", I: "[g3,bb3,d4,f4]@4 [g3,bb3,d4,f4] ~ [g3,bb3,d4,f4] ~@9",
})).s("gm_electric_guitar_clean").gain(0.12).pan(0.1)

// other · electric guitar clean
const electric_guitar_clean_2 = note(`<
  ~@10 A B A B A B A B ~@8 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 C D A B A B A B A B ~@4 A B A B A
  B A B A B A B ~@2 A B A B A B A B A B A B A B A B ~@8 A B A B A B A B ~
>`.pickRestart({
  A: "g2 d3 f3 bb3 ~ f3 g3 c3", B: "~@5 d3 f3 g3", C: "g3@3 f3 d3@3 c3", D: "bb2@3 c3 bb2@2 g2@2",
})).s("gm_electric_guitar_clean").gain(0.14)

// chords · electric guitar clean
const electric_guitar_clean_3 = note("<~@18 A@3 ~@3 B@2 ~@18 C@2 ~@2 C@2 ~@18 A@3 D@3 ~@43>".pickRestart({
  A: "[~@7 g5@17]/3", B: "[g4,g5]/2", C: "[~@7 [g3,bb3,e4,g4]@9]/2", D: "[~@3 [g4,g5]@17 ~@4]/3",
})).s("gm_electric_guitar_clean").gain(0.36).pan(0.8)

// chords · trumpet
const trumpet = note(`<
  ~@5 A ~@3 A ~@3 A ~@3 A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@19 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~
>`.pickRestart({
  A: "~@10 [d5,f5] ~ [d5,g5] ~ [d5,f5] ~", // Dm G5 Dm
})).s("gm_trumpet").gain(0.23).pan(0.8)

// chords · rock organ
const rock_organ_2 = note(`<
  ~@4 A B C@3 D C@3 E C@3 F ~@16 C@3 G C@3 H ~@16 C@3 I C@3 F ~@18 C@3 J C@3 K C@3 L C@3 M ~@8 C@3 G C@3 F ~
>`.pickRestart({
  A: "g6", B: "[g5,d6,f6]@2 g4 ~ [g5,f6] ~ [g4,g5,d6,f6]@4 g6@2 f6@2 d6@2, [g4,db6] ~@3 d6@2 ~@4 gb6 ~@5", C: "g6/3",
  D: "[g5,d6,f6]@3 [g5,d6,f6]@2 g6 f6 d6, db6 ~@9 gb6 ~@5", // G7
  E: "[g5,d6,f6]@4 [d6,f6] ~ [g5,d6,f6]@4 g6@2 f6@2 d6@2, db6 ~@3 g5@2 ~@4 gb6 ~@5", // G7 Dm G7
  F: "[g5,f6] [g5,d6,f6]@3 [g5,d6,f6] g6 f6 d6, [db6,d6] ~@9 gb6 ~@5", // G7 Dmaj7
  G: "[g5,d6,f6]@3 ~ [g5,d6,f6] ~ [g5,d6,f6]@4 g6@2 f6@2 d6@2, db6 ~@9 gb6 ~@5", // G7
  H: "[g5,db6,d6] ~ [g5,d6,f6]@6 [g5,d6,f6]@2 g6@2 f6@2 d6@2, f6@2 ~@8 gb6 ~@5", // G G7
  I: "[g5,d6,f6]@2 [g5,d6] [g5,d6,f6]@2 g6 f6 d6, db6 ~@3 f6 ~@5 gb6 ~@5", // G7 G5 G7
  J: "[g5,d6,f6]@3 ~ [g5,f6]@2 [g5,d6,f6]@4 g6@2 f6@2 d6@2, db6 ~@3 d6 ~@5 gb6 ~@5", // G7
  K: "[g5,db6,d6,f6] ~ [g5,d6,f6]@6 [g5,d6,f6]@2 g6@2 f6@2 d6@2, ~@10 gb6 ~@5", // G7
  L: "[g5,d6,f6]@3 ~ [g5,d6] ~ [g5,d6,f6]@4 g6@2 f6@2 d6@2, db6 ~@3 f6@2 ~@4 gb6 ~@5", // G7 G5 G7
  M: "[g5,db6,d6] ~ [g5,d6,f6]@5 ~ [g5,d6,f6]@2 g6@2 f6@2 d6@2, f6@2 ~@8 gb6 ~@5", // G G7
})).s("gm_rock_organ").gain(0.07)

// chords · piano
const piano = note(`<
  ~@9 A B A B A B A B ~@8 A B A B A B ~@3 B A B A B A B ~@8 A B A B A B ~@3 B A B A B A B ~@8 A B A B A B A B ~@3 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 ~
>`.pickRestart({
  A: "~@7 [g3,bb3,d4,f4]", B: "~@7 [g3,bb3,e4]",
})).s("gm_piano").gain(0.12).pan(0.9)

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

// drums · snare
const snare = s("sd").struct("<~@5 A B@26 ~ A B@15 C B@6 ~ A B@15 D B@7 D ~@2 B@31 E ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "~ x!3", E: "~@4 x ~@2 x!3 ~@2 x ~ x ~",
})).gain(0.4)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 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 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 A B A B A B A B A B A B A B A ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6",
})).gain(0.35)

// drums · cowbell
const cowbell = s("cb").struct("<~@6 [x!4]!43 [x!3 ~] [x!4]!66 ~>").gain(0.25)

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

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~ [x!4] ~@81 [x!4] ~@33>").gain(0.2)

// drums · shaker
const shaker = s("sh").struct("<~@2 [x!2 ~ x!3 ~ x]!114 ~>").gain(0.2)

stack(
  bass, bass_2, rock_organ, electric_guitar_clean, electric_guitar_clean_2, electric_guitar_clean_3, trumpet,
  rock_organ_2, piano, kick, snare, hihat, open_hat, cowbell, crash, crash_soft, shaker
)

More by All Saints