Strudelify
KeyG majorTempo94 bpm
0:00/0:00
// Free Falling — Tom Petty and The Heartbreakers
// 94 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(94/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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.

// other · overdriven guitar · "OvrdrGt/D"
const overdriven_guitar = note(`<
  A B A C D E F G D H F I A C D J K L F M N O ~@6 P ~ D J K L F M N O ~@6 P ~ Q R S T Q R S U D J K L F M N O ~@6 P ~@3
  V W X ~ Y@8 Z@8 AA@5 ~@6
>`.pickRestart({
  A: "g4@3 g4@5", B: "c5 b4@2 a4@5", C: "c5@2 b4@4 a4@8 g4 a4", D: "b4@3 g4@5", E: "g4@2 g4 a4@2 b4 ~ b4",
  F: "b4@6 g4@6 ~@2 g4!2", G: "g4@2 g4@2 g4@2 a4@6 ~@2 g4 a4", H: "g4@2 g4 g4@3 a4@4 b4@2 ~@2 b4@2", I: "g4 g4@2 a4@5",
  J: "g4!2 g4@2 g4@2 a4@4 b4@2 ~@2 b4!2", K: "b4@3 g4@3 ~@2", L: "g4!2 g4@2 g4@2 a4@6 ~ g4!2 a4",
  M: "g4@2 g4@2 g4@2 a4@4 b4@2 ~@2 b4!2", N: "b4@3 g4@3 ~ c4", O: "g4@2 g4 g4@3 a4@6 ~@4", P: "a5 g5@3", Q: "b4@3 c5@5",
  R: "c5@2 b4@2 b4@4 b4@2 a4@4 g4 a4", S: "g4 b4@2 c5@2 c5!3", T: "c5 b4@2 a4!4 b4",
  U: "c5@2 b4@4 a4@4 a4@2 a4 g4!2 a4", V: "~ b4@2 c5@2 c5!3", W: "c5 b4@2 a4@2 a4 ~@2", X: "b5@7 a5 g5@8",
  Y: "[a5@4 ~@60 a5@4 ~@6 c6@2 c6@2 c6@2 ~@24 a5 g5@23, ~@4 g5@64 g5@37 ~@23]/8",
  Z: "[a5@4 ~@6 c6@2 c6@2 c6@2 ~@6 a5@4 a5@2 a5@2 b5@2 ~@32 a5@4 ~@6 c6@2 c6@2 c6@2 ~@24 a5 g5@23, ~@4 g5@64 g5@37 ~@23]/8",
  AA: "[a5@2 ~@3 c6!3 ~@3 a5@2 a5!2 b5 ~@24, ~ g5@16 ~@3]/5",
})).s("gm_overdriven_guitar").gain(0.36)

// other · overdriven guitar · "OvrdrGt/D" · soft notes
const overdriven_guitar_soft = note("<~@96 A@5 B ~>".pickRestart({
  A: "[a5@4 ~@6 c6@2 c6@2 c6@2 ~@24 a5 ~@23 a5@4 ~@6 c6@2 c6@2 c6@2, ~@4 g5@37 g5@33 ~@6]/5", B: "~@3 a5@2 a5!2 b5",
})).s("gm_overdriven_guitar").gain(0.05)

// other · distortion guitar · "OvrdrGt/D"
const distortion_guitar = note(`<
  ~@21 A B C D E F C ~ G ~@7 A B C D E F C ~ H ~@15 A B C D E F C ~@7 C ~ H I J ~ K L J ~ M I J ~ K L J ~ M I J ~@7
>`.pickRestart({
  A: "~@12 g5 g5@3", B: "b5@3 c6@5", C: "c6 b5@2 a5@3 b5@2", D: "a5 g5@3", E: "c6 b5@2 a5@3 g5!2", F: "b5@7 a5 g5@8",
  G: "c6 b5@2 a5@3 ~@2", H: "c6 b5@2 a5@5", I: "~ b5@2 g5@5", J: "c6 b5@2 a5@2 a5 b5@2",
  K: "c6@2 b5@4 a5@4 a5@2 g5 g5@3", L: "b5@3 b5 ~@4", M: "c6 b5@2 ~@5",
})).s("gm_distortion_guitar").gain(0.36)

// other · distortion guitar · "OvrdrGt/D" · soft notes
const distortion_guitar_soft = note(`<
  ~@97
  [c6@2 b5@4 a5@4 a5@2 g5 g5@3]
  [b5@3 b5 ~@4]
  [c6 b5@2 a5@2 a5 b5@2]
  ~
  [c6 b5@2 ~@5]
  ~
>`).s("gm_distortion_guitar").gain(0.15)

// other · electric guitar clean · "OvrdrGt/D"
const electric_guitar_clean = note(`<
  ~@51
  [c5@2 b4@2 b4@4 b4@2 a4@4 g4 a4]
  ~@17
  [c5 b4@2 a4!4 b4]
  [b4!3 c5!5]
  [c5 b4!2 a4!5]
  ~@31
>`).s("gm_electric_guitar_clean").gain(0.36)

// other · overdriven guitar · "OverdrGt/"
const overdriven_guitar_2 = note(`<
  A B A C D ~ E ~ D ~ E F A C D ~ D ~ E ~ E ~@9 D ~ D ~ E ~ E ~@9 G H I B G H I J D ~ D ~ E ~ E ~@11 K L ~@29
>`.pickRestart({
  A: "d4@3 d4@5", B: "g4 g4@2 g4@5", C: "g4 g4@2 g4@4 ~", D: "g4@3 d4@5", E: "g4@3 d4@3 ~@2", F: "d4 d4@2 g4@5",
  G: "g4@3 g4@5", H: "g4!2 g4@2 g4 g4@2 ~", I: "d4 g4@2 g4@5", J: "g4 g4@2 g4@2 g4 ~@2", K: "~ g4@2 g4@5",
  L: "g4 g4@2 g4@3 ~@2",
})).s("gm_overdriven_guitar").gain(0.36)

// other · distortion guitar · "OverdrGt/"
const distortion_guitar_2 = note(`<
  ~@5 A ~ A ~ A ~@5 A ~ A ~ A ~ B@8 C ~ D@6 B@8 E ~@9 F@4 G@8 C H ~@5 I C H E J K L M N K O E J K L M N K O E J K ~@7
>`.pickRestart({
  A: "d4 d4@2 g4@3 ~@2",
  B: "[d4 d4@2 ~@5 g5@3 g5@5 g5 g5@2 g5@3 ~@2 d5@3 d5@5 g5 g5@2 g5@3 ~@2 g5@3 d5@5 g5 g5@2 g5@3 ~@2 d5@3 d5@5, ~@3 g4@61]/8",
  C: "g5 g5@2 g5@3 ~@2", D: "[d4 d4@2 ~@13 d4 d4@2 ~@13 d4 d4@2 g4@13, ~@3 g4@16 g4@16 ~@13]/6", E: "g5 g5@2 g5@5",
  F: "[d4 d4@2 ~@13 d4 d4@2 g4@13, ~@3 g4@16 ~@13]/4",
  G: "[d4 d4@2 ~@13 d4 d4@2 ~@5 g5@3 g5@5 g5 g5@2 g5@3 ~@2 d5@3 d5@5 g5 g5@2 g5@3 ~@2 g5@3 d5@5, ~@3 g4@61]/8",
  H: "d5@3 d5@5", I: "g5@3 d5@5", J: "~ g5@2 d5@5", K: "g5 g5@2 g5@2 g5 g5@2", L: "d5@3 d5@2 g5@3",
  M: "g5 g5@2 g5@2 g5 ~@2", N: "g5@3 g5 d5@4", O: "d5@3 d5@2 d5@3",
})).s("gm_distortion_guitar").gain(0.36)

// other · distortion guitar · "OverdrGt/" · soft notes
const distortion_guitar_soft_2 = note(`<
  ~@96
  [d5@3 d5@2 g5@3]
  [g5 g5@2 g5@2 g5 ~@2]
  [g5@3 g5 d5@4]
  [g5 g5@2 g5@2 g5 g5@2]
  [d5@3 d5@2 d5@3]
  [g5 g5@2 g5@5]
  ~
>`).s("gm_distortion_guitar").gain(0.1)

// other · electric guitar clean · "OverdrGt/"
const electric_guitar_clean_2 = note("<~@69 [g4 g4@2 g4@5] [g4!8]!2 ~@31>").s("gm_electric_guitar_clean").gain(0.36)

// other · overdriven guitar · "OvrdrGt/D"
const overdriven_guitar_3 = note(`<
  A B A C D ~ E ~ D ~ E F A C D ~ D ~ E ~ E ~@9 D ~ D ~ E ~ E ~@9 G H I B G J@2 K L@4 M@2 N@8 ~@4 O@2 ~@4 P Q R S T Q U
  V P Q R S T Q U V P Q ~@7
>`.pickRestart({
  A: "b4@3 c5@5", B: "d4 d4@2 d4@5", C: "d4 d4@2 d4@4 ~", D: "d4@3 c4@5", E: "d4@3 c4@3 ~@2", F: "c4 b3@2 d4@5",
  G: "d4@3 d4@5", H: "d4!2 d4@2 d4 d4@2 ~", I: "b3 d4@2 d4@5", J: "[d4!2 d4@2 d4 ~@3 b3 d4@2 d4@5, ~@5 d4@4 ~@7]/2",
  K: "d4 d4@2 d4@2 d4@3", L: "[~@3 c4@5 ~@8, d4]/2", M: "[~@3 c4@3 ~@10, d4]/2", N: "[~@3 c4@3 ~@58, d4]/8",
  O: "[~ d4@2 d4@11 ~@2]/2", P: "~@3 c6@2 c6!3", Q: "d5 d5@2 d5@2 d5 d5@2", R: "b4@3 c5@2 d5@3",
  S: "d5 d5@2 d5@2 d5 ~@2", T: "d5@3 d5 c5@4", U: "b4@3 c5@2 c5@3", V: "d5 d5@2 d5@5",
})).s("gm_overdriven_guitar").gain(0.36)

// other · overdriven guitar · "OvrdrGt/D" · soft notes
const overdriven_guitar_soft_2 = note(`<
  ~@96
  [b4@3 c5@2 d5@3]
  [d5 d5@2 d5@2 d5 ~@2]
  [d5@3 d5 c5@4]
  [d5 d5@2 d5@2 d5 d5@2]
  [b4@3 c5@2 c5@3]
  [d5 d5@2 d5@5]
  ~
>`).s("gm_overdriven_guitar").gain(0.1)

// other · distortion guitar · "OvrdrGt/D"
const distortion_guitar_3 = note(`<
  ~@5 A ~ A ~ A ~@5 B ~ A ~ A ~ C D E F E G E F E ~ B ~ A ~ A ~ C D E F E G E F H ~@9 B ~ A ~ A ~ C D E F E G E F ~@5 G
  E F H I ~@7 I ~@7 I ~@8
>`.pickRestart({
  A: "c4 b3@2 d4@3 ~@2", B: "c4 b3@2 b3@3 ~@2", C: "c4 b3@2 ~@5", D: "d5@3 d5@5", E: "d5 d5@2 d5@3 ~@2", F: "b4@3 c5@5",
  G: "d5@3 c5@5", H: "d5 d5@2 d5@5", I: "~ d5@2 ~@5",
})).s("gm_distortion_guitar").gain(0.36)

// other · electric guitar clean · "OvrdrGt/D"
const electric_guitar_clean_3 = note("<~@69 [d4 d4@2 d4@5] [d4!8]!2 ~@31>").s("gm_electric_guitar_clean").gain(0.36)

// other · trombone · "Trmbn/JzG"
const trombone = note("<~@32 [~@7 c4] [c4@2 b3@2 b3!2 d4@6 ~@4] ~@69>").s("gm_trombone").gain(0.46)

// other · electric guitar jazz · "Trmbn/JzG"
const electric_guitar_jazz = note("<~@47 A B@2 ~@2 B C ~@8 D E D E D E D ~@34>".pickRestart({
  A: "c5@2 b4@2 b4@4 b4@2 a4@4 g4 a4", B: "~ d4@2 d4@5", C: "~ d4@2 d4@2 d4 ~@2", D: "~ b4@2 c5@2 c5!3",
  E: "c5 b4@2 a4@3 ~@2",
})).s("gm_electric_guitar_jazz").gain(0.46)

// other · piano · "Trmbn/JzG"
const piano = note("<~@69 [c4 b3@2 a3!4 b3] [b3!3 c4!5] [c4 b3!2 a3!5] ~@31>").s("gm_piano").gain(0.46)

// other · brass section · "Trmbn/JzG"
const brass_section = note("<~@79 A B C D A B ~@2 A B C D A B ~@2 A ~@7>".pickRestart({
  A: "~@3 b5", B: "a5 g5 ~@2", C: "~@12 g5 g5@3", D: "b5@6 b5@2 a5 g5@3 ~@4",
})).s("gm_brass_section").gain(0.36)

// other · brass section · "Trmbn/JzG" · soft notes
const brass_section_soft = note("<~@96 [a5 g5 ~@2] [~@12 g5 g5@3] [b5@6 b5@2 a5 g5@3 ~@4] [~@3 b5] [a5 g5 ~@2] ~@2>")
  .s("gm_brass_section").gain(0.15)

// bass · electric bass pick · "Picked Ba"
const bass = note(`<
  ~@2 A@2 B C B C B C D C D C B E D E D E D F D E D G D E D C B E D E D E D F D E D G D E D E D E D H I J I K B E D E D
  E D F D E D G D E D C L M L M I K N K I H I H I H I H I H I H I H I H I H ~@7
>`.pickRestart({
  A: "g2/2", B: "e1@3 c2@5", C: "c2 g1@2 d2@5", D: "g1@3 c2@5", E: "c2 g1@2 d2@4 d2", F: "c2@2 g1@4 d2@6 d2 d2@3",
  G: "c2@2 g1@4 d2@8 e2 g2", H: "c2@2 g1@4 d2@4 d2!2 d2@2 d2!2", I: "g1@6 c2@8 c2!2", J: "c2@2 g1@4 d2@4 d2 d2@3 d2!2",
  K: "c2@2 g1@4 d2@4 d2!2 d2@2 d2@2", L: "g1!3 c2!5", M: "c2 g1!2 d2!5", N: "g1@3 c2@4 c2",
})).s("gm_electric_bass_pick").gain(0.36)

// bass · electric bass pick · "Picked Ba" · soft notes
const bass_soft = note(`<
  ~@96
  [g1@6 c2@8 c2!2]
  [c2@2 g1@4 d2@4 d2!2 d2@2 d2!2]
  [g1@6 c2@8 c2!2]
  [c2@2 g1@4 d2@4 d2!2 d2@2 d2!2]
  [g1@6 c2@8 c2!2]
  [c2@2 g1@4 d2@4 d2!2 d2@2 d2!2]
  ~
>`).s("gm_electric_bass_pick").gain(0.1)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@96 [x!2]!6 ~>").gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@9 A ~@15 A ~@23 A ~@41>".pickRestart({
  A: "~@12 x!4",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<~@12 A@13 ~@2 A ~@2 A@11 ~@2 A ~ A ~@2 A ~@3 A ~ B@8 A@3 ~@2 A ~@35>".pickRestart({
  A: "x!8", B: "x!16",
// … 23 more lines

More by Tom Petty and The Heartbreakers