Strudelify

Cowboys & Kisses

Anastacia

KeyA majorTempo76 bpm
0:00/0:00
// Cowboys & Kisses — Anastacia
// 76 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 piano (copy of ch 4 choir aahs)
// note: Full arrangement: all 77 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): guitar program 29.
setcpm(76/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.

// bass · fretless bass
const bass = note(`<
  ~@3 A B C D E D F D G H I J I K I L M B C D E D F D G H I J I K I L M B C D E D F D G B C D E D F D G N O N P Q R S T
  B C D E D F D G B C D E D F D G U
>`.pickRestart({
  A: "~@8 e3 f#3 c#3 e3 e2 f#2 a1 b1", B: "g1@5 ~ g1!2 d2 ~ d2@5 d2", C: "a1@7 a1!2 ~ a1@4 d2@2",
  D: "g1@4 ~ g1 b1 c#2 d2 ~ d2@5 d2", E: "a1@7 e2 a1 ~ a1@3 a1@3", F: "a1@7 e2 a1 ~ a1@3 b1@3",
  G: "a1@7 a1!2 ~ a1@3 a1@3", H: "g1@7 g1 d2@7 f#1", I: "a1@7 e2 a2 b2 a2@2 e2 f#2 e2@2", J: "g1@7 c#2 d2@2 d2@5 e2",
  K: "g1@6 b1 c#2 d2@2 d2@5 f#1", L: "g1@6 b1 c#2 d2@2 d2@5 e2", M: "a1@7 e2 a2 b2 f#2 a2 e2 f#2 c#2 e2",
  N: "g2@7 g2 f#2@7 f#2", O: "e2@14 e2 f#2", P: "a2@7 e3 ~ a2 f#2 e2@2 e2 d2 e2", Q: "g1@7 d2@8 d2",
  R: "e2 a1 a1@8 a1 b1 d2@2 d2 e2", S: "g2@3 g2 b2 d3@2 e3 f#3@2 d2@4 d2@2",
  T: "a1@2 c#2 e2 a2 e2 c#3 a2 e3 f#3 c#3 e3 e2 f#2 a1 b1", U: "g1",
})).s("gm_fretless_bass").gain(0.56)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@3 A B C B C B C B C D E D ~ F ~ F G B C B C B C B C H I J K L ~ M G B C B C B C B C B C B C B C B C N O N P N O N A
  B C B C B C B C B C B C B C B C Q
>`.pickRestart({
  A: "[a2,e3,c#4,e4]", B: "[g3,b3,d4,g4] [d3,a3,d4,f#4]", C: "[e3,a3,c#4,e4]", D: "~ a3", E: "c#4", F: "b3 ~",
  G: "~@2 e5 d5, [a3,c#4,e4]", H: "b3 [a3,f#4]", I: "e4", J: "~ f#4", K: "a3", L: "[b3,d4,g4] a3", M: "d4 a3",
  N: "[b3,d4,g4] [a3,d4,f#4]", O: "[a3,c#4,e4]", P: "[e3,c#4,e4]", Q: "[g2,b3,d4,g4]",
})).s("gm_string_ensemble_2").gain(0.38)

// chords · string ensemble 2 · soft notes
const string_ensemble_2_soft = note("<~@12 A B A C D C D ~@9 E F G H I C J ~@42>".pickRestart({
  A: "[b3,d4,g4] [d4,f#4]", B: "[a3,e4]", C: "[a3,c#4,e4]", D: "[d4,g4] [a3,d4,f#4]", E: "[d4,g4] d4", F: "[a3,c#4]",
  G: "[b3,d4,g4] [a3,d4]", H: "[c#4,e4]", I: "~ [d4,f#4]", J: "[b3,g4] [d4,f#4]",
})).s("gm_string_ensemble_2").gain(0.25)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  [d3 b3@2 d3 f#3 d4@3]
  [e3@2 c#4@5 ~@2 c#4 a3 ~ c#4 a3 a3@2, ~@7 a3@2 ~@7, ~@8 d4@3 e4@3 ~@2]
  [d3 b3@2 d3 f#3 d4@3]
  [e3@2 c#4@4 f#3 ~@2 c#4 a3 ~ c#4 a3 e3@2, ~@7 a3@2 ~@7, ~@8 d4@3 e4@3 ~@2]
  ~@73
>`).s("gm_acoustic_guitar_nylon").gain(0.43).pan(0.4)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@5 A B C B A B C ~@9 A B C B A B C ~@9 A B C B A B C ~ A B C B A B C ~@9 A B C B A B C ~ A B C B A B C ~
>`.pickRestart({
  A: "~@15 e3", B: "~@7 g3 g3@2 ~@6", C: "~@12 [a3,e4]@3 e3, ~@6 e3 ~",
})).s("gm_overdriven_guitar").gain(0.41).pan(0.3)

// other · electric guitar clean
const electric_guitar_clean = note("<~ A B C ~@11 D ~@12 E F@2 G B H I J ~@16 K L M@2 K L M@2 ~@17>".pickRestart({
  A: "c#4", B: "b4 f#4", C: "c#4@8 c#4@3 c#4@5", D: "~ f#4", E: "g4 d4", F: "[~@12 b4@11 ~ d4@8]/2", G: "c#4 ~",
  H: "e4 c#4", I: "b3 f#4", J: "a4 ~", K: "[g4,b4]@2 a4@9 ~ f#4 e4 d4@2", L: "c#4@2 a4@12 e3 f#3",
  M: "[[d3,g3]@7 c#4 d4@2 c#4 a3@2 e4 c#4@14 ~@4]/2", // G5
})).s("gm_electric_guitar_clean").gain(0.45).pan(0.2)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B A B C D C E C D C E C D C D C D C D C D C E C D C E C D C D C D C D C D C E C D C E C D C E C D C E A B A B A B A
  B C D C E C D C E C D C E C D C E F
>`.pickRestart({
  A: "[b3,d4,g4]@4 [b3,d4,g4]@2 [b3,d4,g4] [b3,d4] [a3,d4,f#4]!3 [a3,d4,f#4]@2 [a3,d4,f#4]!3", // G Bm D
  B: "[a3,c#4,e4]@4 [a3,c#4,e4]@3 a3 [a3,c#4,e4]!3 [a3,c#4,e4,a4]@2 [a3,c#4,e4] ~ a3, ~@8 a4@3 ~@3 [a3,c#4,e4,a4]@2", // A
  C: "[b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4] [b3,d4] [a3,d4,f#4]!4 [a3,d4,f#4]@2 [a3,d4,f#4] [a3,d4]", // G Bm D D5
  D: "[a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4] [a3,c#4] [a3,c#4,e4]!4 [a3,c#4,e4]@2 [a3,c#4,e4] [a3,c#4]", // A
  E: "[a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4] [a3,c#4] [a3,c#4,e4]!3 [a3,c#4,e4,a4]@2 [a3,c#4,e4] ~ a3, ~@8 a4@3 ~@3 [a3,c#4,e4,a4]@2", // A
  F: "[b3,d4,g4]@15 ~", // G
})).s("gm_acoustic_guitar_steel").gain(0.35).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@3 A B@8 C D C D C D C E B@8 C D C D C D C F B@16 ~@7 G B@15 H I>".pickRestart({
  A: "~@7 x", B: "x ~@6 x!2 ~ x ~@5", C: "x ~@6 x!2 ~@7", D: "x!2", E: "x ~@3 x ~@2 x", F: "x ~@6 x!2 ~@2 x ~@2 x ~",
  G: "~@5 x ~@3 x ~@5 x", H: "x ~@6 x!2 ~ x ~@4 x", I: "x",
})).gain(0.72)

// drums · rim
const rim = s("rim").struct("<~@12 A B A B A B A@2 ~@8 A B A B A B A@2 ~@41>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x ~@4 x ~@3",
})).gain(0.64)

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@12 A B@2 C A B@2 C ~@8 A C B C A D B C ~@16 A@7 E ~@17>".pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~@3 x ~ x", C: "~ x ~ x ~ x ~ x ~ x ~@3 x ~@2",
  D: "~ x ~ x ~ x ~@3 x ~@3 x ~ x", E: "~ x ~ x ~ x ~ x ~ x ~ x ~@4",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@7 B ~@7 C ~@7 D ~@7 C ~@7 D ~@7 D ~@7 E ~@3 B ~@3 D ~@3 B ~@3 D ~
>`.pickRestart({
  A: "~@12 x!3 ~", B: "~@14 x!2", C: "~@7 x", D: "~@13 x!3", E: "~ x ~ x ~@3 x",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A ~ A ~ B ~ A ~ B ~ C@2 B ~ C@2 B ~ A ~ B ~ A ~ B ~ C@2 B ~ C@2 B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@7 A ~ A ~ B ~
  A ~ B ~ A ~ B ~ A ~ B ~
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~ x", C: "~@5 x ~@2",
})).gain(0.4)

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

// drums · ride
const ride = s("rd").struct("<~@4 [x!8]!8 ~@8 [x!8]!8 ~@8 [x!8]!40 x>").gain(0.32)

stack(
  bass, string_ensemble_2, string_ensemble_2_soft, acoustic_guitar_nylon, overdriven_guitar, electric_guitar_clean,
  acoustic_guitar_steel, kick, rim, snare, hihat, hihat_soft, mid_tom, open_hat, crash, ride
)

More by Anastacia