Strudelify

I'll Always Love You

Taylor Dayne

KeyC majorTempo84 bpm
0:00/0:00
// I'll Always Love You — Taylor Dayne
// 84 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 47, 4/4 at bar 48, 1/4 at bar 55, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// bass · acoustic bass · "BASS"
const bass = note(`<
  ~ A B C D A B E F G@2 H@2 I@2 J K L M N@2 O P Q R G@2 H@2 I@2 J K L M N@2 O P Q S T@2 L U T@2 V W G@2 H@2 I@2 J K L M
  N@2 O P Q S T@2 L U X@2 L Y Z AA AB AC Z AA AD AE A B C AF A B C AF A B C AF ~
>`.pickRestart({
  A: "a#1!2 ~ a#1@5", B: "a#1 c2 d#2 g2", C: "g2@2 g2@2 ~@2 g2@8 g2 a2", D: "c2", E: "g2!2 ~ g2@5", F: "g2 a2 d3 g3",
  G: "[c3@3 c3 a2@3 d2@4 d2 g2@4]/2", H: "[c3@3 c3 a2@3 d2@4 d2 g2@2 a2 d3]/2", I: "[c3@3 c3 a2@3 d2@4 d2 g2@2 g2@2]/2",
  J: "c3@3 c3 c3@4", K: "c3 c2 d2 e2", L: "f2@3 f2 f2@4", M: "f2 e2 d2 g2", N: "[e2@3 e2 e2@2 g2 a2@4 a2 a2@2 b2 c3]/2",
  O: "d3@3 d3 d2@2 d3@2", P: "g2@3 g2 f2@3 f2", Q: "e2 a2", R: "g#2 g2", S: "f2@3 f2 a#2@2 a#2@2",
  T: "[d#2@3 d#2 g2 a#2@2 c3@4 c3 a#2@2 c3@2]/2", U: "a#1@3 a#1 a#1@2 a#1@2", V: "d2@3 d2 d2@4", W: "g2@3 g2 g2@4",
  X: "[d#2@3 d#2 g2 c3@2 c3@4 c3 a#2@2 c3@2]/2", Y: "a#2@3 a#2 a#2@2 a2@2", Z: "f#2@3 f#2 f#2@4", AA: "d#2@3 d#2 d#2@4",
  AB: "g#2@3 g#2 g#2@4", AC: "c#3@3 c#3 c#3@4", AD: "g#2@3 g#2 c#2@4", AE: "d#2", AF: "c2@3 c2 c2@4",
})).s("gm_acoustic_bass").gain(0.72)

// other · soprano sax · "SAX"
const soprano_sax = note("<~@48 A B@3 C D@2 E F ~@37>".pickRestart({
  A: "~@8 c5!2 a4 g4 c5@2 a4@2",
  B: "[a4@2 g4@2 g4@2 e5 [f5,f#5] g5@4 e5 d5 c5@8 a4@2 ~@2 g4@2 g4 a4@7 g4@4 e4 g4@3 a4@4, ~@3 a4 ~@20]/3", // F#maj7
  C: "~@2 e5 [f5,f#5] g5@8 e5 d5 c5@2", D: "[c5@8 a4@2 g4@2 d4 e4 c4@10 d4@2 e4@2 f4@4]/2",
  E: "g4@2 g4@4 e4 f4 g4@4 ~ e4 f4 g4", F: "c5 ~@3",
})).s("gm_soprano_sax").gain(0.56)

// chords · epiano1 · "E.PIANO"
const epiano1 = note(`<
  ~ A B C D A E C F G@2 H@2 G@2 I J K L M@2 N O P Q R@2 H@2 S@2 I J T L U@2 N O V W X@2 Y@2 Z@2 AA AB AC@4 AD@2 I AE K L
  AF@2 AG AH AI W AJ@2 AK AL AJ@2 AK AM@2 AN AO@2 AP AN AQ AR A E C AS AT AU AV AS AT AU AV AS ~
>`.pickRestart({
  A: "[c4,d#4,g4,a#4]!2 ~ [c4,d#4,g4,a#4]@5", B: "[f3,a#3,d4,f4]", C: "[f3,a3,c4,e4]!2 ~ [f3,a3,c4,e4]@5",
  D: "[e3,g3,b3,e4]", E: "[g3,a#3,d4,f4]", F: "~ [f4,g4]@15, [a3,c4]",
  G: "[[g3,b3,e4]@4 [g3,c4,e4]@3 [a3,c4,g4]@7 [c4,f4,a4]@2]/2", // Em C Am7 F
  H: "[[g3,b3,e4]@8 [g3,c4,e4]@6 [a3,c4,f4]@10 c5 ~ a4 ~ g4 ~ f4 ~]/2", I: "[b3,e4,g4]@5 c4 d4 e4",
  J: "[a#3,d4,f4] [g3,c4,e4] [f3,a#3,d4] [g3,c4,e4]", K: "[c4,e4,a4]", L: "[e4,a4,c5] [d4,g4,b4] [c4,f4,a4] [d4,g4,b4]",
  M: "[[b3,d4,g4]@6 [a3,f4] [g3,c4,e4]@5 [g3,c4,e4]@4]/2", N: "[a3,c4,f4]",
  O: "[f4,a4,c5] [d4,g4,b4] [c4,f4,a4] [f4,a4,d5]", P: "[d4,g4,b4] [c4,d#4,g4,b4]", Q: "[c4,d#4,g4,a#4] [c4,f4,a4]",
  R: "[[g3,b3,e4]@4 [g3,c4,e4]@2 [e4,g4,c5] [c4,f4,a4]@7 [c4,f4,a4]@2]/2", // Em C F
  S: "[[g3,b3,e4]@4 [g3,c4,e4]@2 [g3,c4,e4] [a3,c4,g4]@5 [a3,c4,g4]@2 [c4,f4,a4]@2]/2", T: "[c4,e4,a4]@4 ~ g5 e5 d5",
  U: "[[b3,d4,g4]@3 [g4,b4,d5]@3 [g3,c4,e4]@2]/2", V: "[d4,g4,b4] [d#4,g4,b4]",
  W: "[f3,g3] [g#3,a#3] [c4,d4] [e4,f4] [g4,g#4] [a#4,c5] [d5,d#5] [f5,g5] [g4,g#4] [a#4,c5] [d5,d#5] [f5,g5] [g#5,a#5] [c6,d6] [d#6,f6] [g6,g#6]", // Fsus2 G#sus2 Csus2 Fmaj7 G#maj7 A#sus2 D#maj7 Fsus2 …
  X: "[[d#4,g4,a#4]@3 [d#4,g4,a#4]@4 [d#4,g4,a#4]@7 [d#4,g4,a#4]@2]/2", // D#
  Y: "[c4,d#4,g#4]@3 [c4,d#4,g#4]@3 [c4,d#4,g#4]@2", // G#
  Z: "[[d#4,g4,a#4]@3 [d#4,g4,a#4] ~ [g4,a#4,f5]@2 [g4,a#4,d#5]@7 [g4,a#4,d#5]@2]/2", AA: "[f4,a4,c5]@3 [f4,a4,c5]@5",
  AB: "[f4,a4,c5]@3 [f4,a4,c5]", AC: "[b3@4 c4@2 [c4,e4,g4] [c4,f4,a4]@5 [c4,f4,a4]@2 [f4,a4,c5]@2, [e4,g4]@3 ~@5]/2",
  AD: "[b3@4 c4@2 [c4,e4,g4] [c4,f4,a4]@5 [a3,c4,f4]@2 [c4,f4,a4]@2, [e4,g4]@3 ~@5]/2", // C F Em
  AE: "[a#3,d4,f4] [c4,e4] [a#3,d4,f4] [c4,e4,g4]", // A# C A# C
  AF: "[[b3,d4,g4]@3 [b3,d4,g4] [b3,d4,g4]@2 [b3,d4,g4] [c4,e4,a4]@7 [c4,e4,a4]@2]/2", AG: "[c4,f4,a4]",
  AH: "[c4,a4] [b3,g4] [a3,f4] [c4,a4]", AI: "[b3,g4] [c#4,d#4,g4]",
  AJ: "[[d#4,g4,a#4]@4 [d#4,g4,a#4]@2 [d#4,g4,a#4] [d#4,g4,a#4]@5 [d#4,g4,a#4]@2 [d#4,g4,a#4]@2]/2", // D#
  AK: "[c4,d#4,g#4]!2", AL: "[c4,d#4,g#4,a#4]@2 [c4,d#4,g#4,a#4]!2",
  AM: "[[c4,d#4,g#4,a#4]@4 [c4,d#4,g#4]@4 [f4,g#4,c#5]@3 [f4,g#4,a#4,c#5] [f4,g#4,a#4,c#5]@4, ~@4 a#4@7 ~@5]/2", // G# C# A#m7
  AN: "[f#4,a#4,c#5]@3 [f#4,a#4,c#5] [f#4,a#4,c#5]@4", AO: "[d#4,f#4,b4]@3 [d#4,f#4,b4] [d#4,f#4,b4]@4",
  AP: "[f4,g#4,a#4,c#5]@3 [f4,g#4,a#4,c#5] [f4,g#4,a#4,c#5]@4", AQ: "[d#4,f#4,b4] [c#4,f4,g#4]", AR: "[d4,g4,a#4]",
  AS: "[g3,b3,e4]", AT: "~ [a3,c4,d#4,g4]@2 [a3,c4,d#4,g4]@3 ~@2", AU: "[a#3,d4,f4]",
  AV: "[c4,e4] [c4,e4,g4] ~ [c4,e4,g4]@5, a3 ~@3", // C
})).s("gm_epiano1").gain(0.64)

// other · acoustic guitar nylon · "A.GUITAR"
const acoustic_guitar_nylon = note(`<
  A B@2 C@2 ~ D E F G@2 H@2 I@2 J K L M N@2 O ~@25 P Q R ~@6 S L M T@2 U@2 ~@17 A B@2 C@2 D ~@3 D ~@4
>`.pickRestart({
  A: "~@14 g5 g#5", B: "[a#5@2 a#5@2 a#5@2 a#5@2 a#5!2 g#5@2 g5@2 f5@14 ~@2 c5 d5]/2",
  C: "[e5@2 e5@2 e5@2 e5@2 e5!2 d5@2 c5@2 b4@10 ~@8]/2", D: "~ d#6 c6 d6 a#5@3 c6 g5 a#5 f5@6",
  E: "~ c5@3 ~@12, a4 ~@3", F: "~ [f5,g5]@3 ~@12, c5 ~@3", G: "[~@5 b4 c5 g5@5 ~@4]/2", H: "[~@4 a4 c5 e5 f5@5 ~@4]/2",
  I: "[~@6 e5 f5@3 ~@6]/2", J: "~@4 a5 g5 d5 e5", K: "f5 e5 f5 g5", L: "a5@4 ~ e6 d6 c6", M: "a5 ~@3",
  N: "[~@4 [d5,g5,b5]@2 ~@2 [d5,e5] ~ g5@2 f5@2 e5@10 ~@8]/2", O: "~@9 c6@3 a5@4", P: "~@5 c5!3 a5@2 f5@2 ~@4",
  Q: "~@11 b4 c5 d5 e5 f5", R: "[e5,g5] ~", S: "~ e5 f5 g5",
  T: "[~@4 [e5,g5,b5]@2 ~@2 [d5,e5] ~ g5@2 f5@2 e5@10 ~@8]/2", U: "[~@8 c#6 c6@3 g5@2 f5@6 ~@12]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.48)

// other · acoustic guitar nylon · "A.GUITAR" · soft notes
const acoustic_guitar_nylon_2 = note("<~ A ~ B ~@3 C D ~@12 E ~@26 F G ~@11 H ~@19 A ~ B ~@10>".pickRestart({
  A: "~@9 c6 ~@6", B: "~@9 f5 ~@6", C: "f4 ~@3", D: "a4 ~@3", E: "~@8 [c6,c#6] ~@7", F: "~@8 f4 g4 a4 ~@5", G: "b4 ~",
  H: "~@8 c6 ~@7",
})).s("gm_acoustic_guitar_nylon").gain(0.28)

// chords · string ensemble 1 · "STRINGS 1"
const string_ensemble_1 = note(`<
  ~@25 A@2 B@2 C@2 D E F G H@2 I J K L M@2 N@2 O@2 P@2 Q@2 R@2 S@2 T U V W X@2 Y Z AA AB AC AD AE@4 AF@2 AG@2 AH@2 AG@2
  AI AJ O@2 U AI O@2 AK@2 O@2 AK@2 ~
>`.pickRestart({
  A: "[e4@6 [e4,c5] [c4,a4]@9]/2", B: "[e4@7 f4@9]/2", C: "[e4@6 e4 f4@7 a4@2]/2", D: "g4",
  E: "[d4,f4] [c4,e4] [a#3,d4] [c4,e4]", F: "a4", G: "c5 b4 a4 b4", H: "[g4@7 e4@9]/2", I: "f4",
  J: "[a4,c5] [g4,b4] [f4,a4] [f4,d5]", K: "[d4,b4] [c#4,d#4,g4,b4]", L: "[c4,d#4,g4,a#4] [e4,f4,g#4,c5]",
  M: "[g5@3 a#5]/2", N: "[c5,g#5]/2", O: "a#5/2", P: "g5/2", Q: "[g5@6 g5 f5@7 a5@2]/2", R: "[g5@6 d6 c6@7 a5@2]/2",
  S: "[g5@6 a5 c5@7 a5@2]/2", T: "g5", U: "c6", V: "a5", W: "c6 b5 a5 d6", X: "[g5@6 g5 [a5,c6]@9]/2", Y: "[f5,a5]",
  Z: "[a5,c6] [g5,b5] [f5,a5] [g5,b5]", AA: "[e5,g5]", AB: "[g5,a#5]", AC: "a#5@3 [g4,a#4]", AD: "[g4,a#4]",
  AE: "[c6@3 a#5@5]/4", AF: "g#5/2", AG: "c#6/2", AH: "b5/2", AI: "b5", AJ: "a#5", AK: "c6/2",
})).s("gm_string_ensemble_1").gain(0.44)

// other · string ensemble 2 · "STRINGS 2"
const string_ensemble_2 = note("<~ A B C D A B D E@2 ~@5 F G H I J@2 K L M ~@70>".pickRestart({
  A: "d#4@3 c4", B: "d4", C: "g4", D: "e4", E: "[g4@3 ~]/2", F: "~ [b3,e4,g4]", G: "f4 e4 f4 g4", H: "a4",
  I: "a4 g4 f4 b4", J: "[g4@6 f4 e4@9]/2", K: "f4", L: "[a4,c5] [g4,b4] [f4,a4] [f4,d5]", M: "[d4,b4] [d#4,b4]",
})).s("gm_string_ensemble_2").gain(0.39)

// other · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@25 A ~ B@2 ~@3 C D ~@2 E@2 ~ F G H@2 ~ I J@2 ~@16 F G K ~@3 L@2 ~@2 M N M O M P Q R ~@13
>`.pickRestart({
  A: "[c4,e4]@3 [c4,e4] ~@4", B: "[~@2 e4 g4 ~@2 a4 c4@5 ~@4]/2", C: "f4 e4 d4 e4", D: "[c4,a4] ~",
  E: "[~@4 e4 d4 c4 [a3,c4,d4]@3 [a3,c4,d4]!2 ~@4]/2", F: "g4@6 e4 f4 g4@8", G: "d#4 f4 g4 g#4",
  H: "[[d#4,g4]@3 [d#4,g4] ~ a#3 d#4 a#4@9]/2", I: "~@5 d#5 d5 a#4", J: "[a#4@2 g4 a#4@2 f5@2 d#5@5 ~@4]/2",
  K: "[d#4,g4,a#4]@3 [d#4,g4,a#4] ~@4", L: "[a#3@2 g3 a#3 ~@2 f4 [d#4,g4]@5 ~@4]/2",
  M: "~@6 c#4 d#4 f#4@2 f#4@2 ~@2 c#4 d#4", N: "f#4@3 f#4 ~@12", O: "f#4 [d#4,f#4,c#5]!2 ~@5",
  P: "f#4@3 f#4 ~@4 d#4@4 f4@4", Q: "f#4 [f4,g#4]", R: "[c#4,f#4] ~",
})).s("gm_synth_brass_1").gain(0.62)

// chords · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note(`<
  ~ A B C D A B C@2 E F G F E F H I J@2 H K L M N O G F G F G F H P J@2 H K L M N Q R S T A R S L C G F G F G F H P J@2
  H K L M N Q U S V A R S T A W X Y Z AA X AB B A@2 C D A@2 C D A@2 C D ~
>`.pickRestart({
  A: "[a#3,d4,f4]", B: "[g3,a#3,d4,f4]", C: "[g3,b3,d4]", D: "[g3,b3,c4,e4]", E: "[g3,b3,c4,e4] [g3,a3,c4,e4]",
  F: "[f3,a3,c4,d4] [g3,b3,d4]", G: "[g3,b3,d4,e4] [g3,a3,c4,e4]", H: "[g3,b3,d4,e4]",
  I: "[g3,c4,e4] [g3,a#3,c4,e4] [g3,c4,e4] [g3,a#3,c4,e4]", // C C7 C C7
  J: "[[a3,c4,e4,f4]@5 [g3,b3,d4,e4] [f3,a3,c4,d4] [g3,b3,d4,f4]]/2", K: "[a3,c4,e4]", L: "[f3,a3,c4,d4]",
  M: "[g3,b3,d4]!2 [a3,c4,f4]@2", N: "[g3,b3,d4,e4] [g3,a3,c#4,d#4]", O: "[g3,g#3,c4,d#4] [g3,b3,d4]",
  P: "[g3,c4,e4] [g3,a#3,c4,e4] [f#3,a3,d4] [g3,a#3,c4,e4]", Q: "[g3,g#3,c4,d#4] [a#3,d4,f4]", R: "[g3,a#3,d#4]",
  S: "[g3,a#3,c4,d#4]", T: "[g#3,c4,d#4,f4]", U: "[g3,a#3,d#4] [g3,b3,d4]", V: "[g3,g#3,c4,d#4]", W: "[g#3,a#3,c#4,f4]",
  X: "[f#3,a#3,c#4,d#4]", Y: "[f#3,g#3,b3,d#4]", Z: "[g#3,c#4,f4]", AA: "[f#3,a#3,c#4]",
  AB: "[f#3,g#3,b3,d#4] [g#3,c#4,f4]", // G#m7 C#
})).s("gm_synth_brass_2").gain(0.43)

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

// drums · rim
const rim = s("rim").struct("<~ A@2 ~ A@36 B A@7 ~ A ~ A@13 B A@7 ~ A@7 ~ A@3 ~ A@3 ~ A@3 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.55)

// drums · snare
const snare = s("sd").struct("<~@48 A ~ A ~@21 B ~@11 C ~@3 D ~@3 D ~>".pickRestart({
  A: "~ x ~@6", B: "~ x ~@2", C: "~ x ~ x", D: "~ x!2 ~@5",
})).gain(0.55)

// drums · low tom
const low_tom = s("lt").struct("<A ~@39 B ~@7 B ~ B ~@13 B ~@7 A ~@21>".pickRestart({
  A: "~@7 x", B: "~@3 x",
})).gain(0.62)

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

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@71 A ~@11 B ~@3 C ~@3 C ~>".pickRestart({
  A: "~@3 x", B: "~@5 x ~ x", C: "~@10 x!3 ~@3",
})).gain(0.55)

// drums · high tom
const high_tom = s("ht").struct("<A ~@39 B ~@7 C ~ C ~@13 B ~@7 D ~@7 E ~@13>".pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@2 x ~ x ~", C: "~@2 x!2", D: "~@6 x ~@4 x ~@4", E: "~@3 x",
})).gain(0.62)

stack(
  bass, soprano_sax, epiano1, acoustic_guitar_nylon, acoustic_guitar_nylon_2, string_ensemble_1, string_ensemble_2,
  synth_brass_1, synth_brass_2, kick, rim, snare, low_tom, hihat, mid_tom, high_tom
)

More by Taylor Dayne