Strudelify
All I Need Is a Miracle cover art

1985 · Mike + The Mechanics

All I Need Is a Miracle

Mike + The Mechanics

KeyG majorTempo240 bpm
0:00/0:00
// All I Need Is a Miracle — Mike + The Mechanics
// 240 bpm, 8/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 138 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(240/8)

// 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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~@17 A B@15 C@2 D@2 B@4 C@2 D@2 E F D B D@2 F C G B F C G B F C G B D G@4 H@2 I@2 G@4 H@2 I@2 F D I G I@2 D H C G D H
  C G D H C G I C@4 J@2 K@2 F D I G I@2 D H C G D H C G D H C G D H C G D H C G D H C G ~
>`.pickRestart({
  A: "~ f2!7", B: "f2!8", C: "a2!8", D: "d2!8", E: "a#2!8", F: "c2!8", G: "g2!8", H: "b2!8", I: "e2!8", J: "c#2!8",
  K: "f#2!8",
})).s("gm_fretless_bass").gain(0.54)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~@21 A B C@2 A B C@2 ~@109>".pickRestart({
  A: "[a3,c4,f4]@2 ~ [g3,c4,e4]@4 [a3,c4,f4]", B: "[a3,c4,f4]@2 ~ [f3,a#3,d4]@4 [g3,c4,e4]",
  C: "[[a3,c4,f4]@2 ~ [g3,c4,e4]@2 [a3,c4,f4]@2 [f3,a#3,d4]@7 ~@2]/2", // F C F A#
})).s("gm_overdriven_guitar").gain(0.56)

// other · acoustic bass · "OVERDRIVE" · F C G F D
const acoustic_bass = note(`<
  ~@30
  [e4 c4 g3 a3 ~@4]
  ~
  [e4 c4 g3 a3 ~@4]
  ~@3
  [~ [f4,f5] [c4,c5] [g3,g4] [g4,g5]@2 [f4,f5] [d4,d5]]
  ~@101
>`).s("gm_acoustic_bass").gain(0.41)

// chords · slap bass 1 · "OVERDRIVE"
const slap_bass_1 = note("<~@37 A B ~ B C ~ D ~ E F G ~@3 H I H I J K J K J K J K L M N ~ N O ~ P ~@67>".pickRestart({
  A: "[c4,f4,a4,c5,f5] ~", B: "[c4,e4,g4]@2 ~ [c4,f4,a4]@2 ~@3", C: "[e3,a3,c4,e4]", D: "[d3,a3,d4,f4]",
  E: "[f3,a#3,f4]", F: "[f3,a3,f4]", G: "[f3,a#3,d4]", H: "[g3,c4,e4]", I: "[a3,c4,f4]", J: "[g3,c4,e4,g4]",
  K: "[a3,c4,f4,a4]", L: "~ [g3,c4,e4,g4]@3", M: "[b3,d4,g4] ~", N: "[d4,f#4,a4]@3 [b3,d4,g4]@3 ~@2", O: "[d4,f#4,a4]",
  P: "[b3,e4,g4]", // Em
})).s("gm_slap_bass_1").gain(0.56)

// other · synth brass 1 · "OVERDRIVE"
const synth_brass_1 = note("<~@71 A ~@27 B C B D ~@3 E ~@31>".pickRestart({
  A: "~ [g4,g5] [d4,d5] [a3,a4] [a4,a5]@2 [g4,g5] [e4,e5]", B: "a4 f#4 e4 f#4 a4 f#4 a4 b4",
  C: "c#5 e5 c#5 e5@2 c#5 b4 c#5", D: "c#5 e5 c#5 e5@2 ~@3", E: "~@2 b5 a5@2 ~@3",
})).s("gm_synth_brass_1").gain(0.29)

// chords · french horn · "OVERDRIVE"
const french_horn = note(`<
  ~@72 A B ~ C D ~ E ~ F G H ~@3 I J I J K L K L K L K L M ~@4 N O P Q F G H ~@3 I J I J K L K L K L K L I J I J K L K L
  K L K L ~
>`.pickRestart({
  A: "[b3,d4,g4] ~", B: "[d4,f#4,a4]@2 ~ [d4,g4,b4]@2 ~@3", C: "[a3,d4,f#4,a4]@2 ~ [b3,d4,g4,b4]@2 ~@3",
  D: "[f#3,b3,d4,f#4]", E: "[e3,b3,e4,g4]", F: "[g3,c4,g4]", G: "[g3,g4], b3 ~", H: "[g3,c4,e4]", I: "[a3,d4,f#4]",
  J: "[b3,d4,g4]", K: "[a3,d4,f#4,a4]", L: "[b3,d4,g4,b4]", M: "~ [a3,f#4,a4]@3, ~@4 d4 ~@11", N: "[e4,g#4,b4] ~@3",
  O: "~@5 f#5 g#5 a5, [e4,g#4,b4]", P: "~@4 f#5 e5 c#5@2 c#5@2 e5@2 c#5 b4 a4@2, f#4, a4@7 ~, c#5@3 ~@5",
  Q: "~@5 e4 [e4,a5] [e4,g5]", // A5 Em
})).s("gm_french_horn").gain(0.56)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note("<~@3 A@2 B@2 C@2 B@2 C@2 B@2 D@2 E@4 ~@116 F>".pickRestart({
  A: "[c4,g4,c5]/2", B: "[a#3,d4,f4,a#4,d5]/2", C: "[g#3,c4,d#4,g#4,c5]/2", D: "[f3,a#3,c4,f4,a#4]/2",
  E: "[[c4,c5]@8 ~@4 a4@3 ~, [f4,f5]@15 ~, a4@3 ~, ~@8 c5@7 ~]/4", F: "[d3,b3,g4]@3 ~",
})).s("gm_synth_strings_1").gain(0.29)

// chords · piano · "A.PIANO 3"
const piano = note(`<
  ~@21 A B C@2 A B C@2 ~@7 D E F ~ F G ~ H ~ I J K ~@3 L M L M L M L M L M L M N O P ~ P Q ~ R S O T ~ T U ~ R ~ V W L
  ~@3 X Y X Y Q Z AA Z AA Z AA Z AB AC AD AE AF AG AH AI AJ V W L ~@3 X Y X Y AA Z AA Z AA Z AA Z X Y X Y AA Z AA Z AA Z
  AA Z ~
>`.pickRestart({
  A: "[a4,c5,f5]@3 [g4,c5,e5]@4 [a4,c5,f5]", B: "[a4,c5,f5]@3 [f4,a#4,d5]@4 [g4,c5,e5]",
  C: "[[c5,f5]@3 [g4,c5,e5]@2 [a4,c5,f5]@2 [f4,a#4,d5]@7 ~@2, a4 ~@7]/2", D: "~@7 [d5,d6]", E: "[a4,c5,f5] ~",
  F: "[c5,e5,g5]@2 ~ [c5,f5,a5]@2 ~@3", G: "[a4,c5,e5]", H: "[a4,d5,f5]", I: "[f4,a#4,f5]", J: "[f4,a4,f5]",
  K: "[f4,a#4,d5]", L: "[g4,c5,e5]", M: "[a4,c5,f5]", N: "~ [g4,c5,e5,g5]@3", O: "[b4,d5,g5] ~",
  P: "[d5,f#5,a5]@3 [b4,d5,g5]@3 ~@2", Q: "[d5,f#5,a5]", R: "[b4,e5,g5]", S: "~@6 g5 [e4,e5]",
  T: "[d5,f#5,a5]@2 ~ [d5,g5,b5]@2 ~@3", U: "[b4,d5,f#5]", V: "[g4,c5,g5]", W: "[g4,g5], b4 ~", X: "[a4,d5,f#5]",
  Y: "[b4,d5,g5]", Z: "[b4,d5,g5,b5]", AA: "[a4,d5,f#5,a5]", AB: "~ [a4,d5,f#5,a5]@3", AC: "[c#4,e4,a4,c#5] ~",
  AD: "[e4,g#4,b4]@3 [e4,a4,c#5]@3 ~@2", AE: "[c#4,e4,a4] ~", AF: "[b3,e4,g#4]@3 [c#4,e4,a4]@3 ~@2",
  AG: "[e4,g#4,b4] ~@3", AH: "~@5 f#6 ~@2, [e5,g#5,b5]", AI: "[f#5,a5,c#6]", AJ: "~@7 [e5,g5]",
})).s("gm_piano").gain(0.41)

// other · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@28 A B ~ B C D@2 E ~@8 F G H I J K@2 ~@28 L M N O P Q@2 ~@16 R S@4 T N O U V ~@26
>`.pickRestart({
  A: "~@7 f4", B: "a4 c5!4 a4 ~@2", C: "e4 c4 g3 a3 ~ d5!3", D: "[d5 c5!3 a4 d5@4 c5 ~@3 a4 g4 f4]/2",
  E: "a4 g4 f4 g4 a4 f4 d4@2", F: "~@5 d5!3", G: "d5!3 ~ d5 ~ c5 a4", H: "c5 a4 ~@3 c5 d5 f5",
  I: "f5 d5 f5 d5 f5 d5 f5 g5", J: "[a4,c5,f5]", K: "[g4,c5,e5]/2", L: "~@5 e5!3", M: "e5!3 ~ e5 ~ d5 b4",
  N: "d5 b4 ~@3 d5 e5 g5", O: "g5 e5 g5 e5 g5 e5 g5 a5", P: "[b4,d5,g5]", Q: "[a4,d5,f#5]/2", R: "~@6 a5 e5",
  S: "[b5@4 ~ e5 c#5@2 ~@4 c#5@2 f#5@4 ~@8 f#5@2 g#5@2 a5@6 f#5 e5 c#5@2 c#5@2 e5@2 c#5 b4 a4@6 b5@2 a5@6 a5@2 g5@2, ~@2 f#5@3 e5@2 ~@25]/4",
  T: "e5!3 ~ e5 ~ d5 b4, g5 ~@15", U: "[b4,d5,g5] ~@7", V: "[a4,d5,f#5] ~@15",
})).s("gm_rock_organ").gain(0.41)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x!3 ~ x]!136 ~>").gain(0.72)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A@15 B C@2 ~@30 D ~@11 A ~@21 A ~@26 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~ x ~ x", D: "x",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D E@15 F G H I@2 J H I@2 J I@21 E H I@7 H I@3 K H I@20 K H I@7 H@2 L H J H I@7 H I@4 K M F@2 N F@3 N M F@2 N M F
  M O M@2 F N M F O@2 ~
>`.pickRestart({
  A: "~@8 x ~ x ~ x!2 ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x!3", D: "~ x!5 ~@2", E: "x!6 ~ x", F: "x!2 ~ x!3 ~ x",
  G: "x!2 ~ x ~ x ~ x", H: "~ x!7", I: "x!8", J: "x!7 ~", K: "x!6 ~@2", L: "~ x!6 ~", M: "~ x ~ x!3 ~ x",
  N: "x!2 ~ x!3 ~@2", O: "~ x ~ x!3 ~@2",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@50 A ~@12 A ~@21 A ~@12 B ~@13 A C@21 D@2 C ~>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~ x ~ x", D: "~ x ~@2",
})).gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<~@99 x ~@34 [~@3 x]!2 ~@2>").gain(0.72)

stack(
  bass, overdriven_guitar, acoustic_bass, slap_bass_1, synth_brass_1, french_horn, synth_strings_1, piano, rock_organ,
  kick, snare, low_tom, hihat, mid_tom, high_tom
)

More by Mike + The Mechanics