Strudelify

I Will Always Love You

Tears n' Joy

KeyA majorTempo120 bpm
0:00/0:00
// I Will Always Love You — Tears n' Joy
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 2"
const piano = note(`<
  ~@32 A B C D A E C D F@2 G@2 ~@7 H ~@7 I A B C D A E C D F@2 G@2 ~@19 J K L D M K N D M K L D M K N D M K L D M K N D
  M K L D M K N D M K L D M K N D M ~
>`.pickRestart({
  A: "[a2,a3,c#4,e4]@15 ~", B: "[f#2,a3,c#4,f#4]@7 ~", C: "[d2,f#3,a3,d4]@15 ~", D: "[e2,g#3,b3,e4]@15 ~",
  E: "[f#2,a3,c#4,f#4]@15 ~", F: "[[a2,a3,c#4,e4]@22 ~@2 [a2,a3,d4,e4]@7 ~]/2",
  G: "[[a2,a3,c#4,e4]@11 ~ [a2,a3,d4,e4]@4]/2", H: "~@5 e4 c#4 e4", I: "~@8 [e2,e3,e4]@2 ~ [e2,e3,e4]@2 ~ [e2,e3,e4]@2",
  J: "~@3 [e2,e3] ~ [e2,e3] [f#2,f#3,f#4]@2, ~@3 e4@2 ~@3", K: "[b2,f#3,b3,d#4]@15 ~", L: "[g#2,g#3,b3,d#4]@7 ~",
  M: "[f#2,f#3,a#3,c#4]@15 ~", N: "[g#2,g#3,b3,d#4]@15 ~",
})).s("gm_piano").gain(0.2)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@8 A@4 B@4 A@4 B C D E A@4 B C D E A B D E A B D E A@8 B C D E A@4 B C D E A B D E A B D E A@5 B D E A@4 B C D E A@4
  B C D E F G E B F G E B F G E B F G E B F G E B F G E B F G E B F G E B F G E B F G E B ~
>`.pickRestart({
  A: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", B: "f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~",
  C: "c#1 ~ c#1 ~ c#1 ~ c#1 ~ c#1 ~ c#1 ~ c#1 ~ c#1 ~", D: "d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~",
  E: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~", F: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  G: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~",
})).s("gm_electric_bass_finger").gain(0.18)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@16 A@4 B C D E A F A@2 B C D E G B H E G B H E A I A@3 J A@2 B C D E A F A@2 B C D E G B H E G B H E A I A@2 ~@4 A J
  A@2 B C D E A F A@2 B C D E K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M ~
>`.pickRestart({
  A: "~@2 [e4,a4,d5]@2 ~ [e4,a4,c#5]@2 ~ [e4,a4,d5]@2 ~ [e4,a4,c#5]@2 ~ [e4,a4,c#5]@2", // Dsus2 A Dsus2 A
  B: "~@2 [f#4,a4,c#5]@2 ~ [f#4,g#4,c#5]@2 ~ [f#4,a4,c#5]@2 ~ [f#4,g#4,c#5]@2 ~ [f#4,a4,c#5]@2", // F#m F#sus2 F#m F#sus2 F#m
  C: "~@2 [e4,a4,c#5]@2 ~ [e4,g#4,c#5]@2 ~ [e4,a4,c#5]@2 ~ [e4,g#4,c#5]@2 ~ [e4,a4,c#5]@2", // A C#m A C#m A
  D: "~@2 [f#4,a4,d5]@2 ~ [f#4,a4,c#5]@2 ~ [f#4,a4,d5]@2 ~ [f#4,a4,c#5]@2 ~ [f#4,a4,c#5]@2", // D F#m D F#m
  E: "~@2 [a4,b4,e5]@2 ~ [g#4,b4,e5]@2 ~ [a4,b4,e5]@2 ~ [g#4,b4,e5]@2 ~ [a4,b4,e5]@2", // Asus2 E Asus2 E Asus2
  F: "~@2 [e4,a4,d5]@2 ~ [e4,a4,c#5]@2 ~ [e4,g#4,c#5]@2 ~ [e4,g#4,c#5]@2 ~ [e4,a4,d5]@2", // Dsus2 A C#m Dsus2
  G: "~@2 [e4,a4,d5]@2 ~ [e4,a4,c#5]@2 ~ [e4,a4,d5]@2 ~ [e4,a4,c#5]@2 ~ [e4,a4,d5]@2", // Dsus2 A Dsus2 A Dsus2
  H: "~@2 [f#4,a4,d5]@2 ~ [f#4,a4,c#5]@2 ~ [f#4,a4,d5]@2 ~ [f#4,a4,c#5]@2 ~ [f#4,a4,d5]@2", // D F#m D F#m D
  I: "~@2 [e4,a4,d5]@2 ~ [e4,a4,c#5]@2 ~ [f#4,a4,d5]@2 ~ [f#4,a4,d5]@2 ~ [f#4,a4,d5]@2", // Dsus2 A D
  J: "~@2 [e4,a4,d5]@2 ~ [e4,a4,c#5]@2 ~ [f#4,a4,d5]@2 ~ [f#4,a4,d5]@2 ~ [e4,a4,d5]@2", // Dsus2 A D Dsus2
  K: "~@2 [b4,e5,f#5]@2 ~ [b4,d#5,f#5]@2 ~ [b4,e5,f#5]@2 ~ [b4,d#5,f#5]@2 ~ [b4,d#5,f#5]@2", // Bsus4 B Bsus4 B
  L: "~@2 [g#4,b4,e5]@2 ~ [g#4,b4,d#5]@2 ~ [g#4,b4,e5]@2 ~ [g#4,b4,d#5]@2 ~ [g#4,b4,e5]@2", // E G#m E G#m E
  M: "~@2 [b4,c#5,f#5]@2 ~ [a#4,c#5,f#5]@2 ~ [b4,c#5,f#5]@2 ~ [a#4,c#5,f#5]@2 ~ [b4,c#5,f#5]@2", // Bsus2 F# Bsus2 F# Bsus2
})).s("gm_percussive_organ").gain(0.06)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B ~@4 A@3 B
  A@3 B A@3 B A@3 B ~@41
>`.pickRestart({
  A: "a3!2 ~ a3 ~@2 a3 ~@2 a3 ~@2 a3 ~@3", B: "a3!2 ~ a3 ~@2 a3 ~@2 a3 ~@2 a3 ~ a3!2",
})).s("gm_electric_guitar_muted").gain(0.15).pan(0.3)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@32 A@3 B C@3 D E@4 ~@16 A@3 B C@3 D E@4 ~@3 B F ~@15 G@3 H I@3 J G@3 H I@3 J G@3 H I@3 J G@3 H I@3 J G@3 H I@3 J K
>`.pickRestart({
  A: "[[a3,a4,a5]@43 ~ [a3,a4,a5]@4]/3", B: "[g#3,g#4,g#5]@3 [a3,a4,a5]@3 [b3,b4,b5]@2",
  C: "[[a3,a4,a5]@43 [a3,a4,a5]@5]/3", D: "[g#3,g#4,g#5]@3 [f#3,f#4,f#5]@3 [e3,e4,e5]@2", E: "[a3,a4,a5]/4",
  F: "[a3,a4,a5] ~@3", G: "[[b3,b4,b5]@43 ~ [b3,b4,b5]@4]/3", H: "[a#3,a#4,a#5]@3 [b3,b4,b5]@3 [c#4,c#5,c#6]@2",
  I: "[[b3,b4,b5]@43 [b3,b4,b5]@5]/3", J: "[a#3,a#4,a#5]@3 [g#3,g#4,g#5]@3 [f#3,f#4,f#5]@2", K: "[b3,b4,b5]",
})).s("gm_string_ensemble_2").gain(0.16)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted_2 = note(`<
  ~@7 A B@8 C D C D C D C D C D C D C D C E F G F G F G F G F G F H C D C D C D C D C D C D C D C E F G F G F G F G F G
  F H F G F H C D C D C D C D C D C D C D C E F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F
  G F G ~
>`.pickRestart({
  A: "~@14 a#2 ~", B: "c2 ~ a#2 ~ c2 ~ a#2 ~ c2 ~ a#2 ~ c2 ~ a#2 ~",
  C: "c2 ~ a#2 ~ [c2,e2] ~ a#2 ~ c2 ~ a#2 ~ [c2,e2] ~ a#2 e2", // C
  D: "c2 ~ a#2 ~ [c2,e2] ~ a#2 ~ c2 ~ a#2 ~ [c2,e2] ~ [c2,a#2] ~", // C C7
  E: "c2 ~ a#2 ~ [c2,e2] ~ a#2 ~ c2 ~ [e2,a#2] ~ [c2,e2] ~ [c2,a#2] ~", // C Edim C C7
  F: "c2 ~ a#2 ~ [c2,e2] ~ a#2 d2 c2 d2 a#2 d2 [c2,e2] ~ a#2 e2", // C
  G: "c2 ~ a#2 ~ [c2,e2] ~ a#2 d2 c2 d2 a#2 d2 [c2,e2] ~ [c2,a#2] ~", // C C7
  H: "c2 ~ a#2 ~ [c2,e2] ~ a#2 d2 c2 d2 [e2,a#2] d2 [c2,e2] ~ [c2,a#2] ~", // C Edim C C7
})).s("gm_electric_guitar_muted").gain(0.2)

// chords · electric guitar muted · "MUTED GTR" · soft notes
const electric_guitar_muted_3 = note("<~@8 [g#2 ~@3 g#2 ~@3 g#2 ~@3 g#2 ~@3]!124 ~>")
  .s("gm_electric_guitar_muted").gain(0.05)

// chords · alto sax
const alto_sax = note("<~@72 A B@2 C ~@39 D E F E G E F E G E F E G E F E H ~>".pickRestart({
  A: "~@2 a3 ~@2 a3 ~@2 a3 ~@2 a3 ~@2 b3@2", B: "a3 ~ a3 ~@2 a3 ~@2 a3 ~@2 a3 ~@2 b3@2",
  C: "a3 ~ a3 ~@2 a3 ~@2 d4 ~ c#4 ~ a3@2 f#3 ~", D: "~@15 [f#4,b4]",
  E: "~ [f#4,b4] [f#4,a#4] ~ [f#4,b4] f#4 a#4 ~ b4 f#4 a#4 f#4 [f#4,b4] [f#4,a#4] ~ [f#4,b4]", // B5 F# B5 F# B5
  F: "~ [f#4,b4] [f#4,a#4] ~ [f#4,b4] f#4 a#4 ~ b4 f#4 a#4 f#4 [f#4,b4] [f#4,c#5] ~ [f#4,b4]", // B5 F# B5 F#5 B5
  G: "~ [f#4,b4] [f#4,a#4] ~ b4 f#4 a#4 f#4 b4 f#4 [f#4,a#4] ~ [f#4,g#4] f#4 ~ [f#4,b4]", // B5 F# F#sus2 B5
  H: "~ [f#4,b4] [f#4,a#4] ~ b4 f#4 a#4 f#4 b4 f#4 [f#4,a#4] ~ [f#4,g#4] f#4 ~@2", // B5 F# F#sus2
})).s("gm_alto_sax").gain(0.25)

// chords · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
  A@16 B@7 C D@6 E C F@3 C G@4 H@4 B@7 C D@6 E C F@3 C G@4 I@5 ~@3 B@7 C D@6 E C J@3 K L@4 J@3 K L@4 J@3 K L@4 J@3 K L@4
  J@3 K L@4 ~
>`.pickRestart({
  A: "[c#4@16 d4@15 c#4@16 ~ b3@16 c#4@16 d4@16 c#4@16 b3@16, a3@127 ~, e3@63 ~ f#3@63 ~]/8",
  B: "[[e3,c#4]@24 [f#3,d4]@8 e3@30 ~@2 f#3@15 ~ e3@15 ~ [f#3,a3,d4]@16, a3@79 g#3@17 ~@16, ~@32 c#4@65 ~@15]/7", // C#m D
  C: "[g#3,b3,e4]", D: "[a3@23 g#3@9 ~@32 f#3@16 [e3,g#3]@15 ~, c#4, e3@2 ~, ~@32 a3@47 ~@17]/6", E: "[f#3,a3,d4]",
  F: "[e3 ~ d4, a3, c#4@2 ~, ~@16 f#3@31 ~]/3", G: "[e3 ~ d4 [g#3,b3,e4], a3@49 ~@15, c#4 ~, ~@16 f#3@31 ~@17]/4",
  H: "[[e3,c#4]@3 [f#3,d4] [e3,c#4]@3 [f#3,d4], a3]/4", // C#m D C#m D
  I: "[[e3,c#4]@24 [f#3,d4]@8 [e3,c#4]@24 [f#3,d4]@9 ~@15, a3@13 ~@3]/5", J: "[f#3 ~ e4, b3, d#4@2 ~, ~@16 g#3@31 ~]/3",
  K: "[a#3,c#4,f#4]", L: "[f#3 ~ e4 [a#3,c#4,f#4], b3@49 ~@15, d#4 ~, ~@16 g#3@31 ~@17]/4",
})).s("gm_synth_strings_2").gain(0.14)

// drums · clap
const clap = s("cp").struct(`<
  ~@16 A B A B A B A B A B A B A B A C A B A B A B A B A B A C A B A B A B A B A B A B A B A C A B A B A B A B A B A C A
  B A C A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  ~
>`.pickRestart({
  A: "~@4 x ~@7 x ~@2 x", B: "~ x ~ x", C: "~@2 x ~@2 x!2 ~",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!8 [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!124 ~>").gain(0.25)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@8 [~ x ~@3 x ~@3 x ~@3 x ~@2]!124 ~>").gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@15 [~@4 x!3 ~] ~@117>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@15 B ~@11 B ~@15 B ~@11 B ~@3 B ~@15 B ~@41>".pickRestart({
  A: "~@6 x!2 ~@6 x!2", B: "~@7 x",
})).gain(0.25)

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

// drums · high tom
const high_tom = s("ht").struct("<~@31 A ~@11 A ~@15 A ~@11 A ~@3 A ~@15 A ~@41>".pickRestart({
  A: "~@8 x ~@2 x ~@4",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~@32 [x!16]!12 ~@16 [x!16]!16 ~@16 [x!16]!40 ~>").gain(0.25)

// drums · shaker
const shaker = s("sh").struct("<~@16 [~ x ~ x ~ x!3 ~ x ~ x ~ x ~ x]!56 ~@4 [~ x ~ x ~ x!3 ~ x ~ x ~ x ~ x]!56 ~>")
  .gain(0.1)

// drums · claves
const claves = s("clave:2").struct("<[~@8 x ~@2 x ~@2 x ~]!16 ~@117>").gain(0.73)

// drums · triangle
const triangle = s("triangles:30").struct("<~@8 [x!4]!124 ~>").gain(0.43)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<~@7 [~@7 x] [~ x ~ x ~ x ~ x]!124 ~>").gain(1.73)

stack(
  piano, bass, percussive_organ, electric_guitar_muted, string_ensemble_2, electric_guitar_muted_2,
  electric_guitar_muted_3, alto_sax, synth_strings_2, clap, hihat, hihat_soft, low_tom, mid_tom, crash, high_tom,
  tambourine, shaker, claves, triangle, triangle_2
)