Strudelify

Heart of the Country

McCartney

KeyG minorTempo170 bpm
0:00/0:00
// Heart of the Country — McCartney
// 170 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 100 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(170/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 · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D@2 E F G@2 H I J@2 K L M@2 N O P Q R S T U V@2 W@2 X Y@2 Z AA AB AC@2 B C D@2 E F G@2 H I J@2 K L M@2 AD O P Q
  R S T U V@2 W@2 X AE@2 Z AA AB AC@2 B C D@2 E F G@2 H I J@2 K L M@2 AD O P Q R S T U V@2 ~
>`.pickRestart({
  A: "~@18 a2@5 ~", B: "~@3 f3@3 ~@3 [f3,bb3]@2 ~, bb2!2, ~@2 d4@5 ~, ~ bb3@2 ~",
  C: "a2@6 [f3,a3]@3 ~ f3@8 f3@6, ~@10 a3@5 ~@3 a3@4 ~@2", // F
  D: "[~@6 [g3,bb3]@4 g3@8 ~@12 [d3,bb3]@3 ~ d3@8 a2@5 ~, g2@23 ~ g2@14 ~@10, ~@6 d4@7 ~@5 d4@14 ~@2 bb3@5 ~@9, ~@5 d3@7 ~@12, ~@10 bb3@5 ~@3 [g3,bb3]@12 g3@12 ~@6]/2", // Gm
  E: "~@6 bb3@9 ~ bb3@2 [bb2,f3,bb3]@3 ~@3, bb2 ~, ~ f3@2 ~", // Bb5
  F: "~@6 [gb3,c4,d4]@3 ~ [gb3,c4,d4]@6 [gb3,c4,d4]@2 [d3,gb3,c4,d4]@3 ~@3, d3@3 ~", // D7
  G: "[~@6 [g3,bb3,d4]@4 [bb3,d4]@6 ~@2 d3@6 ~@6 [bb3,d4]@3 ~ [bb3,d4]@5 ~ bb3@6 ~@2, g2@23 ~ g2@21 ~@3, ~@5 g3@4 [g3,bb3,d4]@6 g3@8 ~, ~@15 d3@7 ~@2, ~@10 d4 ~]/2", // Gm Bb Gm
  H: "bb2@6 f3@10 bb3@2 [bb2,f3,bb3]@3 ~@3, ~@3 bb3@4 ~@5, ~@3 d4@3 ~@2 d4@3 ~", // Bb5
  I: "~@6 [a3,d4]@3 ~ [a3,d4]@5 ~ [f3,a3,d4]@2 f3@4 ~@2, a2@3 ~, ~@6 f3@10 ~@2 a3 ~@5, ~@10 e4@9 ~@5", // D5 Dm
  J: "[~@6 [bb3,d4]@3 ~ [bb3,d4]@5 ~@3 bb3@3 ~@9 [g3,bb3]@4 d4@5 ~@3 a2@5 ~, ~@3 d3@9 g2@7 ~@5, ~@6 g3@12 d4@15 ~ [g3,bb3]@10 ~@4, ~@9 g3@6 d3@5 ~@4]/2", // Bb Gm
  K: "bb2@6 bb3@3 ~ bb3@5 ~ bb3@2 [bb2,f3,bb3]@4 ~@2, ~ f3@2 ~, ~@5 d4@6 ~", // Bb5
  L: "~@6 [c4,d4]@3 ~ [c4,d4]@6 c4@2 [d3,gb3,c4,d4]@3 ~@3, d3@17 ~@7, ~ gb3@2 ~", // Csus2 D7
  M: "[~@10 [g3,bb3,d4]@6 [g3,bb3,d4]@2 [d3,g3,d4]@12 [d3,g3,bb3,d4]@3 ~@3 d3@5 ~ f3@6, g2@8 g4@5 ~@5 g4@14 ~@16, ~@3 [g3,bb3,d4]@2 d3@4 bb3@3 ~@12]/2", // Gm G5 Gm
  N: "~@6 d4@4 d4@6 d4@2 [f3,b3,d4,g4]@3 ~@3, f3@3 ~, ~@2 b3@3 ~@3, ~@5 g4@4 ~@3", // G7
  O: "~@6 [d4,g4]@3 ~ [d4,g4]@6 d4@2 [d4,g4]@2 ~@4, f3@5 ~, ~@3 b3@6 b3@2 ~", // G5
  P: "g3@5 ~ [bb3,g4]@3 ~ g4@5 ~ g4@2 [g3,bb3,e4,g4]@2 ~@4, ~ g3@2 ~, ~@3 e4@4 ~@5, ~@10 bb3 ~@13", // Eb Edim
  Q: "bb3@6 [e4,g4]@3 ~ [e4,g4]@6 [e4,g4]@2 [c3,g3,bb3,e4,g4]@2 ~@2 e4 ~, g3@3 ~, ~ bb3@2 ~", // Em C7
  R: "~@6 [d4,g4]@3 ~ [d4,g4]@6 [d4,g4]@2 [b3,d4,g4]@3 ~@3, ~ b3@2 ~", // G5 G
  S: "b3@5 ~ d4@4 [d4,g4]@6 [d4,g4]@2 [b3,d4,g4]@2 ~@2 g4 ~, ~ b3@2 ~, ~@3 g4 ~@8", // G5 G
  T: "bb3@6 [e4,g4]@3 ~ [e4,g4]@6 [e4,g4]@2 [bb3,e4,g4]@2 ~@4, [c3,g3]@19 ~@5, ~ bb3@2 ~", // Em Edim C5
  U: "[g3,bb3,e4]@6 [e4,g4]@3 ~ [e4,g4]@6 [bb3,e4,g4]@2 [c3,g3,bb3,e4,g4] ~@5, c3@3 ~, ~@3 bb3@5 ~@4", // Edim Em Edim C7
  V: "[[c3,g3,bb3,e4,g4]@2 ~@8 [c3,g3,bb3,e4,g4]@2 ~@6 [c3,g3,bb3,e4,g4]@27 ~@3]/2", // C7
  W: "[d4@4 db4@2 d4@3 ~ f4@2 g4@3 ~ f4@2 d4@2 ~ g4@14 ~@11 db4@2]/2",
  X: "d4@3 ~ db4 ~ d4@3 ~ f4@2 g4@3 f4@2 ~ db4@2 ~ g4@3",
  Y: "[~@4 bb4@3 ~@3 bb4@2 ~@4 bb4@3 ~@3 bb4@5 ~ bb4@2 g4@3 f4@2 ~ g4@3 g4@3 d4@3 ~ db4@2]/2",
  Z: "d4@3 ~ f4@2 g4@2 ~@2 f4@2 d4@3 ~ db4@5 ~ bb3@2",
  AA: "g3@4 ~@2 [g2,d3,f3]@10 [f3,b3,d4]@2 [g2,d3,f3,b3,d4,g4]@3 ~ d3 ~, ~@2 [b3,d4,g4]@3 ~@3", // G7 Bdim G7 G
  AB: "c3@3 [c3,g3,bb3,e4,g4]@5 [bb3,e4,g4]!2 ~@2, ~@4 [c3,g3] ~", // C7 Edim C5
  AC: "[[eb3,g3]@4 ~@6 [f3,a3]@4 ~@4 [g3,b3]@23 ~ a2@5 ~]/2", // Eb F G
  AD: "~@6 d4@4 d4@6 d4@2 [b3,d4,g4]@3 ~@3, f3@18 f3 ~@5, ~@2 b3@3 ~@3, ~@5 g4@4 ~@3", // G
  AE: "[~@4 bb4@3 ~@3 bb4@2 ~@4 bb4@3 ~@3 bb4@5 ~ bb4@2 g4@3 f4@2 ~ g4@3 ~ g4@2 d4@3 ~ db4@2]/2",
})).s("gm_acoustic_guitar_steel").gain(0.33).pan(0.9)

// chords · acoustic guitar steel · "STEEL GTR" · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@2 A B C D ~ E@2 F G H@2 I J K L M N O P Q R S T U V ~@6 W X ~@3 Y B C D ~ E@2 F G H@2 I J K L M N O P Q R Z AA U V
  ~@6 W X ~@3 Y B C D ~ E@2 F AB H@2 I J K L M N O P Q R S T U ~@2
>`.pickRestart({
  A: "~@8 a3 d4@2 ~, ~@5 d4@4 ~@3", B: "~@3 d3@2 ~@7", C: "~@8 d4@5 ~ d4 ~@9", D: "~@3 d4@4 d4@3 ~@2",
  E: "[~@6 g4@2 ~@8 [bb3,d4]@2 ~@6 d3@5 ~ g4@6 ~@12, ~@4 g4@5 g4@6 ~@9]/2", F: "~@8 f3 ~@3", G: "~@18 d4@4 g2 ~",
  H: "[~@8 [bb3,d4] g4@7 ~@8, g2@23 ~@25]/2", I: "~@2 d4 ~@5", J: "~@8 d4 ~@3", K: "~@3 g4 ~@8, ~ d3@4 ~@7",
  L: "~@8 g4 ~ g3@7 ~@7", M: "b3@5 ~@11 b3@2 ~@4 b3 ~", N: "~@2 d4@4 ~@10 g4@2 ~@4 g4 ~, b3 ~@3",
  O: "bb3@5 ~@11 e4@2 ~@4 g4 ~", P: "[e4,g4] ~@3, c3@3 ~", Q: "f3@18 f3@3 ~ g4 ~, b3 ~@3", R: "f3@5 ~, d4@5 ~@19",
  S: "e4@6 ~@16 e4 ~", T: "g4@5 ~ g3@12 e2@5 ~", U: "~@6 g4 ~@5 g4 ~@3 [g3,g4] ~@7", V: "~@22 db4 ~",
  W: "g2@6 ~@10 [d3,g4]@2 ~@4 [g2,d4] ~", X: "~@2 g4 ~@19 g4 ~, [g3,e4] ~@3", Y: "~@8 a3 d4@2 ~, ~@10 d4@8 e4 ~@5",
  Z: "e4 ~@3", AA: "g4@5 ~ g3@12 ~@6", AB: "~@18 d4@4 [g2,a3] ~",
})).s("gm_acoustic_guitar_steel").gain(0.11).pan(0.9)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E F G H I J K L E M G N O P Q R S T U V W@2 ~ X ~@4 Y Z AA@2 A B C D E F G H I J K L E M G N O P Q R S T U V
  W@2 ~ X ~@4 Y Z AA@2 A B C D E F G H I J K L E M G N O P Q R S T U V AB@3
>`.pickRestart({
  A: "bb2@10 ~@2 f2@9 ~@3", B: "a2@11 ~ d2@3 ~@3 f2@4 ~@2", C: "g2@11 ~ d2@6 ~@4 d2 ~",
  D: "g2@5 ~ f2@3 ~@3 d2@3 ~@3 c2@3 ~@3", E: "bb1@5 ~ c2@2 ~ db2@2 ~", F: "d2@11 ~ f2@4 ~@2 gb2@4 ~@2",
  G: "g2@12 d2@11 ~", H: "g2@6 d2 ~@2 a2@2 ~", I: "bb2@9 ~@3 f2@10 ~@2", J: "a2@5 ~ d2@2 ~ f2@2 ~",
  K: "g2@11 ~ d2@9 ~ d2 ~", L: "g2@5 ~ f2@4 ~@2 d2@4 ~@2 c2@3 ~@3", M: "d2@6 f2@2 ~ gb2@2 ~",
  N: "g2@11 ~ d2@2 ~@4 f2@6", O: "g1@6 a1@6 b1@5 ~ d2@6", P: "g2@5 ~ f2@6 d2@5 ~ db2@5 ~", Q: "c2@6 d2@6 e2@6 g2@5 ~",
  R: "g2@5 ~ f2@5 ~ d2@6 bb1@6", S: "g1@6 a1@5 ~ b1@5 ~ d2@4 ~@2", T: "g2@5 ~ f2@6 d2@4 ~@2 db2@6",
  U: "c2@5 ~ d2@5 ~ e2@5 ~ g2@4 ~@2", V: "c3@6 g2@6 e2@5 ~ g2@4 ~@2", W: "[c2@6 ~@4 g2@4 ~@4 c3@25 ~@5]/2",
  X: "~@3 g2 ~@2", Y: "g2@3 ~ d2 ~ eb2 ~", Z: "e2@12 g2@5 ~ e2@2 ~@4", AA: "[eb2@10 f2@3 ~@5 g2@23 ~ a2@6]/2",
  AB: "[c2@6 ~@4 g2@4 ~@4 c2@33 ~@21]/3",
})).s("gm_acoustic_bass").gain(0.44).pan(0.4)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@8 A@2 B@3 C D E@2 F@8 G@2 ~ H ~@4 I J K@2 ~@3 L M ~ N O@2 B@3 C D E@2 F@8 G@2 ~ P ~@4 I J K@2 ~@3 Q@2 ~ R S@2 B@3 C
  D E@2 F@8 T@3
>`.pickRestart({
  A: "[~@25 d4@18 ~@5, ~@23 f3@20 ~@5, ~@24 bb3@19 ~@5]/2",
  B: "[~@12 a4@7 ~@5 g4@12 g4@4 ~@8 [d4,g4]@17 ~@7, [a3,c4]@5 ~ bb4@4 ~@8, ~ f4@19 ~@3 d4@20 ~@4 bb3@18 ~@7]/3", // G5 Am
  C: "~@12 f4@7 ~@5, bb3@19 ~@5, ~ d4@19 ~@4", D: "~ d4@8 ~@4 gb4@10 ~, a3@10 ~@2 a3@11 ~",
  E: "[~ g4@29 ~@6 d3@5 ~ f3@6, [bb3,d4]@5 ~@3]/2", // Bb
  F: "[g3@5 ~@5 [b3,d4]@30 ~@9 g4@22 ~@7 f4@3 ~@3 f4@7 g4@6 b3@38 ~@9 d4@42 ~@6, ~@6 f3@34 ~@6 c3@27 ~@69 c3@45 ~@5, ~@46 e3@25 ~@72 e3@35 ~@14, ~@47 bb3@26 ~@71 bb3@37 ~@11, ~@2 d4 ~@5]/8", // Bm
  G: "[[c3,e3,bb3,d4] ~@4 [bb3,d4] ~@3 [bb3,d4]@13 ~@2]/2", H: "~@12 g2@5 ~@7", I: "~@18 d3@3 ~ eb3@2",
  J: "e3@3 ~ g3@2 a3@2 ~@2 bb3@6 g3@2 e3@3 ~ d3@2", K: "[eb3@6 g3@3 ~ f3@3 ~@3 a3@2 [g3,b3]@25 ~@5]/2",
  L: "~@4 d4@5 ~ bb3@2 g3@3 ~ f3@2 d3@3 ~ c3 ~", M: "bb2 ~", N: "~@6 f3@2 ~@4 db3@4 bb2@2 g2@3 ~@3",
  O: "[g2@5 ~@7 bb3@4, ~@23 f3@20 ~@5, ~@2 bb3 ~, ~@25 d4@18 ~@5]/2", P: "~@2 g2 ~",
  Q: "[db4@3 ~@3 f4 ~@3 c4@6 ~ bb3@21 ~@10]/2", R: "~@6 c4@4 ~@2 db4@3 ~ bb3@4 ~@4",
  S: "[c4@3 ~@2 c4@3 ~ bb3@2 ~ g3@7 ~@6 d4@18 ~@5, ~@23 f3@20 ~@5, ~@24 bb3@19 ~@5]/2",
  T: "[[c3,e3,bb3,d4]@2 ~@8 [bb3,d4]@2 ~@9 g5@46 ~@5, ~@9 e4@14 ~@13, ~@9 [bb3,d4]@13 ~@14, ~@19 bb4@36 ~@17, ~@20 d5@45 ~@7]/3", // C7 Bb
})).s("gm_electric_guitar_jazz").gain(0.33).pan(0.2)

// chords · electric guitar jazz · "JAZZ GTR" · soft notes
const electric_guitar_jazz_2 = note(`<
  ~@12 A@3 ~@6 B ~@3 C@2 ~@21 A@3 ~@6 B ~@3 C@2 ~@21 A@3 ~@6 B ~@3 C@2 ~
>`.pickRestart({
  A: "[~@23 f3@19 ~@5 gb3@11 ~@13 [bb3,g4]]/3", B: "~ f4@10 ~", C: "[~@10 [c3,e3]@2 ~@6 c3@27 ~@3, ~@9 e3@10 ~@5]/2",
})).s("gm_electric_guitar_jazz").gain(0.16).pan(0.2)

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

// drums · rim
const rim = s("rim").struct("<~@27 A B A@4 C ~@29 A B A@4 C ~@30>".pickRestart({
  A: "x!4", B: "x!2 ~ x", C: "x",
})).gain(0.16)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~ A ~@2 B@3 C ~@7 C ~@6 A@2 ~@9 A ~@3 A ~@2 B@3 C ~@7 C ~@6 A@2 ~@9 A ~@3 A ~@2 B@3 C ~@7 C ~@6 A@2 ~@4
>`.pickRestart({
  A: "~ x", B: "x!2", C: "x ~@2 x",
})).gain(0.16)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@14 A ~@14 B ~@20 A ~@14 B ~@20 A ~@13>".pickRestart({
  A: "~@3 x", B: "x ~ x!2",
})).gain(0.22)

// drums · open hat
const open_hat = s("oh").struct("<~@17 A@7 B ~@8 A B ~@18 C@7 D ~@8 A B ~@18 C@7 D ~@3>".pickRestart({
  A: "x!2", B: "x", C: "~ x ~ x", D: "~ x ~@2",
})).gain(0.27)

// drums · ride
const ride = s("rd").struct("<~@25 A ~@9 A ~@25 A ~@9 A ~@25 A ~@2>".pickRestart({
  A: "x ~@4 x ~@3 x ~@2",
})).gain(0.44)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~ A@13 B A@9 B ~@8 A B ~@2 A@13 B A@9 B ~@8 A B ~@2 A@13 B A@9 B ~@3
>`.pickRestart({
  A: "~ x ~@2 x ~", B: "~ x ~@4",
})).gain(1.11)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@14 A ~@9 A ~@9 A ~@15 A ~@9 A ~@9 A ~@15 A ~@9 A ~@3>".pickRestart({
  A: "~@2 x",
})).gain(0.55)

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

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@8 A ~ B ~ B ~@2 A ~@2 C A B ~@23 A ~ B ~ B ~@2 A ~@2 C A B ~@23 A ~ B ~ B ~@2 A ~@2 C A B ~@7
>`.pickRestart({
  A: "~ x", B: "x", C: "x!2",
})).gain(0.16)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, bass, electric_guitar_jazz, electric_guitar_jazz_2, kick, rim, snare,
  snare_soft, hihat, hihat_soft, open_hat, ride, cabasa, cabasa_soft, shaker, shaker_soft
)

More by McCartney