Strudelify
Manic Monday cover art

Manic Monday

The Bangles

KeyD majorTempo116 bpm
0:00/0:00
// Manic Monday — The Bangles
// 116 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(116/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 · piano · "Honky-tonk Piano"
const piano = note(`<
  A B@2 C A B@2 C D E F@2 G E H I J K L@2 M N O@2 P Q R S T U V W X Y E F@2 G E H I J K L@2 M N O@2 P Q R S T U V W X Y
  Z AA AB AC AD AE AF AG AH AI AJ@2 AK AL P Q R S T AM X AN@2
>`.pickRestart({
  A: "~ a4 d5 a5 g5 f#5 e5 f#5, d4 d5",
  B: "[e5 f#5 e5 d5 c#5@2 e5@2 d5@2 c#5@2 b4@2 [d4,f#4,a4,c#5]@16 ~@2, [g4,b4]@4 [e4,g4]@3 ~@9]/2", C: "[e4,g4,b4,d5]",
  D: "[f#4,a4,d5]", E: "e5 f#5!4 g5!3, [a4,d5]!2",
  F: "[e5@4 e5@2 e5@2 e5!2 e5@2 d5@2 [d5,f#5]@4 ~@2 f#5@2 a5@2 g5@2 f#5@2 e5@2 d5@2, [g4,b4]@4 [g4,b4]@3 a4@8 ~, ~@9 d5@6 ~]/2", // D G
  G: "e5 d5 e5 f#5 e5@2 d5 e5, [g4,b4]@3 [g4,b4]", H: "e5!5 d5!3, [g4,b4]@4 [g4,b4]@3 ~",
  I: "[d5,f#5] ~ f#5 a5 g5 f#5 e5 d5, a4@7 ~, ~ d5@6 ~", // D
  J: "e5@2 d5@2 e5@2 f#5@2 ~ f#5 e5 ~ d5@2 e5@2, [g4,b4]@3 [g4,b4], ~@4 e5 ~@3", // G
  K: "[a4,d5,f#5]@2 f#5 f#5@2 g5!3, ~@3 [a4,d5]@4 ~", // D D5
  L: "[e5!2 e5@2 e5 e5@2 [d5,f#5]@2 ~ f#5 a5 g5 f#5 e5 d5, [g4,b4]@4 [g4,b4]@3 a4@8 ~, ~@9 d5@6 ~]/2", // D G
  M: "e5 d5 e5 f#5 e5@2 d5@2, [g4,b4]@3 ~", N: "f#5@2 f#5!2 g5@2 g5!2, [a4,d5]!2",
  O: "[e5!6 d5 d5@2 d5 ~ d5 [f#4,a4,d5]@3 ~, [a4,c#5]@4 [a4,c#5]@3 f#4@5 ~@4, ~@7 a4@3 a4@2 ~@4]/2", // D A
  P: "g5!2 f#5!2 e5@2 f#5@2, [f#4,a4]", Q: "e5@2 d5@2 a4@3 b4, [f#4,a4] [d4,f#4]",
  R: "g4@3 a4 g5!2 f#5@2, [b3,d4] [b4,d5]", S: "e5@2 f#5@2 a4@3 b4, [a4,d5] [d4,f#4]",
  T: "g4@3 a4 g5 ~ f#5@2, [b3,d4] [b4,d5]", U: "e5@2 d5@2 f#5@3 g5, [f#4,a4] [a4,d5]",
  V: "g5@2 f#5 g5!3 f#5!2, [b4,d5]!2", W: "e5@2 f#5@2 a4@3 [a3,a4], [a4,d5] [d4,f#4]",
  X: "g5!2 f#5!2 e5@2 f#5@2, [b4,d5] [a4,c#5]", Y: "e5 d5@3, [f#4,a4]",
  Z: "b5 a5 f#5 [f#5,b5]@2 f#5!2 a5, d5@3 d5@4 ~, f#5 ~@3", AA: "b5 a5 ~ a5 b5@2 b5@2, d5 [d5,f#5], f#5!2 ~@2",
  AB: "g#5@2 g#5@2 g#5@4 [e5,g#5]@3 f#5 e5@4, [b4,e5] b4", AC: "d5 e5 d5 e5, [g#4,b4]",
  AD: "a5!3 a5@2 a5!3, [b4,d5]@3 [b4,d5]@4 ~", AE: "a5!2 a5@2 a5!4, [c#5,e5]!2",
  AF: "f#5@2 f#5 f#5@2 e5 d5@2, [b4,d5]@3 b4@4 ~, ~@3 d5@3 ~@2", AG: "d5@2 e5@2 d5@2 e5 b4, f#4, b4@7 ~",
  AH: "d5!4 d5@2 d5 e5, [g4,b4]!2", AI: "~@13 b3 b3@2, [g#4,b4,e5]",
  AJ: "[b3!2 ~ [b3,d4,e4,a4] d4!2 b3 ~@2 a3 c#4 e4 [c#4,e4,g4]@2 [c#4,e4,g4]@2, [c#4,e4,a4] ~@2 [e4,a4] ~@4, ~@7 d4@3 ~@6]/2", // Bm7 C#dim A A5
  AK: "a#3 c#4 e4 g4", AL: "a#4@6 ~ a3", AM: "e5@2 d5@2 a4@3 a4, [f#4,a4] [d4,f#4]",
  AN: "[[f#4,a4,e5] [f#4,a4,d5]@6 ~]/2", // F#m7 D
})).s("gm_piano").gain(0.61)

// bass · synth bass 2
const bass = note(`<
  A B A C A B A C D A E A B A E A F A E A B G@2 H I J F J F J F K L D A E A B A E A F A E A B G@2 H I J F J F J F K L D
  M N O@2 E G P Q E R S T ~@2 I J F J F A U V@2
>`.pickRestart({
  A: "d2@3 d2 d2@4", B: "g2 e2", C: "g2 f#2 e2 a2", D: "d2", E: "g2@3 g2 g2@4", F: "g2 f#2 e2@2", G: "a2@3 a2 a2@4",
  H: "d2@3 d2 ~@3 [a1,a2], ~ d2", I: "a2", J: "d2@3 d2 d2@3 d2", K: "d2@3 d2 d2@3 ~", L: "g2@4 a2@2 ~ a2",
  M: "b2@3 b2@4 ~", N: "b2@3 b2 b2@2 b2@2", O: "e2@3 e2 e2@4", P: "b2@3 b2 b2@4", Q: "b2 c#3 d3 b2",
  R: "e2@3 e2 e2@2 e2@2", S: "a2@2 ~ a2 ~@2 a2@2", T: "~ a2 c#3 e3 g3@2 g3@2", U: "g2 a2", V: "[d2 d2@6 ~]/2",
})).s("gm_synth_bass_2").gain(0.78)

// chords · pad halo · "Pad 7 (halo)"
const pad_halo = note("<~@34 A B@2 C A D E F G H@2 I J K@2 L M N O P Q R S T U V W X Y Z AA AB AC ~@15>".pickRestart({
  A: "e5 f#5!4 g5!3, [a4,d5]!2", // D5
  B: "[e5@4 e5@2 e5@2 e5!2 e5@2 d5@2 [d5,f#5]@4 ~@2 f#5@2 a5@2 g5@2 f#5@2 e5@2 d5@2, [g4,b4]@4 [g4,b4]@3 a4@8 ~, ~@9 d5@6 ~]/2", // D G
  C: "e5 d5 e5 f#5 e5@2 d5 e5, [g4,b4]@3 [g4,b4]", D: "e5!5 d5!3, [g4,b4]@4 [g4,b4]@3 ~",
  E: "[d5,f#5] ~ f#5 a5 g5 f#5 e5 d5, a4@7 ~, ~ d5@6 ~", // D
  F: "e5@2 d5@2 e5@2 f#5@2 ~ f#5 e5 ~ d5@2 e5@2, [g4,b4]@3 [g4,b4], ~@4 e5 ~@3", // G
  G: "[a4,d5,f#5]@2 f#5 f#5@2 g5!3, ~@3 [a4,d5]@4 ~", // D D5
  H: "[e5!2 e5@2 e5 e5@2 [d5,f#5]@2 ~ f#5 a5 g5 f#5 e5 d5, [g4,b4]@4 [g4,b4]@3 a4@8 ~, ~@9 d5@6 ~]/2", // D G
  I: "e5 d5 e5 f#5 e5@2 d5@2, [g4,b4]@3 ~", J: "f#5@2 f#5!2 g5@2 g5!2, [a4,d5]!2",
  K: "[e5!6 d5 d5@2 d5 ~ d5 [f#4,a4,d5]@3 ~, [a4,c#5]@4 [a4,c#5]@3 f#4@5 ~@4, ~@7 a4@3 a4@2 ~@4]/2", // D A
  L: "g5!2 f#5!2 e5@2 f#5@2, [f#4,a4]", M: "e5@2 d5@2 a4@3 b4, [f#4,a4] [d4,f#4]",
  N: "g4@3 a4 g5!2 f#5@2, [b3,d4] [b4,d5]", O: "e5@2 f#5@2 a4@3 b4, [a4,d5] [d4,f#4]",
  P: "g4@3 a4 g5 ~ f#5@2, [b3,d4] [b4,d5]", Q: "e5@2 d5@2 f#5@3 g5, [f#4,a4] [a4,d5]",
  R: "g5@2 f#5 g5!3 f#5!2, [b4,d5]!2", S: "e5@2 f#5@2 a4@3 [a3,a4], [a4,d5] [d4,f#4]",
  T: "g5!2 f#5!2 e5@2 f#5@2, [b4,d5] [a4,c#5]", U: "e5 d5@3, [f#4,a4]",
  V: "b5 a5 f#5 [f#5,b5]@2 f#5!2 a5, d5@3 d5@4 ~, f#5 ~@3", W: "b5 a5 ~ a5 b5@2 b5@2, d5 [d5,f#5], f#5!2 ~@2",
  X: "g#5@2 g#5@2 g#5@4 [e5,g#5]@3 f#5 e5@4, [b4,e5] b4", Y: "d5 e5 d5 e5, [g#4,b4]",
  Z: "a5!3 a5@2 a5!3, [b4,d5]@3 [b4,d5]@4 ~", AA: "a5!2 a5@2 a5!4, [c#5,e5]!2",
  AB: "f#5@2 f#5 f#5@2 e5 d5@2, [b4,d5]@3 b4@4 ~, ~@3 d5@3 ~@2", AC: "d5@2 e5@2 d5@2 e5 b4, f#4, b4@7 ~",
})).s("gm_pad_halo").gain(0.78)

// chords · piano · "Aoustic Grand Piano"
const piano_2 = note(`<
  A B@2 C A B@2 C D E F@2 G E H I J K L@2 M N O@2 P Q R S T U V W X Y E F@2 G E H I J K L@2 M N O@2 P Q R S T U V W X Y
  Z AA AB AC AD AE AF AG AH AI AJ@2 AK AL P Q R S T AM X AN@2
>`.pickRestart({
  A: "~ a3 d4 a4 g4 f#4 e4 f#4, d3 d4",
  B: "[e4 f#4 e4 d4 c#4@2 e4@2 d4@2 c#4@2 b3@2 [d3,f#3,a3,c#4]@16 ~@2, [g3,b3]@4 [e3,g3]@3 ~@9]/2", C: "[e3,g3,b3,d4]",
  D: "[f#3,a3,d4]", E: "e4 f#4!4 g4!3, [a3,d4]!2",
  F: "[e4@4 e4@2 e4@2 e4!2 e4@2 d4@2 [d4,f#4]@4 ~@2 f#4@2 a4@2 g4@2 f#4@2 e4@2 d4@2, [g3,b3]@4 [g3,b3]@3 a3@8 ~, ~@9 d4@6 ~]/2", // D G
  G: "e4 d4 e4 f#4 e4@2 d4 e4, [g3,b3]@3 [g3,b3]", H: "e4!5 d4!3, [g3,b3]@4 [g3,b3]@3 ~",
  I: "[d4,f#4] ~ f#4 a4 g4 f#4 e4 d4, a3@7 ~, ~ d4@6 ~", // D
  J: "e4@2 d4@2 e4@2 f#4@2 ~ f#4 e4 ~ d4@2 e4@2, [g3,b3]@3 [g3,b3], ~@4 e4 ~@3", // G
  K: "[a3,d4,f#4]@2 f#4 f#4@2 g4!3, ~@3 [a3,d4]@4 ~", // D D5
  L: "[e4!2 e4@2 e4 e4@2 [d4,f#4]@2 ~ f#4 a4 g4 f#4 e4 d4, [g3,b3]@4 [g3,b3]@3 a3@8 ~, ~@9 d4@6 ~]/2", // D G
  M: "e4 d4 e4 f#4 e4@2 d4@2, [g3,b3]@3 ~", N: "f#4@2 f#4!2 g4@2 g4!2, [a3,d4]!2",
  O: "[e4!6 d4 d4@2 d4 ~ d4 [f#3,a3,d4]@3 ~, [a3,c#4]@4 [a3,c#4]@3 f#3@5 ~@4, ~@7 a3@3 a3@2 ~@4]/2", // D A
  P: "g4!2 f#4!2 e4@2 f#4@2, [f#3,a3]", Q: "e4@2 d4@2 a3@3 b3, [f#3,a3] [d3,f#3]",
  R: "g3@3 a3 g4!2 f#4@2, [b2,d3] [b3,d4]", S: "e4@2 f#4@2 a3@3 b3, [a3,d4] [d3,f#3]",
  T: "g3@3 a3 g4 ~ f#4@2, [b2,d3] [b3,d4]", U: "e4@2 d4@2 f#4@3 g4, [f#3,a3] [a3,d4]",
  V: "g4@2 f#4 g4!3 f#4!2, [b3,d4]!2", W: "e4@2 f#4@2 a3@3 [a2,a3], [a3,d4] [d3,f#3]",
  X: "g4!2 f#4!2 e4@2 f#4@2, [b3,d4] [a3,c#4]", Y: "e4 d4@3, [f#3,a3]",
  Z: "b4 a4 f#4 [f#4,b4]@2 f#4!2 a4, d4@3 d4@4 ~, f#4 ~@3", AA: "b4 a4 ~ a4 b4@2 b4@2, d4 [d4,f#4], f#4!2 ~@2",
  AB: "g#4@2 g#4@2 g#4@4 [e4,g#4]@3 f#4 e4@4, [b3,e4] b3", AC: "d4 e4 d4 e4, [g#3,b3]",
  AD: "a4!3 a4@2 a4!3, [b3,d4]@3 [b3,d4]@4 ~", AE: "a4!2 a4@2 a4!4, [c#4,e4]!2",
  AF: "f#4@2 f#4 f#4@2 e4 d4@2, [b3,d4]@3 b3@4 ~, ~@3 d4@3 ~@2", AG: "d4@2 e4@2 d4@2 e4 b3, f#3, b3@7 ~",
  AH: "d4!4 d4@2 d4 e4, [g3,b3]!2", AI: "~@13 b2 b2@2, [g#3,b3,e4]",
  AJ: "[b2!2 ~ [b2,d3,e3,a3] d3!2 b2 ~@2 a2 c#3 e3 [c#3,e3,g3]@2 [c#3,e3,g3]@2, [c#3,e3,a3] ~@2 [e3,a3] ~@4, ~@7 d3@3 ~@6]/2", // Bm7 C#dim A A5
  AK: "a#2 c#3 e3 g3", AL: "a#3@6 ~ a2", AM: "e4@2 d4@2 a3@3 a3, [f#3,a3] [d3,f#3]",
  AN: "[[f#3,a3,e4] [f#3,a3,d4]@6 ~]/2", // F#m7 D
})).s("gm_piano").gain(0.61)

// drums · kick
const kick = s("bd").struct("<~@34 A@25 B@2 A@8 C D ~ E ~ A@6 F ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x ~@4", C: "x ~@2 x ~@2 x ~", D: "x ~ x!2", E: "~ x", F: "x!2 ~@2",
})).gain(0.8)

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

// drums · ride
const ride = s("rd").struct("<~@9 [x!4]!60 x ~@4 [x!4]!6 [x!2 ~@2] ~>").gain(0.64)

stack(piano, bass, pad_halo, piano_2, kick, snare, ride)

More by The Bangles