Strudelify

Steel Bars

Michael Bolton

KeyB majorTempo120 bpm
0:00/0:00
// Steel Bars — Michael Bolton
// 120 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 3 "bass1" named as a bass, played on electric bass finger (its pad poly patch is not one)
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · "bass1"
const bass = note(`<
  A B A C D E F@3 G H@2 I@2 H@2 I J K L M N D O D C P E F@3 G H@2 I@2 H@2 I J K L M N D O D C P E F@3 G Q I@2 Q R S T
  ~@6 U V W X@2 Y Z@3 AA V W X@2 Y AB@2
>`.pickRestart({
  A: "b2!4 f#2!4", B: "g#2!4 e3!4", C: "g#2!3 g#3@2 g#3 e3 g#2", D: "b2!2 d#3 f#3 f#2!2 a#2 c#3",
  E: "c#3@2 c#3@2 c#3@2 c#3@2 c#3@2 c#3@2 c#3@2 c#3 d#3", F: "[e3@14 ~ b2@2 b2!7]/3", G: "b2!7 c#3", H: "d3!8",
  I: "b2!8", J: "b2!7 a#2", K: "g#2@3 g#2!4 f#2", L: "e2@3 e2!3 e3 b2", M: "g#2@3 g#2!5", N: "e2!4 f#2!4",
  O: "g#2!2 b2 d#3 e3!2 d#3 c#3", P: "b2!2 d#3 f#3 a#2!2 c#3 f#3", Q: "d#3!8",
  R: "e3@2 e3@2 e3@2 e3@2 e3@2 e3@2 e3@2 e3 d#3", S: "c#3!8", T: "f#2@3 f#2@2 f#2@3 f#2@4 ~@4", U: "~@4 c3!2 e3 g3",
  V: "g2!2 b2 d3 a2!2 c3 e3", W: "f3!2 e3 d3 c3!2 e3 g3", X: "[g2!2 b2 d3 a2!3 a3@2 a3 f3 a2 c3!2 e3 g3]/2",
  Y: "b2!2 d3 g3 d3!4", Z: "[d3@2 d3@2 d3@2 d3 e3 f3@28 ~@2 c3@2 ~@2 c3@2 c3@2 c3@2]/3", AA: "c3!6 e3 g3",
  AB: "[d3@2 d3@2 d3@2 d3 e3 f3@16 ~@8]/2",
})).s("gm_electric_bass_finger").gain(0.51)

// chords · piano · "ele piano 1"
const piano = note(`<
  A B A C D E F@3 G H@2 I@2 H J I K L M N O P Q R S T U V@3 G H@2 I@2 H W I K X Y N O Z Q R S T U AA@3 AB AC AD AE AF AG
  AH AI@2 AJ@2 AK@2 AL AM AN@2 AO@2 AP AQ AR AS AT AN@2 AO@2 AP AQ AU
>`.pickRestart({
  A: "b2!4 f#2!4, [b3,c#4,d#4,f#4] [a#3,c#4,f#4]", B: "g#2!4 e3!4, [g#3,b3,d#4,f#4]@3 [g#3,b3,e4,f#4]@5",
  C: "g#2!3 g#3@2 g#3 e3 g#2, [b3,d#4,f#4]@3 [b3,e4,f#4]@5", // B Bsus4
  D: "b2 [b2,f#4,b4,d#5] [d#3,f#4,b4,d#5] [f#3,c#5] f#2!2 a#2 [c#3,d#5], ~@4 [f#4,a#4,c#5]@3 ~", // B F#5 C#sus2 F#
  E: "c#3@2 c#3@2 c#3@2 c#3@2 [c#3,c#5]@2 [c#3,b4]@2 c#3@2 c#3 d#3, [g#4,b4] [e4,g#4], e5 d#5 ~ b4", // C# C#7 G#m E
  F: "[~@2 [e4,g#4,b4]@6 ~@2 [e4,f#4,b4]@5 b2@2 b2!7, e3@14 ~ [b3,c#4,f#4]@9]/3", // E Esus2 Bsus2
  G: "b2 [b2,b3,c#4,f#4] b2!2 [b2,b3,c#4,f#4] b2!2 c#3, ~@2 [b3,c#4,f#4]@2 ~ [b3,c#4,f#4]@3", // Bsus2
  H: "d3!8, a3, [d4,e4] d4 [d4,e4] f#4", // Dsus2
  I: "b2 [b2,b3,c#4,f#4] b2!2 [b2,b3,c#4,f#4] b2!3, ~@2 [b3,c#4,f#4]@2 ~ [b3,c#4,f#4]@3", // Bsus2
  J: "d3!4 [d3,a4] [d3,f#4] d3 [d3,d4], a3, [d4,e4] d4 [d4,e4] [e4,f#4]", // D5 D Dsus2 Esus2
  K: "b2 [b2,b3,c#4,f#4] b2!2 [b2,b3,c#4,f#4] b2!2 a#2, ~@2 [b3,c#4,f#4]@2 ~ [b3,c#4,f#4]@3", // Bsus2
  L: "d#4!2 ~ g#2 [g#2,b4] [g#2,a#4] [g#2,f#4,g#4] [f#2,f#4], g#2@3 ~@5, ~ [d#4,f#4,b4] [d#4,f#4] d#4", // G#m G#sus2 G#7 F# B D#m
  M: "f#4@2 ~ e2!3 e3 b2, b3, e4@2 [e4,g#4]!2, e2@3 ~@5, ~ f#4 ~@2", // E
  N: "d#4@2 ~ g#2 [g#2,b4] [g#2,a#4] [g#2,f#4,g#4] [g#2,f#4], g#2@3 ~@5, ~ [d#4,f#4,b4] [d#4,f#4] d#4", // G#m G#sus2 G#7 B D#m
  O: "[e2,e4,f#4,g#4] e2!3 f#2 [f#2,b4] f#2!2, ~ [e4,f#4,b4]@2 [e4,f#4,c#5]@2 ~ [e4,f#4,b4]@2", // E B5 Esus2 F#7 Esus2
  P: "b2!2 [d#3,f#4,b4,d#5] [f#3,c#5] f#2!2 a#2 c#3, ~ [f#4,a#4,c#5]", // B F#5 F#
  Q: "[g#2,b4]!2 [b2,b4] d#3 e3!2 d#3 c#3, [d#4,f#4]@3 [f#4,b4]@2 g#4@3", // G#m B D#m B5
  R: "b2 [b2,f#4,b4,d#5] [d#3,f#4,b4,d#5] [f#3,f#4,b4,d#5] [f#2,f#4,b4,d#5] [f#2,f#4,a#4,c#5] [a#2,f#4,c#5] [c#3,b4]", // B F# C#7
  S: "g#2!2 [g#2,d#5] [g#3,e4,f#4,c#5]@2 [g#3,b4] e3 g#2, [f#4,b4,c#5] ~@2 [e4,f#4,b4]", // G#5 C#m G#m F#sus4 Esus2
  T: "b2 [b2,f#4,b4,d#5] [d#3,f#4,b4,d#5] [f#3,f#4,b4,d#5] [a#2,f#4,a#4,d#5] [a#2,f#4,a#4,c#5] [c#3,f#4,a#4,c#5] [f#3,f#4,b4,d#5]", // B D#m F# B
  U: "c#3@2 c#3@2 c#3@2 c#3@2 c#3@2 c#3@2 c#3@2 c#3 d#3, [g#4,b4,e5] [g#4,b4,d#5] [e4,g#4,c#5] [e4,g#4,b4]", // E G#m C#m E
  V: "[[e4,f#4,g#4,b4]@2 c#5@2 [f#4,g#4,b4]@2 f#4 d#5@2 c#5!2 b4 [e4,f#4,c#5]@2 ~@3 b2!7, e3@14 ~ b2@2 ~@7, ~@3 b4 ~@3 b4@2 ~@3, ~@7 [f#4,g#4]@5 ~@3 c#4@3 [c#4,f#4]@2 [c#4,f#4]@2 [c#4,f#4]@2, ~@8 [f#4,g#4] ~@3]/3", // E G#m7 F#7 F#sus2 F#5 F#sus2
  W: "d3!8, a3, [d4,e4] d4 [d4,e4,a4] [d4,e4,f#4]", // Dsus2 D
  X: "d#4@2 ~ g#2 [g#2,b4] [g#2,a#4] [g#2,f#4,g#4] [f#2,f#4], g#2@3 ~@5, ~ [d#4,f#4,b4] [d#4,f#4] d#4", // G#m G#sus2 G#7 F# B D#m
  Y: "[e4,f#4]@2 ~ e2!3 e3 b2, b3, e2@3 ~@5, ~ [e4,f#4] [e4,g#4]!2", // Esus2 E
  Z: "b2!2 [d#3,f#4,b4,d#5] [f#3,c#5] f#2!2 a#2 c#3, ~@2 [f#4,a#4,c#5]!2", // B F#5 F#
  AA: "[[e4,f#4,g#4,b4]@2 c#5@2 ~ f#4@2 d#5@2 c#5!2 b4 [e4,f#4,c#5]@2 ~@3 b2!4 [b2,b3,c#4,f#4]!3, e3@14 ~ c#4@5 ~@4, ~@4 [g#4,b4]@2 ~ [f#4,g#4]@5 ~@2 b4@4 ~@6, ~@15 b2@2 ~@7, ~@8 [f#4,g#4] f#4 ~@2]/3", // E F#7 Bsus2 G#m F#sus2
  AB: "d#3@2 d#3@2 d#3@2 d#3@2 d#3@2 ~@2 d#3@2 d#3 a#2, a#3, [d#4,f#4]@4 f#4@4 f#4@3 g#4@5, ~@5 d#3 ~@2", // D#m
  AC: "[d#3,f#4]!2 d#3!3 ~ d#3 [d#3,f#4], [a#3,d#4], ~@4 f#4@4 f#4@3 g#4@3 ~@2, ~@5 d#3 ~@2", AD: "b2!8, g#4 d#4!3",
  AE: "b2!8, ~ [b3,d#4,f#4]@3 [b3,d#4,f#4]@4", // B
  AF: "d#3!5 ~ d#3!2, [a#3,d#4,f#4]@4 [a#3,f#4]@4 [a#3,f#4]@3 g#4@4 ~, ~@5 d#3 a#3@2", // D#m
  AG: "e3@2 e3@2 e3@2 e3@2 e3@2 ~@2 e3@2 e3 [d#3,b3], [b3,e4,f#4]@4 [b3,e4,f#4]@4 [b3,e4,f#4]@3 g#4@4 ~, ~@5 e3 [b3,e4]@2", // G#m Bsus4 E5
  AH: "c#3!4 [c#3,b4] ~ c#3 [c#3,b4], [b3,e4]@8 g#4@5 ~@3, f#4!2 e4@2, ~@5 c#3 ~@2, ~@11 b4@3 ~@2", // C#7 E5
  AI: "[[f#2,f#4,b4,d#5]@3 [f#2,f#4,b4,d#5]@2 [f#2,f#4,b4,d#5]@3 d#5 e5 d#5 c#5@13 b2@2 b2@2 [d#3,f#4,b4,d#5]@2 [f#3,c#5]@2, ~ [f#2,e4,b4]@2 ~]/2", // B F#5 Esus2
  AJ: "[f#2!2 a#2 c#3 [g#2,b4]!2 [b2,b4] d#3 e3!2 d#3 c#3 b2 [b2,f#4,b4,d#5] [d#3,f#4,b4,d#5] [f#3,f#4,b4,d#5], [f#4,a#4,c#5]@2 [f#4,a#4,c#5]@2 [d#4,f#4]@3 [f#4,b4]@2 g#4@3 ~@4]/2", // G#m B F# D#m B5
  AK: "[[f#2,f#4,b4,d#5] [f#2,f#4,a#4,c#5] [a#2,f#4,c#5] [c#3,b4] g#2!2 [g#2,d#5] [g#3,e4,f#4,c#5]@2 [g#3,b4] e3 g#2 b2 [b2,f#4,b4,d#5] [d#3,f#4,b4,d#5] [f#3,f#4,b4,d#5], ~@2 [f#4,b4,c#5] ~@2 [e4,f#4,b4] ~@2]/2", // B F# C#7 G#5 C#m G#m B F#sus4 …
  AL: "[a#2,f#4,a#4,d#5] [a#2,f#4,a#4,c#5] [c#3,f#4,a#4,c#5] [f#3,f#4,b4,d#5] c#3!4, ~@2 [g#4,b4,e5] [g#4,b4,d#5]", // D#m F# B E G#m
  AM: "c#3@2 c#3@2 c#3@2 c#3 d#3 c3@2 c3@2 [e3,g4,c5,e5]@2 [g3,d5]@2, [e4,g#4,c#5] [e4,g#4,b4] ~@2", // C G5 C#m E
  AN: "[g2!2 b2 d3 [a2,c5]!2 [c3,c5] e3 f3!2 e3 d3 c3 [c3,g4,c5,e5] [e3,g4,c5,e5] [g3,g4,c5,e5], [g4,b4,d5]@4 [e4,g4]@3 [g4,c5]@2 a4@3 ~@4]/2", // Am C G Em C5
  AO: "[[g2,g4,c5,e5] [g2,g4,b4,d5] [b2,g4,d5] [d3,c5] a2!2 [a2,e5] [a3,f4,g4,d5]@2 [a3,c5] f3 a2 c3 [c3,g4,c5,e5] [e3,g4,c5,e5] [g3,g4,c5,e5], ~@2 [g4,c5,d5] ~@2 [f4,g4,c5] ~@2]/2", // C G D7 A5 Dm Am C Gsus4 …
  AP: "[b2,g4,b4,e5] [b2,g4,b4,d5] [d3,g4,b4,d5] [g3,g4,c5,e5] d3!4, ~@2 [a4,c5,f5] [a4,c5,e5]", // Em G C F Am
  AQ: "d3@2 d3@2 d3@2 d3 e3 c5@4 d5@4, [f4,a4,d5] [f4,a4,c5] ~@2", AR: "~ g4@2 e5@2 d5!2 c5, [a4,c5]@2 ~ [g4,a4]@5",
  AS: "[f4,g4,d5]@2 ~@3 c3!3, ~ c5@3, ~@3 d4@5, ~@3 c3@2 ~@3, ~ g4", // G7
  AT: "c3 [c3,c4,d4,g4]!3 c3!2 [e3,g4,c5,e5] [g3,d5]", AU: "~ g4@3 ~@4, [a4,c5] ~@3",
})).s("gm_piano").gain(0.51)

// chords · dulcimer · "tine"
const dulcimer = note(`<
  A B A C D E@4 F G@2 F@2 G@2 F@2 H I H J K L M N O P Q@3 F G@2 F@2 G@2 F@2 H I H J K L M N O P Q@3 ~ R S T U V W X@2
  Y@2 Z@2 AA AB AC@5 AD@2 AE@2 AC@5 AF@2
>`.pickRestart({
  A: "[b3,c#4,d#4,f#4] [a#3,c#4,f#4]", B: "[g#3,b3,d#4,f#4]@3 [g#3,b3,e4,f#4]@5", C: "[b3,d#4,f#4]@3 [b3,e4,f#4]@5",
  D: "~ [f#4,b4,d#5]!2 c#5 [f#4,a#4,c#5]@3 d#5", // B F#
  E: "[e5@2 d#5@2 c#5 b4 b4@4 [e4,g#4,b4]@8 [e4,f#4,b4]@5 [b3,c#4,f#4]@9, [g#4,b4]@2 [e4,g#4]@3 ~@11]/4", // E Esus2 Bsus2 G#m E
  F: "~ [b3,c#4,f#4] [b3,c#4,f#4]@2 [b3,c#4,f#4] [b3,c#4,f#4]@3", G: "a3", H: "~ [d#4,f#4]@2 ~", I: "[b3,e4]",
  J: "[e4,f#4]@3 [e4,f#4]", K: "~ [f#4,b4] [f#4,a#4]@2", L: "[d#4,f#4]@5 g#4@3", M: "~ b4@4 a#4@3, ~ f#4@7",
  N: "[f#4,b4]@3 [e4,f#4]@3 [e4,f#4]@2", O: "~ b4@3 a#4@4, ~ f#4@7", P: "[g#4,b4]@3 [g#4,b4]",
  Q: "[[e4,f#4,g#4,b4]@7 [f#4,g#4,d#5]@5 [e4,f#4]@3 c#4@9]/3", R: "[a#3,d#4]", S: "~ d#4@3",
  T: "~ [b3,d#4]@3 [b3,d#4]@4", U: "a#3", V: "[b3,e4]@15 b3", W: "[b3,e4] e4",
  X: "[f#4@3 f#4@2 f#4@3 e4@16 b2@2 b2@2 [d#3,f#4,b4,d#5]@2 [f#3,c#5]@2, b4@3 ~]/2", // B F#5
  Y: "[f#2!2 a#2 c#3 [g#2,b4]!2 [b2,b4] d#3 e3!2 d#3 c#3 b2 [b2,f#4,b4,d#5] [d#3,f#4,b4,d#5] [f#3,f#4,b4,d#5], [f#4,a#4,c#5]@2 [f#4,a#4,c#5]@2 [d#4,f#4]@3 [f#4,b4]@2 g#4@3 ~@4]/2", // G#m B F# D#m B5
  Z: "[[f#2,f#4,b4,d#5] [f#2,f#4,a#4,c#5] [a#2,f#4,c#5] [c#3,b4] g#2!2 [g#2,d#5] [g#3,e4,f#4,c#5]@2 [g#3,b4] e3 g#2 b2 [b2,f#4,b4,d#5] [d#3,f#4,b4,d#5] [f#3,f#4,b4,d#5], ~@2 [f#4,b4,c#5] ~@2 [e4,f#4,b4] ~@2]/2", // B F# C#7 G#5 C#m G#m B F#sus4 …
  AA: "[a#2,f#4,a#4,d#5] [a#2,f#4,a#4,c#5] [c#3,f#4,a#4,c#5] [f#3,f#4,b4,d#5] c#3!4, ~@2 [g#4,b4,e5] [g#4,b4,d#5]", // D#m F# B E G#m
  AB: "c#3@2 c#3@2 c#3@2 c#3 d#3 ~@4 [g4,c5]@4, [e4,g#4,c#5] [e4,g#4,b4] ~@2", // C5 C#m E
  AC: "[[g4,b4]@4 [e4,g4]@3 g4@5 ~ c5@4 b4@3 [g4,c5]@3 [f4,g4]@3 [f4,g4]@2 ~ c5@3 b4@4 [a4,c5]@4, ~@13 g4@7 ~@9 g4@7 ~@4]/5", // G Em C5 Fsus2 Am
  AD: "[[f4,a4]@4 [f4,g4,a4,c5]@7 [g4,a4]@5]/2", AE: "[[f4,g4]@3 d4@6 [c4,d4]@3 ~@2 [g4,c5]@2]/2",
  AF: "[[f4,a4]@8 [f4,g4,a4,c5]@23 ~]/2", // F
})).s("gm_dulcimer").gain(0.51)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@7 A B C B C B C B C B C B C B C B C B C B C B C B D C E C E C E C E C E C E C E C E C E C E C E C E C E C E C E C
  B@2 C B C B C B C B C B C B C B C B C B F
>`.pickRestart({
  A: "~@7 x", B: "x ~@2 x!2 ~@3", C: "x ~@2 x!2 ~@2 x", D: "~@4 x!2 ~@2", E: "x ~@2 x!3 ~ x", F: "x",
})).gain(0.36)

// drums · high tom
const high_tom = s("ht").struct("<~@63 [~@12 x!4] ~@20>").gain(0.36)

// drums · china
const china = s("cr").struct(`<
  ~@7 A B C B C B@2 D B@3 E C E C B@2 D C B@2 E B@2 F B C B@3 C D B D B@3 D B@4 C D B G C D B@8 H B C B C I B D B@2 C B
  C D C B@2 D B D J
>`.pickRestart({
  A: "~@4 x!3 ~", B: "x!8", C: "x!7 ~", D: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~", E: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~",
  F: "x!3 ~ x ~ x ~@5 x ~@3", G: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", H: "x ~ x ~ x ~ x ~ x!4 ~@4",
  I: "x!3 ~ x ~ x ~ x ~@3 x ~ x ~", J: "x",
})).gain(0.36)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct(`<
  ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@35 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@3 x",
})).gain(5.41)

// drums · ride
const ride = s("rd").struct(`<
  ~@7 A ~ A ~ A ~@7 A ~ A ~@3 A ~@7 A ~@3 A B ~@5 B ~@4 A ~@3 A B ~@10 A ~ A C ~@4 A ~ A ~ A ~@6
>`.pickRestart({
  A: "~@7 x", B: "~@15 x", C: "~@10 x ~@4 x",
})).gain(0.31)

// drums · bongos
const bongos = s("bongo:4").struct("<~@32 x ~@31 x ~@19>").gain(0.94)

stack(bass, piano, dulcimer, pedal_hat, high_tom, china, vibraslap, ride, bongos)

More by Michael Bolton