Strudelify
Mandela Day cover art

Themes - Volume 4

Mandela Day

Simple Minds

KeyG minorTempo100 bpm
0:00/0:00
// Mandela Day — Simple Minds
// 100 bpm, 4/4, key G minor. 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: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 9 electric guitar muted (copy of ch 3 electric guitar clean, 0.229 beats late)
// note: Full arrangement: all 95 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · "M.Maselli**"
const piano = note(`<
  ~@2 A B C@2 D@3 E F G ~ F G ~ H I@2 J K@2 L M@2 N K@2 ~@6 H I@2 J K@2 L M@2 N K@2 O P ~@6 H I@2 J K@2 L M@2 N K@2 O P
  ~@27
>`.pickRestart({
  A: "d5@5 ~@3", B: "~@10 c5@2 ~ d5@3", C: "[a4@19 ~@3 g4@7 ~@3]/2",
  D: "[~@14 d5@10 ~@2 d5 f5@2 g5@2 ~ a4@2 ~@2 d5 ~@7 a4@2 f5 e5, ~@24 [d4,a4]@4 ~@3 g5@11 ~@6, ~@32 d4@11 ~@5, ~@35 a4@7 ~@6]/3", // D5
  E: "a4@7 ~ a4@3 c5@4 ~, d5 ~@3", F: "d5 ~@7 c5 ~@3 f5 ~@3", G: "d5 ~@15",
  H: "[bb3,f4,bb4,d5]@3 ~@5 [f3,f4,a4,c5]@4 ~@4", I: "[[bb4,d5]@22 ~ d5@4 g4@3 bb4 ~, g3@27 ~@5, g4@5 ~@3]/2",
  J: "[bb3,f4,bb4,d5] ~ [f3,f4,a4,c5] ~", K: "[[g3,g4,bb4,d5]@13 ~@3]/2",
  L: "[bb3,f4,bb4,d5]@2 ~@2 [f4,a4,c5]@3 ~, ~ f3", M: "[[g4,bb4,d5]@7 ~, g3@15 ~]/2",
  N: "[bb3,f4,bb4,d5]@4 ~@4 [f4,a4,c5]@5 ~@3, ~ f3", // Bb F
  O: "[d4,f4,a4]@2 a3 d4@2 f4@2 [f4,a4]@2 ~ f4 ~ [d4,f4,a4]@2 d4@2, d3@5 ~@4 d4@2 [d3,a3]@3 ~@2", // Dm F Dm D5
  P: "~@3 a4@2 a3@2 d4 ~ d3 [d4,f4] f4 d3@2 d4 ~, d3 ~, f4@6 ~@5 a4@2 ~@3, ~ a3 ~@2 a3 ~@3", // Dm
})).s("gm_piano").gain(0.39)

// bass · electric bass finger
const bass = note(`<
  ~@5 A B C D@2 E F G E H I E H J E K L E H M E H@2 E F G E H I E H J E K L E H M E H@2 N O E F G E H I E H J E K L E H
  M E H@2 N O E F G E H I E F G E H I E F G E H I E F G E H P@2 Q@2
>`.pickRestart({
  A: "~@14 g2 d2", B: "g1", C: "g1@7 g2", D: "[g1@22 g2@3 d2@3 g1@4]/2", E: "bb1 f1", F: "g1@3 d2@3 a2 d2",
  G: "g1@3 d2@3 g2 d2", H: "g1@11 d2 g2@2 d2@2", I: "g1@6 c3@3 bb2@2 a2 g2@2 g1@2", J: "g1@4 d2@3 g2@4 d2@3 g1@2",
  K: "~@11 g2 ~ g2 d2@2, g1@13 ~@3", L: "g1@7 d2 bb2 ~ bb2 ~ bb2 c3 bb2@2", M: "g1@11 bb2 d2@2 g2 ~",
  N: "d1@3 d2@4 a2@4 d2@3 a2!2", O: "d2@3 d2@4 a2@4 d2 a2@2 d2@2", P: "[g1@6 c3@3 bb2@2 a2 ~ g2@2 g1@2 g1 ~@14]/2",
  Q: "[~@2 g2@19 ~@11]/2",
})).s("gm_electric_bass_finger").gain(0.34)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@11 A@3 B@3 C@8 D@2 E ~ F@3 B@3 C@8 D@2 E ~@3 F@3 B@3 C@8 D@2 E ~@3 F@21 G@5
>`.pickRestart({
  A: "[~@15 c4@5 ~@4, g2@14 c4@5 bb3@6 c4@3 f4@12 ~@8, ~ g3@7 g2@12 ~@4, ~@3 bb3@6 c4@3 f4@9 c4@2 f4@4 bb3@13 ~@8, ~@5 c4@2 f4@4 bb3@7 g3@22 ~@8]/3",
  B: "[~@3 bb3@2 c4@2 f4@2 c4@2 ~ f4@2 ~@5 bb3@2 c4@2 f4@2 c4@2 bb3 f4@2 ~@2 [f3,bb3,d4]@8 [f3,a3,c4]@7 ~, g2@15 ~ g2@10 ~@22, ~ g3@7 ~ g3@4 ~@11, ~@11 bb3@2 ~ c4@6 ~@10 c4@10 ~@8]/3", // Bb F
  C: "[g2@2 [f3,bb3,d4] ~@2 [f3,bb3,d4] ~ [f3,bb3] ~ [f3,bb3] ~ d3 [f3,bb3,d4] ~ [f3,bb3,d4]@8 ~@5 d4 ~@2 bb3@2 bb3@8 ~@10 [f3,bb3] [f3,bb3]@2 [f3,bb3,d4]@2 [f3,bb3,d4] ~ bb3 f3 d3 bb3@2 ~@5 g3@8 ~@5 f3@6 f3@2 [f2,f3,a3,c4]@10 [g3,bb3,d4] [g3,bb3] ~ [g3,bb3,d4]@2 [g3,bb3] ~ [g3,bb3] g3 d3 [f3,bb3,d4] ~ [bb3,d4]@9 [c4,e4,f4]@4 [g3,c4,e4]@5, ~@22 f3@18 f3@10 d4@3 ~@7 d4@16 g3@4 [bb2,bb3]@9 ~@39, ~@22 d4@5 ~ d4@13 ~@7 g2@7 ~@7 a3@19 ~@29 g3@13 ~@5, ~@23 bb3@7 ~@10 [a3,c4]@15 ~@5 f3@15 f3@3 d4@11 ~@39, ~@67 d3@14 ~@47]/8", // Bb Bb5 Bb Bb5 Bb F Gm Bb …
  D: "[[f3,bb3,d4]@8 ~@8 [g3,bb3,d4]@2 [g3,bb3,d4] [g3,d4] ~ [g3,bb3,d4] ~ [g3,d4] ~ [g3,bb3,d4]@2 ~ [g3,bb3,d4]@2 ~@2, ~@8 [f3,a3,c4]@11 ~@13]/2", // Bb Gm G5 Gm G5 Gm F
  E: "[g3,bb3,d4]@2 [g3,d4] [g3,d4]@2 [g3,d4]@2 [g3,d4]@2 [g3,bb3,d4]@2 ~ [g3,bb3,d4]@2 ~@2, ~@2 bb3@3 bb3@4 ~@7", // Gm G5 Gm
  F: "[~@3 bb3@2 c4@2 f4@2 c4@2 ~ f4@2 ~@5 bb3@2 c4@2 f4@2 c4@2 bb3 f4@2 c4@4 ~@14, g2@15 ~ g2@10 ~@22, ~ g3@7 ~ g3@4 ~@11, ~@11 bb3@2 ~ c4@6 ~@28]/3",
  G: "[~@3 bb3@2 c4@2 f4@2 c4@2 ~ f4@2 ~@5 bb3@2 c4@2 f4@2 c4@2 bb3 ~ f4@2 ~ a3 ~ d4@32 ~@14, g2@15 ~ g2@10 ~@7 [g2,a3,bb3]@32 ~@15, ~ g3@7 ~ g3@4 ~@27, ~@11 bb3@2 ~ c4@6 ~@11 c4@32 ~@17]/5", // Gm
})).s("gm_electric_guitar_clean").gain(0.13).pan(0.1)

// chords · rock organ
const rock_organ = note(`<
  ~@10 A B@2 A B@2 ~@12 A B@2 A B@2 ~@12 C@2 A B@2 A B@2 ~@12 C@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A B@2 A D@2 ~@3
>`.pickRestart({
  A: "[f4,bb4,d5] [f4,a4,c5]", B: "[g4,bb4,d5]/2", C: "[d5,f5,a5]/2", D: "[[g4,bb4,d5]@31 ~]/2",
})).s("gm_rock_organ").gain(0.21)

// other · overdriven guitar
const overdriven_guitar = note("<~@2 A@2 B@2 C@4 ~@38 D E@2 ~@17 D E@2 ~@24>".pickRestart({
  A: "[g3@13 bb3@3]/2", B: "[g3@14 g4@8 f4@9 d4]/2", C: "[c4@28 bb3@6 g3@12 f3@17 ~]/4", D: "~@4 eb5@3 d5@8 ~",
  E: "[c5@3 bb4@13]/2",
})).s("gm_overdriven_guitar").gain(0.27).pan(0.8)

// other · overdriven guitar
const overdriven_guitar_2 = note("<~@2 A B@2 C D@2 E F@2 ~@37 G@4 ~@16 G@4 ~@23>".pickRestart({
  A: "~ g3 ~@2", B: "[~@7 bb3@2 bb3 ~@6]/2", C: "~ g4@2 g4@2 f4@2 ~", D: "[~@3 d4 c4@4 c4@24]/2",
  E: "bb3@2 bb3 g3@2 ~@3", F: "[~@2 f3@4 f3@13 ~@13]/2",
  G: "[~@8 eb5@3 ~ eb5@3 d5@4 ~ c5@4 c5@2 bb4@4 bb4@22 ~@12, ~@11 d5@4 ~@49]/4",
})).s("gm_overdriven_guitar").gain(0.15).pan(0.1)

// other · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@2 A@2 B@3 ~ C@2 ~@85>".pickRestart({
  A: "[~@8 g3@23 ~]/2", B: "[~@4 g3@4 g3@10 ~@12 f4@5 ~@4 d4 ~@8]/3", C: "[~@5 g3@4 ~@7]/2",
})).s("gm_overdriven_guitar").gain(0.07).pan(0.1)

// drums · kick
const kick = s("bd").struct(`<
  ~@2
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!89
  [x ~@2 x!2 ~@2 x!2 ~@2 x ~ x ~@2]
  [x!2 ~@14]
  ~
  [~ x!2 ~@13]
>`).gain(0.42)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@9 A ~@13 B C D E F ~@13 B C D E F ~ G ~@13 B C D E H ~ G ~@23 I ~@3
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@9 x ~ x ~@3 x", C: "~@6 x!2 ~@8", D: "~@3 x ~@3 x ~ x ~ x ~@4", E: "~@3 x ~ x ~@3 x!2 ~@4 x",
  F: "~@3 x ~@3 x ~@2 x ~@5", G: "~@3 x", H: "~@3 x ~@3 x ~@8", I: "~@7 x ~@8",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@6 A B@2 C A B A B A B ~@12 A B A B A B ~@12 A B A B A B A B ~@12 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 C
  ~@3
>`.pickRestart({
  A: "~@3 x", B: "x ~@2 x", C: "x",
})).gain(0.48)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@15 A ~@17 A ~@19 A ~@19 A ~@5 A ~@5 A ~@9>".pickRestart({
  A: "~@11 x ~@4",
})).gain(0.3)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@11 A B C D A ~@13 A B C D A ~@13 A ~ A B C D A ~@13 A ~ A B C D A ~ A B C D A ~ A B C D A ~ A B C D A ~@3
>`.pickRestart({
  A: "~ x ~@14", B: "~ x ~@6 x ~@7", C: "~ x ~@4 x ~@2 x ~@6", D: "~ x ~@3 x ~@2",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@17 A ~@13 B ~@5 A ~@13 B ~@5 A ~@5 A ~@5 A ~@9>".pickRestart({
  A: "~@7 x", B: "~@11 x ~ x ~@2",
})).gain(0.54)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@10 A B C D C E ~@12 A B C D C E ~@12 A B A B C D C E ~@12 A B A B C D C E A B C D C E A B C D C E A B C D C F ~@3
>`.pickRestart({
  A: "~@3 x ~@12", B: "~@3 x ~@11 x", C: "~@5 x ~@10", D: "~@3 x ~@8 x ~@3", E: "~@3 x ~@9 x ~@2", F: "~@3 x ~@10 x ~",
})).gain(0.54)

// drums · high tom
const high_tom = s("ht").struct("<~@47 [~@9 x ~@6] ~@19 [~@9 x ~@6] ~@27>").gain(0.42)

// drums · crash
const crash = s("cr").struct(`<
  ~@10 A B ~ A B ~ B ~@2 B ~@2 B ~ C A B ~ A B ~ A B ~ B ~@2 B ~@2 B ~ C A B ~ D B A B ~ A B ~ B ~@2 B ~@2 B ~ C A B ~ D
  B A B ~ A B ~ A B ~ A B ~ A B ~ A B ~ A B ~ A B ~ E ~@2
>`.pickRestart({
  A: "x!2", B: "x", C: "~@7 x ~@8", D: "x ~@2 x", E: "~ x ~@14",
})).gain(0.42)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@23 A ~@17 A ~@5 B ~@13 A ~@5 B ~@24 B ~@2>".pickRestart({
  A: "~@9 x ~@6", B: "~@5 x ~@2",
})).gain(0.24)

// drums · ride
const ride = s("rd").struct(`<
  ~@46
  [~@7 x ~@3 x ~@4]
  [~@3 x ~ x ~ x ~@5 x ~@2]
  ~@18
  [~@7 x ~@3 x ~@4]
  [~@3 x ~ x ~ x ~@5 x ~@2]
  ~@27
>`).gain(0.42)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@46 [~@9 x ~@6] ~@19 [~@9 x ~@6] ~@25 [~@15 x] [~@3 x ~ x ~@10] ~>").gain(0.18)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~ x ~ x]!10 ~@6 [~ x ~ x]!12 ~@6 [~ x ~ x]!12 ~@8 [~ x ~ x]!12 ~@29>").gain(2.13)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<[x!2]!10 ~@6 [x!2]!12 ~@6 [x!2]!12 ~@8 [x!2]!12 ~@29>").gain(1.22)

// drums · shaker
const shaker = s("sh").struct(`<
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!10
  ~@6
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!12
  ~@6
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!12
  ~@8
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!12
  ~@29
>`).gain(0.18)

stack(
  piano, bass, electric_guitar_clean, rock_organ, overdriven_guitar, overdriven_guitar_2, overdriven_guitar_soft, kick,
  snare, snare_soft, low_tom, low_tom_soft, hihat, hihat_soft, mid_tom, open_hat, high_tom, crash, crash_soft, ride,
// … 2 more lines

More by Simple Minds