Strudelify

Love Gets Me Every Time

Shania Twain

KeyE majorTempo124 bpm
0:00/0:00
// Love Gets Me Every Time — Shania Twain
// 123.9 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 11 "Oc Bass" named as a bass, played on electric bass finger (its ocarina patch is not one)
// note: duplicate parts dropped: ch 1 "Bass" electric bass finger (copy of ch 11 "Oc Bass" electric bass finger)
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Dist Guit 1, Clean Guit 3.
setcpm(123.9/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 · electric guitar clean · "Clean Guit 1"
const electric_guitar_clean = note(`<
  ~ A B@2 C B@2 D@2 B@2 D@2 B@2 D@2 E D E D F ~ G D H B G D H B E D@2 I J B@2 D@2 B@2 D@2 B@2 D@2 E D E D K L M D B@2
  D@2 B@2 E D@2 I N B@2 D@2 B@2 D@2 E D E D K L O D H B G D H B G D H B E D E D@2 I ~ P B@2 D@2 B@2 Q@2
>`.pickRestart({
  A: "[e3,b3,e4]@4 c#3@2 [e3,b3,e4]@2 ~@4 [b3,e4,a4] ~ [a2,d3,g3] ~", B: "[e3,b3,e4]@2 c#3 [e3,b3,e4] ~@4",
  C: "[e3,b3,e4] ~@7", D: "[a2,e3,a3,e4]@2 [f#3,f#4] [a2,e3,a3,e4] ~@4",
  E: "[b2,f#3,b3,f#4]@2 [g#3,g#4] [b2,f#3,b3,f#4] ~@4", F: "[a2,e3,a3,e4] ~@7",
  G: "[a2,e3,a3,e4]@4 [f#3,f#4]@2 [a2,e3,a3,e4]@2 ~@2 [a2,d3,g3] ~ [b3,e4,a4] ~@3", // A5 F# A5 Dsus4 Esus4
  H: "[e3,b3,e4]@4 c#3@2 [e3,b3,e4]@2 ~@2 [a2,d3,g3] ~ [b3,e4,a4] ~@3", // E5 Dsus4 Esus4
  I: "[a2,e3,a3,e4]@4 [a2,e3,a3,e4]@2 [a2,e3,a3,e4]@2 [a2,e3,a3,e4] g#2 ~@6", // A5
  J: "~@13 [a#3,d#4] [a3,d4] g#3, ~@6 [b3,e4] ~", K: "~ g#2 ~@14, [a2,e3,a3,e4] ~@7", L: "~@12 [e2,g#2]@2 a2 [b2,c3]",
  M: "[a2,e3,a3,e4]@2 [f#3,f#4] [a2,e3,a3,e4] ~@4, c#3@7 ~@9", N: "~@13 [a#3,d#4] [g#3,a3,d4] ~, ~@6 [b3,e4] ~",
  O: "[a2,e3,a3,e4]@4 [f#3,f#4]@2 [a2,e3,a3,e4]@2 ~@2 [a2,d3,g3] ~ [b3,e4,a4] ~@3, c#3@7 ~@9", // A5 F# A5 Dsus4 Esus4
  P: "~@10 [f#3,b3,e4] ~@2 [a#3,d#4] [a3,d4] g#3, ~@6 [b3,e4] ~", // Esus2 D#5 D5 E5
  Q: "[[a2,e3,a3,e4]@4 [f#3,f#4]@2 [a2,e3,a3,e4]@2 ~@6 [a2,e3,a3,e4]@4 [a2,e3,a3,e4]@2 [a2,e3,a3,e4]@2 ~@2 [a2,e3,a3,e4] g#2 ~@6]/2", // A5 F# A5
})).s("gm_electric_guitar_clean").gain(0.12).pan(0.3)

// chords · electric guitar clean · "Clean Guit 1" · soft notes
const electric_guitar_clean_2 = note("<~@21 A ~@12 B C ~@16 D ~@12 B E ~@12 D ~@18 B ~ C ~@7 F>".pickRestart({
  A: "~ [g#2,d#3,g#3,d#4] [f#2,g2,c#3,d3,f#3,g3,c#4,d4] [f2,b2,c3,f3,c4] [e2,e3,b3] ~@11", // G#5 Dmaj7 F E5
  B: "~@9 [d#3,g#3,d#4] [f#2,g2,c#3,d3,f#3,g3,c#4,d4] [f2,b2,c3,f3,c4] [e2,e3,b3] ~@3", C: "~@15 [g3,c4,c#4]",
  D: "~ [d#3,g#3,d#4] [f#2,g2,c#3,d3,f#3,g3,c#4,d4] [f2,b2,c3,f3,c4] [e2,e3,b3] ~@11", E: "~@14 c#4 [g3,c4]",
  F: "~@9 [d#3,g#3,d#4] [f#2,g2,c#3,d3,f#3,g3,c#4,d4] [f2,c3,f3,c4] [e2,b2,e3,b3] ~@3", // G#5 Dmaj7 F5 E5
})).s("gm_electric_guitar_clean").gain(0.02).pan(0.3)

// chords · distortion guitar · "Dist Guit 1"
const distortion_guitar = note("<~@21 A ~@12 B ~@17 A ~@12 B ~@13 A ~@18 B ~@9 C>".pickRestart({
  A: "~ [g2,d3,g3,d4] ~ [e2,e3] ~@12", B: "~@9 [g2,d3,g3,d4] ~ [e2,e3] ~@4", C: "~@9 [g2,d3,g3,d4] ~ [e2,b2,e3,b3] ~@4",
})).s("gm_distortion_guitar").gain(0.02)

// chords · electric guitar clean · "Clean Guit 2"
const electric_guitar_clean_3 = note(`<
  ~@8 A@3 ~@10 B C D E@2 F G E@2 H I@3 J ~@4 A@3 K L M ~ N O P Q P Q R C D E@2 F G E@2 H I@3 J S T@2 U V W@2 X Y@3 ~@2 B
  C D Z@2 F G Z@2 H AA AB@2 H P Q P Q@2 J ~@10
>`.pickRestart({
  A: "[~@6 c#3@2 c#3@2 e3@2 g2@2 d#2@33 ~]/3", B: "~@14 e2!2", C: "f#2@2 f#2@2 f#2@2 f#2 e2",
  D: "~@3 c#5@5, [a2,c#3]@5 ~@3, ~ e4@7, ~ a4@3", // A
  E: "[~@10 b2@2 c#3@2 ~@12 e2 ~ e3 ~@3, ~@2 e4@12 e3@11 ~@7, ~@2 a4@6 e2@3 g#4@5, ~@3 c#5@5 ~ b3@7, ~@5 e4@3]/2",
  F: "~@10 e2 ~ e3 ~@3, ~ b3@7, ~ e4@3, ~@3 g#4@5", G: "~@3 c#5@5, ~ e4@7, ~ a4@3",
  H: "~@10 e3 ~@5, ~ b3@7, ~ e4@3, ~@3 g#4@5",
  I: "[~@16 [a3,c#4]@15 ~ [a3,c#4]@15 ~, ~@15 [a2,e3]@15 ~ [a2,e3]@15 ~@2]/3", J: "g#2 a2!4 ~@3",
  K: "~@10 e3 ~ f#3@2 a3@2", L: "a2@9 ~ b2 ~ c#3@2 e3@2", M: "e2", N: "~@2 e3 ~ f#3@2 a3@10",
  O: "[a2,e3]@5 ~ a2@4 b2@2 c#3@4, ~@3 e3@3 ~@2", P: "[b2,f#3]@2 g#3 [b2,f#3] ~@4", Q: "[a2,e3]@2 f#3 [a2,e3] ~@4",
  R: "[a2,e3]@2 ~@12 e2!2", S: "g3@4 a3@4 [f#3,g3] e3 b2@2 d3@2 e3@2, ~@4 e4@7 ~@5",
  T: "[d3@2 e3@2 g2 ~ e3 d3@2 e3 g2 ~ e3 b2 d3 e3, ~@10 e2@6 ~@6 e2@7 ~@3]/2", U: "d3@2 e3 g2@2 e3 d3@2",
  V: "e3@2 g3@2 f#3@2 ~@6 g4 ~ g4@2, ~@3 b3@4 ~",
  W: "[e4 [c#4,d4] b3 ~ a#3 ~ a3 ~ g3 [e3,f#3] d3 ~ c#3 ~ b2@4 g2@2 g#2@2 e3@2 g2@2 e2@2 e3@2 [g#2,c3]@2]/2", // Dmaj7 Esus2 G#
  X: "[a2,c#3]@2 [b2,d3]@2 [c3,d#3,f#3]@2 [c#3,e3,g3]@2 [g3,c#4]@2 c4@2 c#4@2 ~ d4, ~@5 g3@3, ~@7 a4", // A Bm Cdim C#dim Gdim
  Y: "[d#4 ~@3 e3@2 a3@2 c4@2 a3 [e3,g3] d3@2 b2@19 ~@15, e4 ~@11, ~ g4@2 ~@21]/3", // Em
  Z: "[~@10 b2@2 d3@2 ~@12 e2 ~ e3 ~@3, ~@2 e4@12 e3@11 ~@7, ~@2 a4@6 e2@3 g#4@5, ~@3 c#5@5 ~ b3@7, ~@5 e4@3]/2",
  AA: "~@5 e2 c3 b2, ~ e4@7, ~ a4@3, ~@3 c#5@5",
  AB: "[~@10 b2@2 d3@2 ~@12 e2 ~ e3 ~@3, a2@3 c#5@5 ~ b3@7, ~@2 e4@12 e3@11 ~@7, ~@2 a4@6 e2@3 g#4@5, ~@5 e4@3]/2",
})).s("gm_electric_guitar_clean").gain(0.23).pan(0.7)

// other · fiddle · "Fiddle 1"
const fiddle = note("<~@4 A B@4 ~@26 A B@4 ~@60 A C@8>".pickRestart({
  A: "f#4@2 g#4!2 f#4@2 g#4!2",
  B: "[f#4@2 g#4!2 f#4@2 e4 f#4@2 g#4!3 f#4@2 e4 g4@2 a4!2 ~ a4!2 ~ g4@2 a4!2 ~ a4!2 ~@2]/4",
  C: "[f#4@4 g#4@2 g#4@2 f#4@4 e4@2 f#4@4 g#4@2 g#4@2 g#4@2 f#4@4 e4@2 g4@4 a4@2 a4@2 ~@2 a4@2 a4@2 ~@2 g4@4 a4@2 a4@2 ~@2 a4@2 a4@2 ~@2 f#4@4 g#4@2 g#4@2 g#4@2 f#4@4 e4@2 f#4@4 g#4@2 g#4@2 g#4@2 f#4@4 e4@2 g4@4 a4@2 a4@2 ~@2 a4@2 a4@2 ~@2 g4@4 a4@2 a4@3 ~ a4@2 ~@6]/8",
})).s("gm_fiddle").gain(0.18)

// other · fiddle · "Fiddle 1" · soft notes
const fiddle_soft = note("<~@20 [e5@8 e5@7 ~] ~@30 [e5@8 e5@7 ~] ~@26 [e5@8 e5@7 ~] ~@30>").s("gm_fiddle").gain(0.09)

// chords · fiddle · "Fiddle 2"
const fiddle_2 = note("<~@4 A B@4 ~@26 C B@4 ~@60 C D@8>".pickRestart({
  A: "e4@2 b4!2 ~@2 b4!2",
  B: "[~@2 b4!2 [e4,b4]@2 e4 b4@2 b4!3 [e4,b4]@2 e4 [e4,a4]@2 a4!2 ~ a4!2 ~ [e4,a4]@2 a4!2 ~ a4!2 ~@2, e4@4 ~@3 e4@5 ~@20]/4", // E5 A5
  C: "e4@3 ~ b4@2 b4@2 ~@4 b4@2 b4@2",
  D: "[~@4 b4@2 b4@2 [e4,b4]@4 e4@2 b4@4 b4@2 b4@2 b4@2 [e4,b4]@4 e4@2 [e4,a4]@4 a4@2 a4@2 ~@2 a4@2 a4@2 ~@2 [e4,a4]@4 a4@2 a4@2 ~@2 a4@2 a4@2 ~@2 b4@4 b4@2 b4@2 b4@2 [e4,b4]@4 e4@2 b4@4 b4@2 b4@2 b4@2 [e4,b4]@4 e4@2 [e4,a4]@4 a4@2 a4@2 ~@2 a4@2 a4@2 ~@2 [e4,a4]@4 a4@2 a4@3 ~ a4@3 ~@5, e4@4 ~@3 e4@5 ~@19 e4@5 ~@3 e4@5 ~@20]/8", // E5 A5 E5 A5
})).s("gm_fiddle").gain(0.13)

// chords · fiddle · "Fiddle 2" · soft notes
const fiddle_soft_2 = note("<~@4 A ~@2 B@2 ~@26 A ~@2 B@2 ~@60 A ~@2 B@2 ~@2 B C>".pickRestart({
  A: "~@2 e4!2 [e4,b4]@2 e4!2", B: "~ e4!2 ~ e4!2 ~@2", C: "~@2 e4@2 e4@3 ~ e4@3 ~@5",
})).s("gm_fiddle").gain(0.09)

// chords · electric guitar clean · "Clean Guit 3"
const electric_guitar_clean_4 = note(`<
  ~@66
  [~@9 f#3 ~@6]
  ~@4
  [~@2 c#4 ~@7 e3 ~@5]
  ~
  [~@3 d3@2 f#3@2 ~@9]
  [d4 e4@4 ~@7 e3@2 ~@2]
  ~@34
>`).s("gm_electric_guitar_clean").gain(0.16)

// bass · electric bass finger · "Oc Bass"
const bass = note(`<
  ~@5 A B C D A B C D A B C D E C E C F ~ C D A G C D A B E C@2 H ~ A B C D A B C D A B C D E I E C F ~ C D A G C D A B
  E C@2 H ~ A B C D A B C J E D E C F ~ C D A G C D A G C D A B E I E C@2 H ~@2 A B C D A B K L
>`.pickRestart({
  A: "e2 ~ e2 ~", B: "e2@2 ~@2 e2!2 c#2 ~", C: "a1 ~ a1 ~", D: "a1@2 ~@2 b1!2 c#2 ~", E: "b1 ~ b1 ~", F: "a1@3 ~@13",
  G: "e2@2 ~@2 c#2!2 b1 ~", H: "a1@2 a1!3 ~@3", I: "a1@2 ~@2 a1!2 b1 ~", J: "a1@2 ~@2 g#1 a1 g#1 ~",
  K: "a1@2 ~@2 a1@2 ~ a1", L: "~ a1!2 ~ a1@2 ~@2",
})).s("gm_electric_bass_finger").gain(0.12)

// other · clavinet · "Clav 1"
const clavinet = note(`<
  ~@15 A@2 B C B D ~@6 E@2 F G ~ H@3 ~@12 I@2 C B C ~@6 E@2 F G ~ H@3 ~@7 A@2 B C B D ~@6 E@2 F J K ~ L M B ~@2 H@3 ~@10
>`.pickRestart({
  A: "[~@3 b4@5]/2", B: "b4@15 ~", C: "b4!2", D: "b4@8 b4@7 ~", E: "[~@8 a4@11 ~ a4@2 a4 ~ a4@8]/2",
  F: "g#4@11 ~ f#4@2 e4@2", G: "f#4@2 e4@2 f#4@2 e4@9 ~", H: "[~@4 b4@7 ~@5]/3", I: "[b4@31 ~]/2", J: "f#4 e4 f#4 e4@5",
  K: "d#4", L: "~@8 b4 ~ b4@4 b4 ~", M: "b4@4 b4 ~ b4@10",
})).s("gm_clavinet").gain(0.25).pan(0.3)

// other · clavinet · "Clav 2"
const clavinet_2 = note(`<
  ~@17 A B ~ C ~@6 D@3 E ~ F@3 ~@12 G@2 B ~ C ~@6 D@3 E ~ F@3 ~@9 A B ~ C ~@6 D@3 H ~@2 I J A ~@2 F@3 ~@10
>`.pickRestart({
  A: "f#4@15 ~", B: "e4 g#4", C: "g#4@7 ~@9", D: "[~@8 b4@11 ~ b4@3 ~ b4@19 ~ b4@3 ~]/3", E: "b4@2 ~@2 b4@2 g#4@9 ~",
  F: "[~@4 a4@2 [e4,a4]@11 ~@7, c#4@3 ~@13, ~ e4@2 ~@9]/3", G: "d#4/2", H: "b4 ~ b4 g#4@5", I: "~@10 e4@4 f#4 ~",
  J: "f#4@2 e4 ~ f#4 ~ f#4@10",
})).s("gm_clavinet").gain(0.25).pan(0.3)

// other · clavinet · "Clav 2" · soft notes
const clavinet_soft = note("<~@19 A B ~@29 A B ~@25 A B ~@10 C ~@19>".pickRestart({
  A: "f#4@15 ~", B: "~ g#4", C: "f#4",
})).s("gm_clavinet").gain(0.14).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C A D A E A D A D A F A D A@4 C ~ A@11 G ~ A D A E A D A D A F A D A@4 C ~ A@11 G ~ A F A D A F A H A@4 C ~
  A@12 I@5 G ~@2 A F A D A F B J
>`.pickRestart({
  A: "x!2", B: "x ~@3 x ~@2 x", C: "x", D: "x ~@3 x!2 ~ x", E: "x ~@2 x!3 ~ x", F: "x ~@3 x!2 ~@2", G: "x!3 ~",
  H: "x ~@3 x!3 ~", I: "x ~@2 x!2 ~@3", J: "~ x!2 ~",
})).gain(0.64)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@18 A ~ B ~@3 A ~ A ~ A ~ A ~ B ~@16 A ~ B ~@3 A ~ A ~ A ~ A ~ B ~@6 B ~@3 B ~ A ~ B ~@3 A ~ A ~ A ~ A ~ A ~ A ~@11 B
  ~@3 C
>`.pickRestart({
  A: "~@3 x ~ x ~@2", B: "~@3 x ~@4", C: "~ x ~@6",
})).gain(0.32)

// drums · rim
const rim = s("rim").struct("<~@35 [~@5 x ~@2] ~@73>").gain(0.32)

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

// drums · clap
const clap = s("cp").struct("<~@67 [~@2 x!2 ~@2 x ~]!8 ~@26 [~@2 x!2 ~@2 x ~]!7 ~>").gain(0.56)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@23 A B@10 C ~@19 A B@10 C ~@15 A B@11 C ~@15>".pickRestart({
  A: "~@2 x!2", B: "x!4", C: "x",
})).gain(0.08)

// drums · low tom
const low_tom = s("lt").struct("<~@34 [~@2 x!3 ~@3] ~@30 [~@2 x!3 ~@3] ~@32 [~@2 x!3 ~@3] ~@9 [~ x!2 ~ x ~@3]>")
  .gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@34 [~@2 x!3 ~@3] ~@30 [~@2 x!3 ~@3] ~@32 [~@2 x!3 ~@3] ~@10>").gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<~@22 A B C@7 B C B D ~@18 E B C@7 B C B D ~@14 A B C@11 ~@5 F ~@10>".pickRestart({
  A: "~@3 x", B: "~ x!3", C: "x!4", D: "x", E: "x!3 ~", F: "x ~ x!3 ~@3",
})).gain(0.24)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@2 A ~@3 A ~@7 A ~ A ~@3 A ~@7 A ~ A ~@2 A ~@3 A ~@7 A ~ A ~@2 B A ~@7 A ~ A ~@2 A ~@7 A ~ A ~@3 A ~@11 A ~ A
  ~@5 A ~@7
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.4)

stack(
// … 4 more lines

More by Shania Twain