Strudelify

Running on Ice

Billy Joel

KeyG majorTempo160 bpm
0:00/0:00
// Running on Ice — Billy Joel
// 160 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "Celesta" celesta (copy of ch 1 "Piano Lead" piano)
// note: Full arrangement: all 135 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/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 · "Piano Lead"
const piano = note("<A@4 ~@90 B@3 C D ~@36>".pickRestart({
  A: "[d5,g6] [g4,d6] [d4,g5] [g4,d6] [d5,g6] [g4,d6] [d4,g5] [g4,d6] [d5,g6] [g4,d6] [d4,g5] [g4,d6] [d5,g6] [g4,d6] [d4,g5] [g4,d6]", // G5
  B: "[~@16 [d5,a6] [a4,d6] a5 [a4,d6] [d5,a6] [a4,d6] a5 [a4,d6] [d5,a6] [a4,d6] a5 [a4,d6] [d5,a6] [a4,d6] a5 [a4,d6] [d5,a6] [a4,d6] a5 [a4,d6] [d5,a6] [a4,d6] a5 [a4,d6] [d5,a6] [a4,d6] a5 [a4,d6] [d5,a6] [a4,d6] a5 [a4,d6], ~@7 d4@2 d4@2 d4@2 d4@2 d4@2 d4@2 d4@2 d4@2 d4]/3", // D5
  C: "[d5,a6] [a4,d6] [d4,a5] [a4,d6] [d5,a6] [a4,d6] [d4,a5] [a4,d6] [d5,a6] [a4,d6] [d4,a5] [a4,d6] [d5,a6] [a4,d6] [d4,a5] [a4,d6]", // D5
  D: "[d5,a6] [a4,d6] [d4,a5] [a4,d6] [d5,a6] [a4,d6] [d4,a5] [a4,d6] [d5,a6] ~@7", // D5
})).s("gm_piano").gain(0.64)

// chords · piano · "Piano Acc"
const piano_2 = note(`<
  ~@4 A B A C A B A C D B E C D B F C G B E C D B F H I J K@2 L M N@2 D B E C D B F C G B E C D B F H I O K@2 L P Q@2 R
  S T U R S T V A B A C D B W C D B X C G B W C Y@2 X Z I O K@2 L P AA@3 ~@2 R S T U R S T V A AB AC AD A AB AC AD A B A
  C A AB AC AD A B A C A B A C A B A C
>`.pickRestart({
  A: "~ [g3,a3] ~ [g3,a3] ~ [a3,a#3] ~ [a3,a#3], g1 g2 g1 g2", // Gsus2 A#maj7
  B: "~ [g3,a3] ~ [g3,a3] ~ [f3,g3] ~ [f3,g3], g1 g2 g1 g2", C: "~ [g3,a3] ~ [g3,a3] ~ [c4,d4] ~ [c4,d4], g1 g2 g1 g2",
  D: "~@2 [g3,a3]!2 [g3,a3]@2 [g3,a3]@2 ~@2 [a3,a#3]@2 ~@2 [a3,a#3]@2, g1 g2 g1 g2", // Gsus2 A#maj7
  E: "[g1,g3]@2 ~ [g3,a3,d4] ~ [a3,a#3,f4] ~ [a3,a#3,f4], ~ g2 g1 g2", // G Gsus2 A#maj7
  F: "[g1,g3]@2 ~ [g3,a3] ~ [a3,a#3,f4] ~ [a3,a#3,f4], ~ g2 g1 g2", // G Gsus2 A#maj7
  G: "~@2 [g3,a3]!2 [g3,a3]@2 [g3,a3]@2 ~@2 [a3,a#3]@2 ~@2 [a3,a#3]!2, g1 g2 g1 g2", // Gsus2 A#maj7
  H: "~@2 [g3,a3,e4]@2 ~@2 g4@2 f4@2 e4@2 d4@2 c4 ~, g1 g2 b1 b2", // A7
  I: "[c5,e5] ~ [g3,c4]@2 [g3,c4]@2 [g3,c4]@2 [g3,c4]@2 [g3,c4]@2 [g3,c4]@2 [g3,c4]@2, c2 c3 c2 c3", // C C5
  J: "[f1,a3,c4]@2 ~@3 [g3,c4,e4] ~ [g3,c4,e4], ~ a1 c2 e1, ~@3 [g3,c4]@2 ~@3", // F C C5
  K: "[[f1,f3,c4]@2 ~ [g3,c4] ~ [g3,c4] ~@2 g1@2 [g2,g3,b3]@2 ~ [g3,b3] ~ g3, ~ a1 c2 e1 ~@2 g1 g2, ~@14 [g3,b3]@6 ~@10 b3 ~]/2", // F5 C5 G
  L: "[a4,e5] ~ [g3,c4]!2 [g3,c4]@2 [g3,c4]@2 [g3,c4]@2 [g3,c4]@2 [g3,c4]@2 [g3,c4]@2, a1 a2 a1 a2", // A5 C5
  M: "f3 g3 a3 ~@2 [g3,c4,e4] ~ [g3,c4,e4], [a#1,a#3,d4] d2 c2 ~, ~@3 g3@2 ~ c3@2", // C A#
  N: "[f3 g3 a3 g3 ~ [g3,c4] ~@4 [g3,a3]@2 ~ [a3,d4] ~ [a3,d4], [a#1,a#3,d4] d2 c2 c3 d2@4, ~@7 [g3,a3]@3 d3@6]/2", // C5 Gsus2 D5 A# Gsus2
  O: "[f1,a3,c4]@2 ~@3 [c4,e4] ~ [c4,e4], ~ a1 c2 e1, ~@3 [g3,c4]@2 ~@3", // F C C5
  P: "[a#1,a#3,d4]@2 d2@2 ~ [c4,e4] ~ [c4,e4], ~@2 c2 c3", // A# C
  Q: "[[a#1,a#3,d4]@2 d2@2 ~ [g3,c4] ~@4 [g3,a3]@2 ~ d4@3, ~@2 c2 c3 d2@4, ~@7 [g3,a3]@3 ~@6]/2", // A# C5 Gsus2
  R: "~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4] ~ [g4,a#4], g1 g2 g1 g2", // Gm
  S: "~ [f#4,a4] ~ [f#4,a4] [c4,g4] [a#3,d4] [g3,d4] [f3,c4], g1 g2 g1 f1", // F#m C5 A# G5 F5
  T: "g3 [a#3,d#4] ~ [a#3,d#4] ~ [a#4,d#5] ~ [a#4,d#5], d#1 d#2 c2 c3", // D#5
  U: "~@2 f1@2 ~ [f4,a#4] ~ [f4,a#4], a4 ~, f2 ~ a#1 a#2, ~ f4@3 ~@4", // A#5
  V: "~@2 f2@2 ~ [f#4,a4] ~ [f#4,a4], a4 ~, f1 ~ d2!2, ~ f4@3 ~@4", // F#m
  W: "[g1,g3]@2 ~ [a3,d4] ~ [a#3,f4] ~ [a#3,f4], ~ g2 g1 g2", X: "[g1,g3]@2 ~ a3 ~ [a#3,f4] ~ [a#3,f4], ~ g2 g1 g2",
  Y: "[~@2 g1 ~ g1 ~ g1 g2, g1 g2 ~ g2 ~ g2 ~@2, ~ [a3,d4]@2 [a3,a#3]@4 [a3,e4]@4 [g3,c4]@4 ~]/2", // D5 A#maj7 A5 C5
  Z: "~@2 [a3,e4]@2 ~@2 g4@2 f4@2 e4@2 d4@2 c4 ~, g1 g2 b1 b2", // A5
  AA: "[[a#1,a#3,d4]@2 d2@2 ~ [g3,c4] c3 [g3,a3]@17, ~@2 c2 ~@9]/3", // A# C5 Gsus2
  AB: "~ [a3,e4] ~ [a3,e4] g1@2 ~ [g3,d4], g1@2 g2@2 [g3,c4]@3 ~, ~@3 g2", // A5 G5 C5
  AC: "~ [a3,d4] ~ [a3,d4] ~ [a#3,f4] ~ [a#3,f4], g1 g2 g1 g2", // D5 A#5
  AD: "~ [a3,e4] ~ [a3,e4] a#3 a3 g3 [a3,d4], g1 g2 g1 g2", // A5 D5
})).s("gm_piano").gain(0.64)

// chords · synth strings 1
const synth_strings_1 = note("<~@59 A B@3 C B@3 D@2 ~@29 A E@2 F C B@3 G@8 ~@21>".pickRestart({
  A: "~@5 d5 c5 a#4", B: "[d5@4 d5@4 d5@4 c5 a#4 g4 f4 g4@4 g5@4, g5@5 ~]/3", C: "~@2 c5 d#5 d5@4, f5",
  D: "[~@2 c5 d#5 f#5@4 g5@8, f5 d5@3]/2", E: "[d5@4 d5@4 d5@4 c5 a#4 ~ f4, g4@7 g4]/2", F: "g4 g5",
  G: "[~@2 c5 d#5 f#5@4 g5@56, f5 d5@15]/8",
})).s("gm_synth_strings_1").gain(0.32).pan(0.6)

// other · drawbar organ · "Hammond Organ"
const drawbar_organ = note(`<
  ~@12 A B C ~ A B D ~ E B C ~ A B D F G H I@2 J H I@2 A B C ~ A B D ~ E B C ~ A B D F G H I@2 J H K@2 L M N O L M N O
  ~@4 A B C ~ A B D ~ E B C ~ P@2 D F G H I@2 J H Q@2 ~@2 R L M N O L M N O ~ S@2 T ~ S@2 T ~@5 S@2 T ~@12
>`.pickRestart({
  A: "~@2 d4!2 d4@2 d4@2 f4@2 f4@2 f4@2 f4@2", B: "f4 e4 f4 e4 c4!4", C: "c4 b3 g3@6", D: "c4 b3 d4@6",
  E: "~@2 d4!2 d4@2 d4@2 f4@2 f4@2 f4@2 f4!2", F: "~@3 g5 f5 e5 d5 c5", G: "~ e4!7", H: "f4 g4 a4 g4@3 ~@2",
  I: "[f4@2 g4@2 a4@2 g4@2 ~@2 e4@2 ~@2 e4@4 f4 e4 d4@12]/2", J: "~@2 e4!2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@2",
  K: "[f4@2 g4@2 a4@2 g4@2 ~@2 e4@2 ~@2 e4@4 f4 e4 d4@4 ~@2 d5@2 c5@2 a#4@2]/2", L: "d5!2", M: "d5@4 c5 a#4 g4 f4",
  N: "g4 g5", O: "f5@2 c5 d#5 d5@4", P: "[~ g4 f4 g4@2 f4!2 g4@2 f4!2 g4@2 f4@2 d4]/2",
  Q: "[f4 g4 a4 g4 ~ e4 ~ d4@9]/2", R: "~@5 d5 c5 a#4", S: "[~@4 g4 f4 d4 g4@3 ~@6]/2", T: "~@4 a#4 a4 g4!2",
})).s("gm_drawbar_organ").gain(0.54)

// bass · electric bass finger · "Elec Bass (fingered)"
const bass = note(`<
  ~@4 A@23 B C D@2 A E F@2 G A@15 B C D@2 A E F@2 G A H I J A H I K A@19 B C D@2 A E F@2 L@4 A H I J A H I K A@28
>`.pickRestart({
  A: "g1 g2 g1 g2", B: "g1 g2 b1 b2", C: "c2 c3 c2 c3", D: "f1 a1 c2 e1", E: "a1 a2 a1 a2", F: "a#1 d2 c2 c3", G: "d2",
  H: "g1 g2 g1 f1", I: "d#1 d#2 c2 c3", J: "f2 f1 a#1 a#2", K: "f1 f2 d2!2", L: "d2/4",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · synth brass 1
const synth_brass_1 = note("<~@28 A ~@3 B ~@19 A ~@3 B ~@31 A ~@3 B ~@42>".pickRestart({
  A: "[c5,e5] ~@15", B: "[a4,e5] ~@15",
})).s("gm_synth_brass_1").gain(0.8).pan(0.3)

// chords · synth brass 1
const synth_brass_1_2 = note("<~@28 A ~@3 B ~@19 A ~@3 B ~@31 A ~@3 B ~@42>".pickRestart({
  A: "[g5,c6] ~@15", B: "[a5,c6] ~@15",
})).s("gm_synth_brass_1").gain(0.8).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@4 A B@23 C@8 B@16 C@16 B@20 C@7 D ~@3 C@8 B@27 E>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x!2", D: "x", E: "x!3 ~",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct(`<
  ~@4 A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~@9 A B A ~ A B A ~ A B A ~ A B A ~@17 A B A ~ A B A ~ A B A ~ A B A
  ~ B A@2 ~@20 A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ A B A ~
>`.pickRestart({
  A: "x", B: "~ x ~@6",
})).gain(0.5)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@23 A ~@3 A ~@3 A ~@3 A ~@22 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A
>`.pickRestart({
  A: "~@12 x!2 ~@2",
})).gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@23 A ~@3 A ~@3 A ~@3 A ~@22 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A
>`.pickRestart({
  A: "~@4 x!2 ~@4 x!2 ~@4",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A@2 B@2 A@2 B@2 A ~@3 A ~@3 A
  ~@3 A ~@3 C D ~@2 A ~@3 A ~@2 A ~@3 A@2 B@2 A@2 B@2 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "x", B: "x!2", C: "x ~@2 x ~@3 x", D: "~@3 x ~@4",
})).gain(0.45)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@23 A ~@3 A ~@3 A ~@3 A ~@22 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A
>`.pickRestart({
  A: "~@2 x!2 ~@12",
})).gain(0.45)

// drums · ride
const ride = s("rd").struct("<~@60 A@2 B@2 A@2 B@2 ~@31 A@2 B@2 A@2 B@2 ~@28>".pickRestart({
  A: "~ x!3", B: "~ x ~ x",
})).gain(0.45)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@6 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@19 A ~@3 A ~@3 A ~@3 A ~@2 B A ~@22 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~@2 x!5 ~@9", B: "~@2 x!4 ~@10",
})).gain(0.45)

stack(
  piano, piano_2, synth_strings_1, drawbar_organ, bass, synth_brass_1, synth_brass_1_2, kick, rim, snare, hihat,
  low_tom, mid_tom, crash, high_tom, ride, tambourine
)

More by Billy Joel