Strudelify
KeyF majorTempo84 bpm
0:00/0:00
// Free Fallin' — Tom Petty and The Heartbreakers
// 84 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 94 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(84/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 · acoustic guitar steel · "AcouGuitar (MT-32 Bank)"
const acoustic_guitar_steel = note(`<
  A B C D E F G H I J K L M N I J E O I J G P Q R S T Q T S N U F G H I J G L Q R S T Q T S V Q R S T Q T S V M V M V M
  V M N I J E O I J G P Q R S W X@2 Y@4 Z@6 AA@8
>`.pickRestart({
  A: "~ c4@6 ~@3 c4@11 ~@3, ~ f4@12 ~@5 bb4@23 ~@7, ~@19 f4@22 ~@7",
  B: "~@2 c4@4 ~@2 a4@9 ~@3 c4@21 ~@7, bb4@4 ~@3 f4@10 ~ g4@23 ~@7, ~ f4@4 ~ c4@11 ~@2 f4@22 ~@7",
  C: "~@2 c4@12 ~@6 c4@21 ~@7, a4@6 ~@3 bb4@11 ~@4, ~ f4@12 ~@6 f4@22 ~@7",
  D: "~@2 c4@4 ~@2 c4@9 ~@3 c4@17 ~@11, bb4@4 ~@2 a4@11 ~ g4@19 ~@11, ~ f4@4 ~@2 f4@10 ~@2 f4@18 ~@11",
  E: "~ [c4,f4,a4]@12 ~@6 [bb3,c4,f4]@21 ~@8", F: "~ [bb3,c4]@4 ~@2 [a3,c4]@10 ~@2 [c4,f4]@22 ~@7",
  G: "~ [c4,f4,a4]@12 ~@6 [bb3,c4,f4]@18 ~@11", H: "~ [bb3,c4,f4]@4 ~@2 [a3,c4,f4]@4 ~@8 [c4,f4,g4]@18 ~@11",
  I: "~ [c4,f4,a4]@12 ~@6 [bb3,c4,f4]@22 ~@7", J: "~ [bb3,c4,f4]@4 ~@2 [a3,c4]@10 ~@2 [c4,f4]@22 ~@7",
  K: "~ [c4,f4,a4]@11 ~@7 [bb3,c4,f4]@18 ~@11", L: "~ [bb3,c4,f4]@4 ~@2 [a3,c4,f4]@10 ~@2 [c4,f4,g4]@22 ~@7",
  M: "~ [c4,f4,a4]@12 ~@6 [c4,f4,bb4]@22 ~@7", N: "~ [c4,f4,bb4]@4 ~@2 [c4,f4,a4]@10 ~@2 [c4,f4,g4]@18 ~@11",
  O: "~ [c4,f4,bb4]@4 ~@2 [a3,c4,f4]@4 ~@8 [c4,f4,g4]@18 ~@11", P: "~ [bb3,c4,f4]@4 ~@2 [a3,c4]@10 ~@2 [c4,f4]@14 ~@15",
  Q: "~ [c5,f5,a5]@8 ~@10 [c4,f4,bb4]@22 ~@7", // F Fsus4
  R: "~ [c4,f4,bb4]@4 ~@2 [c4,f4,a4]@10 ~@2 [c4,f4,g4]@14 ~@4 [c5,f5,a5]@8 ~@3", // Fsus4 F Csus4 F
  S: "~ [a4,c5,g5]@8 ~@10 [c4,f4,bb4]@22 ~@7", T: "~ [c4,f4,bb4]@4 ~@2 [c4,f4,a4]@10 ~@2 [c4,f4,g4]@14 ~@15",
  U: "~ [c4,f4,a4]@11 ~@7 [bb3,c4,f4]@21 ~@8", V: "~ [c4,f4,bb4]@4 ~@2 [c4,f4,a4]@10 ~@2 [c4,f4,g4]@22 ~@7",
  W: "~ [c4,f4,bb4]@4 ~@2 [c4,f4,a4]@10 ~@2 [c4,f4]@14 ~@15", X: "[~ [c5,f5,a5]@8 ~@10 [c4,f4,bb4]@34 ~@2 a4@41]/2",
  Y: "[~ [c5,g5]@8 ~@10 [c4,f4,bb4]@34 ~@44 [c5,f5,a5]@8 ~@10 [c4,f4,bb4]@34 ~@2 a4@41, ~ a4@54 a4@96 ~@41]/4", // C5 Fsus4 F Fsus4
  Z: "[~ [c5,g5]@8 ~@10 [c4,f4,bb4]@34 ~@44 [c5,f5,a5]@8 ~@10 [c4,f4,bb4]@34 ~@44 [c5,g5]@8 ~@10 [c4,f4,bb4]@34 ~@43, ~ a4@192 a4@95]/6", // C5 Fsus4 F Fsus4 C5 Fsus4
  AA: "[~ [c4,f4]@12 ~@6 [bb3,c4]@34 ~@44 [c4,f4]@12 ~@6 [bb3,c4]@34 ~@44 [c4,f4]@11 ~@7 [bb3,c4]@34 ~@44 [c4,f4]@12 ~@6 [bb3,c4]@34 ~@43, ~ a4@300 ~@83]/8", // F5 Bbsus2 F5 Bbsus2 F5 Bbsus2 F5 Bbsus2
})).s("gm_acoustic_guitar_steel").gain(0.35)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@4 A B A B A B A B A B A B C 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 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: "f2@6 ~@3 bb2@11 ~@4", B: "bb2@2 ~ f2@5 ~ c3@11 ~@4", C: "f2@11 ~@7 bb2@21 ~@9",
})).s("gm_electric_bass_finger").gain(0.27)

// chords · acoustic guitar steel · "AcousGtr"
const acoustic_guitar_steel_2 = note(`<
  ~@4 A B A C A D A E F G A H I J A D A G A G A K A H A G A L A M A H A G A H A G A H A G A H A G A D A C A D A N@8 O@6
  P@4 Q@4 R@4 S@2 T@6 U@2 V
>`.pickRestart({
  A: "[c4,f4,a4]@4 ~@2 [c4,f4,a4]@2 ~ [c4,f4,a4]@2 ~ [c4,f4,a4]@4 ~@2 [c4,f4,bb4]@10 ~@2 [c4,f4,bb4]@10 ~@2 [c4,f4,bb4]@4 ~@2", // F Fsus4
  B: "[c4,f4,bb4]@4 ~@2 [c4,f4,g4]@10 ~@2 [c4,f4,g4]@10 ~@2 [c4,f4]@2 ~ [c4,f4]@2 ~ [c4,f4]@8 ~@4", // Fsus4 Csus4 F5
  C: "[c4,f4,bb4]@2 ~ [c4,f4,a4]@5 ~ [c4,f4,g4]@10 ~@5", // Fsus4 F Csus4
  D: "[c4,f4,bb4]@4 ~@2 [c4,f4,a4]@10 ~@2 [c4,f4,g4]@10 ~@2 [c4,f4]@2 ~ [c4,f4]@2 ~ [c4,f4]@8 ~@4", // Fsus4 F Csus4 F5
  E: "[c4,f4,bb4]@2 ~ [c4,f4,a4]@5 ~ [c4,f4,g4]@11 ~@4", // Fsus4 F Csus4
  F: "[c4,f4,a4]@4 ~@2 [c4,f4,a4]@2 ~ [c4,f4,a4]@2 ~ [c4,f4,a4]@4 ~@2 [c4,f4,bb4]@10 ~@2 [c4,f4,bb4]@12 [c4,f4,bb4]@6", // F Fsus4
  G: "[c4,f4,bb4]@2 ~ [c4,f4,a4]@5 ~ [c4,f4]@11 ~@4", // Fsus4 F F5
  H: "[c4,f4,bb4]@4 ~@2 [c4,f4,a4]@10 ~@2 [c4,f4]@10 ~@2 [c4,f4]@2 ~ [c4,f4]@2 ~ [c4,f4]@8 ~@4", // Fsus4 F F5
  I: "[c4,f4,a4]@4 ~@2 [c4,f4,a4]@2 ~ [c4,f4,a4]@2 ~ [c4,f4,a4]@4 ~@2 [c4,f4,bb4]@10 ~@2 [c4,f4,bb4]@10 ~@2 [c4,f4,bb4]@6", // F Fsus4
  J: "[c4,f4,bb4]@2 ~ [c4,f4,a4]@5 ~ [c4,f4]@10 ~@5", K: "[c4,f4,bb4]@2 ~ [c4,f4,a4]@5 ~ [c4,f4]@10 ~@5, ~@3 g4 ~@4",
  L: "[c4,f4,bb4]@4 ~@2 [c4,f4,g4]@10 ~@2 [c4,f4]@10 ~@2 [c4,f4]@2 ~ [c4,f4]@2 ~ [c4,f4]@8 ~@4", // Fsus4 Csus4 F5
  M: "[c4,f4,bb4]@2 ~ [c4,f4,a4]@5 ~ [c4,f4]@12 ~@3", // Fsus4 F F5
  N: "[[c4,f4,bb4]@4 ~@2 [c4,f4]@12 [c4,f4]@30 [c4,f4,a4]@6 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4]@6 [c4,bb4]@12 [c4,bb4]@12 [c4,bb4]@6 [c4,f4]@6 [c4,f4]@12 [c4,f4]@12 [c4,f4]@3 [c4,f4]@3 [c4,f4]@12 [c4,f4,a4]@6 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4]@6 bb4@12 bb4@12 bb4@6 [c4,f4]@6 c4@12 ~@30 a4@6 a4@3 a4@3 ~@6 bb4@12 bb4@12 bb4@6 [c4,f4]@6 [c4,f4]@12 [c4,f4]@12 [c4,f4]@3 [c4,f4]@3 [c4,f4]@12 [c4,f4,a4]@6 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4]@6 [c4,f4,bb4]@12 bb4@6 bb4@6 [f4,bb4]@6, ~@3 a4@21 ~@6 a4@21 a4@21 ~@6 a4@21 f4@44 ~ bb4@33 ~@6 f4@6 ~@3, ~@3 g4@61, ~@11 f4@5 bb4@11 [c4,f4]@5 bb4@10 a4@7 a4@7 ~@2 a4@6, ~@33 a4@2 c4@13 ~@13 c4@3]/8", // Fsus4 F5 F F5 C7 F5 F F5 …
  O: "[f4@2 [f4,a4]@14 [c4,f4,a4]@2 [c4,f4,a4]!2 [c4,f4]@2 [c4,bb4]@4 [c4,bb4]@6 [c4,f4]@2 [c4,f4]@9 [c4,f4] [c4,f4]@4 [c4,f4]@2 [c4,f4]!2 [c4,f4]@2 [c4,f4]@10 [c4,f4]@2 f4@4 f4@26, bb4@11 f4@5 bb4@16 bb4@16, ~@10 a4@7 a4@16 c4@15, ~@198 a4@53 ~@37]/6", // F F5 C7 F5
  P: "[[c4,f4]@2 [c4,f4]@4 [c4,f4]@10 [c4,f4,a4]@2 a4 [f4,a4] [c4,f4]@2 bb4@4 bb4@6 [c4,f4]@2 [c4,f4]@4 [c4,f4]@10 [c4,f4,a4]@4 [c4,f4]@2 [c4,f4]@10, bb4@11 [c4,f4]@5 bb4@16, ~ a4@7 ~ c4 a4@7 a4@7 ~@8]/4", // F5 F F5 F F5
  Q: "[[c4,f4]@2 [c4,f4]@4 [c4,f4]@4 [c4,f4]!2 [c4,f4]@4 [c4,f4,a4]@2 [c4,f4,a4]!2 [c4,f4]@2 [c4,f4,bb4]@10 [c4,f4]@2 [c4,f4]@30, bb4@11 ~@5 bb4@16, ~@3 a4@21 ~@6 a4@21 a4@25 ~@20]/4", // F5 F F5 Fsus4 F5
  R: "[[c4,f4]@6 [c4,f4]@12 [c4,f4]@12 [c4,f4]@3 [c4,f4]@3 [c4,f4]@12 [c4,f4,a4]@6 [c4,f4,a4]@3 [c4,f4,a4]@3 [c4,f4]@6 [c4,bb4]@12 [c4,bb4]@18 [c4,f4]@6 f4@12 f4@76 ~@2, bb4@11 f4@5 bb4@16, ~@3 a4@21 ~@6 a4@21 c4@44 ~, ~@51 a4@25 ~@20]/4", // F5 F F5 C7 F5
  S: "[[c4,f4]@4 ~@2 [c4,f4]@26 ~ [c4,f4]@2 ~ [c4,f4]@8 ~@4 [c4,f4,a4]@4 ~@2 [c4,f4,a4]@2 ~ [c4,f4,a4]@2 ~ [c4,f4,a4]@4 ~@2 bb4@12 bb4@18, bb4@33 [c4,f4]@14 ~]/2", // F5 F F5
  T: "[[c4,f4]@4 ~@2 [c4,f4]@26 ~ [c4,f4]@2 ~ [c4,f4]@8 ~@4 [c4,f4]@4 ~@2 [c4,f4]@2 ~ [c4,f4]@2 ~ [c4,f4]@4 ~@2 [c4,f4]@28 ~@2, bb4]/2", // F5
  U: "[[c4,f4]@4 ~@2 [c4,f4]@26 ~ [c4,f4]@2 ~ [c4,f4]@8 ~@4 [c4,f4]@4 ~@2 [c4,f4]@2 ~ [c4,f4]@2 ~ [c4,f4]@4 ~@2 [c4,f4]@28 ~@2, bb4@47 ~]/2", // F5
  V: "[c4,f4,bb4]@4 ~@2 [c4,f4]@26 ~ [c4,f4]@2 ~ [c4,f4]@8 ~@4", // Fsus4 F5
})).s("gm_acoustic_guitar_steel").gain(0.21).pan(0.1)

// other · lead 2 sawtooth · "Saw Wave"
const lead_2_sawtooth = note(`<
  ~@18 A B C D E F G H I J K L M D N D O P Q R E F S T U V W X I J K L I J K Y I Z K L I J K Y C AA AB AC A B C D E F G
  AD I Z K L I J K Y I J K L I J K L I J K Y
>`.pickRestart({
  A: "a4@9 f4@11 ~@4", B: "f4@18 g4@25 ~@5", C: "a4@18 f4@23 ~@7", D: "f4@3 g4@3 ~@2",
  E: "a4@3 ~@3 a4@2 ~ a4 ~@2 a4@3 ~@3 g4@8 ~@4 f4@5 ~@13", F: "f4@3 ~@3 f4@2 ~ f4@2 ~ f4@3 ~@3 g4@7 ~@5 a4@3 ~@15",
  G: "a4@4 ~@2 a4@2 ~ a4@2 ~ a4@3 ~@3 g4@5 ~@7 f4@2 ~@16", H: "f4@2 ~@4 f4@2 ~ f4 ~@2 f4@4 ~@2 g4@12 ~@18",
  I: "a4@4 ~@2 a4@2 ~ a4 ~@2 a4@2 ~@4 g4@4 ~@8 f4@4 ~@8 f4@2 ~@4",
  J: "f4@4 ~@2 f4@2 ~ f4 ~@2 f4@3 ~@3 g4@6 ~@6 a4@3 ~@15",
  K: "a4@4 ~@2 a4 ~@2 a4 ~@2 a4@4 ~@2 g4@5 ~@7 f4@2 ~@10 f4@2 ~@4", L: "f4@3 ~@3 f4@3 ~@3 f4@6 g4@16 ~@14",
  M: "a4@17 ~ f4@23 ~@7", N: "a4@18 f4@21 ~@3 f4@4 ~@2", O: "a4@18 f4@13 ~@11 f4@4 ~@2", P: "f4@18 g4@24 a4@5 ~",
  Q: "a4@18 f4@23 ~ f4@4 ~@2", R: "f4@18 g4@23 ~@7", S: "a4@5 ~ a4@2 ~ a4@2 ~ a4@5 ~ g4@8 ~@4 f4@8 ~@4 f4@3 ~@3",
  T: "f4@5 ~ f4@2 ~ f4@2 ~ f4@4 ~@2 g4@15 ~@15", U: "a4@5 ~ a4@2 ~ a4 ~@2 a4@5 ~ g4@9 ~@3 f4@4 ~@8 f4@2 ~@4",
  V: "f4@5 ~ f4@2 ~ f4@2 ~ f4@4 ~@2 g4@6 ~@24", W: "a4@3 ~@3 a4@2 ~ a4@2 ~ a4@5 ~ g4@6 ~@6 f4@4 ~@5 f4@3 ~@6",
  X: "f4@4 ~@2 f4@8 ~@4 g4@11 ~@19", Y: "f4@3 ~@3 f4@3 ~@3 f4@5 ~ g4@16 ~@14",
  Z: "f4@3 ~@3 f4@2 ~ f4 ~@2 f4@3 ~@3 g4@6 ~@6 a4@3 ~@15", AA: "f4@15 ~@3 g4@26 ~@4", AB: "a4@6 f4@9 ~",
  AC: "f4@6 g4@9 ~", AD: "f4@3 ~@3 f4@2 ~ f4 ~@2 f4@4 ~@2 g4@12 ~@18",
})).s("gm_lead_2_sawtooth").gain(0.15).pan(0.9)

// drums · kick
const kick = s("bd").struct("<~@12 [x ~@7 x!2 ~@6]!82>").gain(0.37)

// drums · snare
const snare = s("sd").struct(`<
  ~@11 A B@9 C B@7 C B@7 C B@3 C B@3 C B@7 D B@7 C B@7 C B@3 C B@3 C B@3 C B@3 C B@3 C B@4
>`.pickRestart({
  A: "~@12 x!3 ~", B: "~ x ~ x", C: "~@4 x ~@7 x!3 ~", D: "~@4 x ~@6 x!5",
})).gain(0.37)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~@9 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "x",
})).gain(0.37)

// drums · tambourine
const tambourine = s("tb").struct("<~@22 A@7 B ~@8 A@3 B A@3 B A@15 B ~@8 A@7 B A@3 B A@3 B A@3 B A@4>".pickRestart({
  A: "x!8", B: "x!7 ~",
})).gain(0.37)

stack(acoustic_guitar_steel, bass, acoustic_guitar_steel_2, lead_2_sawtooth, kick, snare, hihat, crash, tambourine)

More by Tom Petty and The Heartbreakers