Strudelify
KeyC majorTempo120 bpm
0:00/0:00
// Learning to Fly — Tom Petty and The Heartbreakers
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 115 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 part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · acoustic guitar steel · "Guitar I"
const acoustic_guitar_steel = note(`<
  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 B A B A B A B A B A B A B A B A B A B A B A B C@2 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 B A B A B A B C@2 D E D E 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 B F
>`.pickRestart({
  A: "[f4,a4,c5,f5]!3 [c4,e4,g4,c5,e5]@2 [c4,e4,g4,c5,e5]!3", // F C
  B: "[a3,e4,a4,c5,e5]!3 [g3,b3,d4,g4,b4,g5]@2 [g3,b3,d4,g4,b4,g5]!3", C: "[g3,b3,d4,g4,b4,g5]!8",
  D: "[f4,a4,c5,f5]!8 [c4,e4,g4,c5,e5]!8", E: "[a3,e4,a4,c5,e5]!8 [g3,b3,d4,g4,b4,g5]!8", F: "[f4,a4,c5,f5]",
})).s("gm_acoustic_guitar_steel").gain(0.16)

// other · acoustic guitar steel · "Guitar II"
const acoustic_guitar_steel_2 = note(`<
  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 B A B A B A B A B A B A B A B A B A B A B A B C@2 ~@8 A B A B A B A
  B A B A B A B A B A B A B A B A B C@2 ~@4 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 B ~
>`.pickRestart({
  A: "a4 g4 c5 g4@2 c5 g4!2", B: "c5 g4 c5 b4@2 c5 b4 c5", C: "c5 b4 g4@2 c5 b4 g4@2",
})).s("gm_acoustic_guitar_steel").gain(0.24)

// other · electric guitar clean · "Guitar III"
const electric_guitar_clean = note(`<
  ~@25 A ~ A ~ A ~@11 A ~ A ~ A ~@29 A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5
>`.pickRestart({
  A: "c5!2 e5 d5@2 e5 d5 c5",
})).s("gm_electric_guitar_clean").gain(0.32)

// other · distortion guitar · "Guitar IV"
const distortion_guitar = note("<~@50 A ~ B C D ~ E F ~@57>".pickRestart({
  A: "c5 e5!2 e5@4 ~", B: "a4 c5!2 c5@4 ~", C: "~@6 d5 c5", D: "d5 e5 d5 c5 a4 g4@3", E: "g4 a4 c5 a4@5",
  F: "a3@3 g3@3 ~@2",
})).s("gm_distortion_guitar").gain(0.56)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@4 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 B 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 B 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 B 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 B A B A B A B ~
>`.pickRestart({
  A: "f3 c4", B: "a3 g3",
})).s("gm_fretless_bass").gain(0.24)

// drums · snare
const snare = s("sd").struct("<~@3 A B@19 C B@15 C B@18 ~@7 A B@7 C B@10 D E D F B@26 ~>".pickRestart({
  A: "~@5 x!3", B: "~ x ~ x", C: "~@2 x ~@2 x!3", D: "x ~ x ~ x!4 ~ x ~ x ~ x!3", E: "x!5 ~ x ~ x ~ x!3 ~ x!2",
  F: "x!4 ~ x ~ x ~ x!2 ~ x ~ x ~",
})).gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A@19 B A@15 B A@18 ~@8 A@7 B A@10 ~@4 A@26 ~>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct(`<
  ~@25 A ~ A ~ A ~@11 A ~ A ~ A ~@10 B ~@18 A ~ A ~ A ~@5 C D E ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5
>`.pickRestart({
  A: "~ x ~@2", B: "~@3 x", C: "~ x ~@3 x ~@2", D: "~@2 x ~@2 x ~@10", E: "~ x ~@10 x ~@3",
})).gain(0.56)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, electric_guitar_clean, distortion_guitar, bass, snare, mid_tom, crash
)

More by Tom Petty and The Heartbreakers