Strudelify

She's Got You

Patsy Cline

KeyF majorTempo62 bpm
0:00/0:00
// She's Got You — Patsy Cline
// 62 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 2/4 at bar 21, 4/4 at bar 22, 2/4 at bar 34, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 48 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(62/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 · "A.PIANO 1"
const piano = note("<A B C D E F G H I J C D E F G H I K L@2 M N O@4 P@4 Q R S T U C D E F G H V@7>".pickRestart({
  A: "~@10 [f6,a6]@2 ~@4 [f6,a6] ~@7, f2@17 ~@7, ~@3 [f6,a6]!2 ~ d2@6, ~@7 c6@2 c6@8 ~@7, ~@12 [f6,a6] d6 [f6,a6] d6@2 ~@7", // F
  B: "~@10 [f6,a6]@2 ~@4 [f6,a6]@3 ~@5, f2@19 ~@5, ~@3 [f6,a6]!2 ~ d2@6, ~@7 c6@2 c6@10 ~@5, ~@12 [f6,a6] d6 [f6,a6] d6@4 ~@5", // F
  C: "~@6 bb5@2 ~ e6@3, f2@17 c6@6 ~, ~@6 [f6,a6]@2 [f6,a6]@2 [f6,a6]@13 ~, ~@7 c6@2 c6@2 c6 e6@4 bb5@7 ~, ~ [c2,g6]", // F C5
  D: "~@5 c6 ~@2 c6 f1 g1 a1, f2@19 ~@5, ~@3 [c6,f6] c6 ~ f1@3 ~@3, ~@7 a5@6 a5@6 ~@5, ~@9 f6@3 [c6,f6]@2 c6 f6@4 ~@5", // F5
  E: "~@10 f6@2 ~@4 f6@5 ~@3, bb1@7 ~, ~@3 [f6,bb6] f6 ~ f2@6, ~@7 d6@6 d6@8 ~@3, ~@9 bb6@3 [f6,bb6]@2 f6 bb6@6 ~@3", // Bb5
  F: "~@5 f6 ~@2 f6 bb1 d2 f2, bb1@2 bb1 ~, ~@6 [f6,bb6]@2 f6@2 ~@2 [f6,bb6]@3 bb6@4 ~@5, ~@7 d6@6 d6@6 ~@5, ~@9 bb6@3 ~@2 f6@2 ~@8", // Bb5
  G: "~@10 [f6,a6]@2 ~@4 [f6,a6]@5 ~@3, f1@7 ~, ~@3 [f6,a6]!2 ~ d2@6, ~@7 c6@2 c6@12 ~@3, ~@12 [f6,a6] d6 [f6,a6] d6@6 ~@3", // F
  H: "~@5 [f6,a6] ~@2 [f6,a6]@3 ~, f1@11 ~, ~@3 [f6,a6]!2 ~ d2@6, ~@7 c6@2 c6@13 ~@2, ~@12 [f6,a6] d6 [f6,a6] d6@7 ~@2", // F
  I: "~@6 bb5@2 ~ e6@3, f1@17 c6@7, ~@3 [f6,a6]!2 [f6,a6]@7, ~@7 c6@2 c6@2 c6 e6@4 bb5@8, ~ [c2,g6]", // F C5
  J: "~@5 c6 ~@2 c6 c2 d2 e2, f1@12 f1@7 ~@5, ~@6 [c6,f6]@2 c6@2 ~@2 [c6,f6]@3 f6@4 ~@5, ~@7 a5@6 a5@6 ~@5, ~@9 f6@3 ~@2 c6@2 ~@8", // F5
  K: "~@5 c6 ~@2 c6 f1 g1 a1, f1@2 f1 ~, ~@6 [c6,f6]@2 c6@2 ~@2 [c6,f6]@3 f6@4 ~@5, ~@7 a5@6 a5@6 ~@5, ~@9 f6@3 ~@2 c6@2 ~@8", // F5
  L: "bb1@3 d2 f2 g2 f2@3 d2 f2 g2", M: "g1@3 b1 d2 e2 d2@3 b1 d2 e2", N: "g1@3 b1 d2 e2 c2@3 e2 g2 a2",
  O: "[c2@2 ~@22 bb5@4 ~@2 e6@6 ~@10 c6@2 ~@4 c6@2 f1@2 g1@2 a1@2 ~@10 f6@2 ~@4 f6@5 ~@13 f6@2, ~@12 f2@17 c6@6 ~@7 [c6,f6]@3 f6@3 [c6,f6]@2 c6 f6@4 ~@11 [f6,bb6]@3 bb6@3 [f6,bb6]@2 f6 bb6@6 ~@10 d6@5, ~@18 [f6,a6]@2 [f6,a6]@2 [f6,a6]@13 ~@9 c6@2 ~@2 f1@6 ~@6 bb1@21 ~@3 bb1@12, ~@19 c6@2 c6@2 c6 e6@4 bb5@7 ~@8 a5@6 a5@6 ~@12 d6@6 d6@8 ~@9 [f6,bb6]@3 bb6@3, ~@24 [c2,g6]@12 f2@19 ~@13 f6@2 ~@2 f2@12 ~@8 f6@2 ~@2]/4", // F5 Bb5 F Bb5 C5
  P: "[~@4 f6@2 bb1@2 d2@2 f2@2 ~@10 [f6,a6]@2 ~@4 [f6,a6]@5 ~@13 [f6,a6]@2 ~@4 [f6,a6]@6 ~@14 bb5@4 ~@2 e6@6 ~@10 c6@2, bb1@6 ~@6 f1@21 ~@3 f1@22 ~@2 f1@17 c6@7 ~@6 [c6,f6]@3 f6@3, [f6,bb6] f6 ~@7 [f6,a6]!2 ~ d2@6 ~@6 d2@6 ~@6 [c2,g6]@6 f1@6, ~ d6@6 ~@12 c6@2 c6@12 ~@10 c6@2 c6@13 ~@9 c6@2 c6@2 c6 e6@4 bb5@8 ~@7 a5@5, ~@3 bb6@4 ~@17 [f6,a6] d6 [f6,a6] d6@6 ~@9 [f6,a6]@2 [f6,a6]@2 ~@2 [f6,a6] d6 [f6,a6] d6@7 ~@8 [f6,a6]@2 [f6,a6]@2 [f6,a6]@14 ~@8 c6@2 ~@2]/4", // F F5 Bb5 F C5 F
  Q: "~@2 c6 f1 g1 a1 bb1@3 d2 f2 g2, f1 ~@3, [c6,f6] c6 ~@10, ~ a5@6 ~@17, ~@3 f6@4 ~@17", // F5
  R: "f2@3 d2 f2 g2 bb1@3 d2 f2 g2", S: "f2@3 d2 f2 g2 g1@3 b1 d2 e2", T: "d2@3 b1 d2 e2 g1@3 b1 d2 e2",
  U: "c2@3 e2 g2 a2 c2 ~@5",
  V: "[~@46 [f6,a6]@2 ~@29 f6@48 ~@43, f1@48 d2@18 ab5@7 d6@48 ~@47, ~@6 [f6,a6]@2 [f6,a6]@2 [f6,a6]@26 f2@29 f5@5 c6@48 ~@50, ~@7 c6@2 c6@2 c6@31 [f6,a6] c6 [f6,a6] c6@7 a6@15 a5@48 ~@53, ~@12 [c2,bb5,e6,g6]@36 [f6,a6] d6 [f6,a6] d6 f6@8 f1@91 ~@17]/7", // F C7 F
})).s("gm_piano").gain(0.57)

// chords · vibraphone
const vibraphone = note("<A@2 B C D@6 B C E@5 F@4 G@2 H I J K@3 L M@6 C N@6 O@5>".pickRestart({
  A: "~ [c5,f5,a5] [f5,a5,c6] [d5,f5,a5]", B: "~ [c5,f5,a5] [c5,e5,g5] [e5,g5,c6]",
  C: "~ [c5,f5,a5] [f5,a5,c6] [a5,c6,f6]", // F
  D: "[~@6 [bb4,d5,f5]@6 [d5,f5,bb5]@6 [f5,bb5,d6]@11 ~ [bb4,d5,f5]@6 [d5,f5,bb5]@6 f5@12 [f5,a5]@6 [f5,a5]@6 [f5,a5]@12 [f5,a5]@6 [f5,a5]@6 [d5,f5,a5]@11 ~ [c5,f5,a5]@6 [c5,e5,g5]@6 [e5,g5,c6]@11 ~ [c5,f5,a5]@6 [f5,a5,c6]@6 [a5,c6,f6]@6, ~@7 [bb5,d6]@8 ~@9, ~@54 c5@24 c5@23 ~@43, ~@60 c6@24 c6@17 ~@43, ~@11 d5@4 ~@9]/6", // Bb F Dm F C F Bb
  E: "[~@6 [bb4,d5,f5]@6 [d5,f5,bb5]@6 [f5,bb5,d6]@11 ~ [bb4,d5,f5]@6 [d5,f5,bb5]@6 f5@12 [f5,a5]@6 [f5,a5]@6 [f5,a5]@12 [f5,a5]@6 [f5,a5]@6 [d5,f5,a5]@11 ~ [c5,f5,a5]@6 [c5,e5,g5]@6 [e5,g5,c6]@6, ~@7 [bb5,d6]@8 ~@5, ~@54 c5@24 c5@23 ~@19, ~@60 c6@24 c6@17 ~@19, ~@11 d5@4 ~@5]/5", // Bb F Dm F C Bb
  F: "[~ [c5,f5,a5] [f5,a5,c6] ~ [f4,bb4,d5,f5]@4 d5@4 [g4,b4,d5,g5]@4, ~@3 [a5,c6,f6]@8 ~@5, ~ [f4,bb4,f5]]/4", // F Bb G F Bb5
  G: "[g4@2 c5@5 [c5,f5,a5], [b4,d5,g5], ~ [e4,g4]@3]/2", H: "[c5,e5,g5] [e5,g5,c6] ~ [c5,f5,a5]",
  I: "[f5,a5,c6] [a5,c6,f6] ~ [bb4,d5,f5]", J: "[d5,f5,bb5]@6 [f5,bb5,d6]@11 ~ [bb4,d5,f5]@6",
  K: "[[d5,f5,bb5]@6 f5@12 [f5,a5]@6 [f5,a5]@6 [f5,a5]@12 [f5,a5]@6 [f5,a5]@6 [d5,f5,a5]@11 ~ [c5,f5,a5]@6, ~ [bb5,d6]@8 ~@3, ~@18 c5@24 c5@23 ~@7, ~@24 c6@24 c6@17 ~@7, ~@5 d5@4 ~@3]/3", // Bb F Dm F Bb
  L: "[c5,e5,g5]@6 [e5,g5,c6]@11 ~ [c5,f5,a5]@6", // C F
  M: "[[f5,a5,c6] ~ [f4,bb4,d5,f5]@4 d5@4 [g4,b4,d5,g5]@4 g4@2 c5@5 [c5,f5,a5] [c5,e5,g5] [e5,g5,c6], ~ [a5,c6,f6]@8 ~@7 [e4,g4]@6 ~@2, ~@3 [f4,bb4,f5]@4 [b4,d5,g5]@4 ~]/6", // F Bb G F C F Em Bb5 …
  N: "[~@6 [bb4,d5,f5]@6 [d5,f5,bb5]@6 [f5,bb5,d6]@11 ~ [bb4,d5,f5]@6 [d5,f5,bb5]@6 f5@12 [f5,a5]@6 [f5,a5]@6 [f5,a5]@12 [f5,a5]@6 [f5,a5]@6 [d5,f5,a5]@11 ~ [c5,f5,a5]@6 [g4,c5,e5]@30 [c5,f5,a5]@6, ~@7 [bb5,d6]@8 ~@9, ~@54 c5@24 c5@23 ~@43, ~@60 c6@24 c6@17 ~@43, ~@11 d5@4 ~@9]/6", // Bb F Dm F C F Bb
  O: "[[f5,a5,c6]@6 [d5,f5,a5]@6 [f4,a4,c5,d5]@91 ~@17]/5", // F Dm Dm7
})).s("gm_vibraphone").gain(0.32).pan(0.7)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A@2 B C D E A@2 B C B C D E A@2 B C F G H I J K L M N O@2 K P Q R S T B C D E A@2 U@2 V@2 ~@3
>`.pickRestart({
  A: "f3 [a3,c4,f4] d3 [a3,d4,f4]", B: "f3 [a3,c4,f4] c3 [g3,c4,e4]", C: "f3 [a3,c4,f4] f3 [a3,c4,f4]",
  D: "bb2 [bb3,d4,f4] f3 [bb3,d4,f4]", E: "bb2 [bb3,d4,f4] bb2 [bb3,f4]",
  F: "[bb3,d4,f4] ~@2 [bb3,d4,f4]!4 ~@2 [bb3,d4,f4]@3", G: "[bb3,d4,f4] ~@2 [bb3,d4,f4]!4 ~@2 [bb3,d4,f4]@2 ~",
  H: "[b3,d4,g4] ~@2 [b3,d4,g4]!4 ~@2 [b3,d4]@2 ~, ~@3 g4", // G Bm
  I: "[b3,d4,g4]@2 ~@4 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [g3,c4,e4]@3 ~@3 [g3,c4,e4]@2 [g3,c4,e4]@2 [g3,c4,e4]@2", // G C
  J: "[g3,c4,e4] ~@5 f3@3 [a3,c4,f4]@3", K: "c3 [g3,c4,e4] f3 [a3,c4,f4]", L: "f3 [a3,c4,f4] bb2 [bb3,d4,f4]",
  M: "f3 [bb3,d4,f4] bb2 [bb3,d4,f4]", N: "bb2 [bb3,f4] f3 [a3,c4,f4]", O: "d3 [a3,d4,f4] f3 [a3,c4,f4]",
  P: "f3@3 [a3,c4,f4]@3 [bb3,d4,f4] ~@2 [bb3,d4,f4]!3", // F Bb
  Q: "[bb3,d4,f4] ~@5 [bb3,d4,f4]@6 [bb3,d4,f4]@2 ~@4 [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4]@2", // Bb
  R: "[bb3,d4,f4] ~@5 [bb3,d4,f4]@4 ~@2 [b3,d4,g4]@2 ~@4 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2", // Bb G
  S: "[b3,d4,g4] ~@2 [b3,d4]@2 ~ [b3,d4,g4] ~@2 [b3,d4,g4]!3, ~ g4 ~@2", T: "[g3,c4,e4] ~@2 [g3,c4,e4]!4 ~@5",
  U: "[f3 [a3,c4,f4] [g3,c4,e4]@4 f3 [a3,c4,f4]]/2", V: "[d3@6 [a3,d4,f4]@6 [f3,a3,c4,f4]@17 ~@19]/2",
})).s("gm_acoustic_guitar_steel").gain(0.3).pan(0.3)

// bass · electric bass pick · "PICK BASS"
const bass = note(`<
  A@2 B C D E F G H I B C D E F G H J K@2 L M N O P Q R S@2 T U V W X Y B C D E F G Z@2 AA@2 ~@3
>`.pickRestart({
  A: "f2 d2", B: "f2 c2", C: "f2@11 ~ f1@6 f1@2 g1@2 a1@2", D: "bb1 f2", E: "bb1@6 bb1@3 bb1 d2 f2", F: "f1@11 ~ d2@12",
  G: "f1 d2", H: "f1 c2", I: "f1@6 f1@3 c2 d2 e2", J: "f1@6 f1@3 f1 g1 a1", K: "bb1@3 d2 f2 g2 f2@3 d2 f2 g2",
  L: "g1@3 b1 d2 e2 d2@3 b1 d2 e2", M: "g1@3 b1 d2 e2 c2@3 e2 g2 a2", N: "c2 ~@3 f2@4", O: "c2@12 f2@11 ~",
  P: "f1@3 f1 g1 a1 bb1@6", Q: "f2 bb1", R: "bb1@6 bb1@2 d2@2 f2@2 f1@11 ~", S: "d2 f1", T: "c2 f1",
  U: "f1@3 f1 g1 a1 bb1@3 d2 f2 g2", V: "f2@3 d2 f2 g2 bb1@3 d2 f2 g2", W: "f2@3 d2 f2 g2 g1@3 b1 d2 e2",
  X: "d2@3 b1 d2 e2 g1@3 b1 d2 e2", Y: "c2@6 e2@2 g2@2 a2@2 c2@3 ~@9", Z: "[f1 c2@2 f2]/2", AA: "[d2@12 f1@17 ~@19]/2",
})).s("gm_electric_bass_pick").gain(0.35).pan(0.2)

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

// drums · rim
const rim = s("rim").struct("<A@18 ~@4 B A@7 C ~@4 A@6 C B C ~@4>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct("<~@18 A@3 B C ~@7 D A@3 E ~@13>".pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@7 x", C: "x", D: "~@3 x", E: "~@5 x!2 ~@5",
})).gain(0.36)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@21 [~@9 x!2 ~] ~@12 [~@3 x!2 ~@7] ~@13>").gain(0.16)

// drums · tambourine
const tambourine = s("tb").struct("<A@22 B A@11 C A@6 D E D ~@4>".pickRestart({
  A: "x ~ x ~ x ~ x ~ x!5 ~ x ~ x ~ x ~ x!4", B: "x ~@11 x ~ x ~ x ~ x ~ x!4", C: "x ~ x ~ x ~ x ~ x!5 ~@11",
  D: "x ~ x ~ x ~ x ~ x!4 ~@12", E: "~@12 x ~ x ~ x ~ x ~ x!4",
})).gain(0.36)

stack(piano, vibraphone, acoustic_guitar_steel, bass, kick, rim, snare, snare_soft, tambourine)

More by Patsy Cline