Strudelify

Lucille

Kenny Rogers

KeyF majorTempo135 bpm
0:00/0:00
// Lucille — Rogers Kenny
// 135 bpm, 3/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/3)

// 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 · "Bass"
const bass = note(`<
  ~ A B A C A B D E F G D H I J A K A B A C L@2 M A D N D F D N D L A@2 C A O A P D Q F R D S F T A K A O A K L A M U D
  H D F D Q A@2 O A M@2 U M U A V M U M W M U A K D F A B F G F X F Y F@2 D H Z AA Z AB Z AC F R F G D H D Q T AD AE T D
  N D H AF I F AG Z AD AH AI
>`.pickRestart({
  A: "bb1", B: "f2@10 ~ bb1@5", C: "f2@13 ~ f2 ~", D: "f2", E: "c2@10 ~ f1@5", F: "c2", G: "g2@13 ~ g2 ~",
  H: "c2@10 ~ f2@5", I: "c2@13 ~ g2@2", J: "f2@6 f2@4 ~ f2@5", K: "f1", L: "bb1@13 ~ f2@2", M: "eb2", N: "c2@10 ~ e2@5",
  O: "f2@10 ~ a1@5", P: "f2@10 ~ e2@5", Q: "c3@13 ~ c3 ~", R: "g1", S: "c2@10 ~ b1@5", T: "f2@13 ~ c2@2",
  U: "bb2@13 ~ bb2 ~", V: "f2@10 ~ d2@5", W: "bb2@10 ~ d2@5", X: "g2@10 ~ c2@5", Y: "g2@10 ~ d2@5", Z: "g2",
  AA: "d2@10 ~ gb2@5", AB: "d2@10 ~ g2@5", AC: "d3@13 ~ d3 ~", AD: "c2@6 c2@4 ~ c2@5",
  AE: "c2@2 ~@3 d2@6 e2@5, ~@2 c2 ~@5", AF: "f2@5 f2@6 d2@5", AG: "g2@6 g2@4 ~ g2@5", AH: "c2@10 ~ g1@5",
  AI: "c2@13 ~@3",
})).s("gm_fretless_bass").gain(0.56)

// chords · epiano2 · "Piano"
const epiano2 = note(`<
  ~ A@2 B@4 C@2 D@2 E@2 F G A@4 B@2 H I J@2 E@6 K H L M@2 N@2 B@2 E@2 D@2 C@2 O K M@2 B@2 M@2 P Q R@2 E@2 C@2 E@2 L M@2
  S T J@2 U@2 N@2 J@4 R@2 B@2 E@2 M@2 V@6 W X Y@2 Z@2 AA@2 Z@2 AB@4 Y@4 AC W@2 AD AE@2 Y@2 AF AG AH AI AJ AK AL@2
>`.pickRestart({
  A: "[[f3,bb3,d4]@31 ~]/2", B: "[[bb3,d4,f4]@31 ~]/2", C: "[[c4,eb4,f4,a4]@31 ~]/2",
  D: "[~@8 g4 a4@2 g4@5, [g3,c4,eb4], ~ c5]/2", E: "[~@8 c5 d5@2 c5@5, [c4,eb4,f4,a4], ~ f5]/2",
  F: "[g3,c4,eb4]@9 ~@2 [g3,c4,eb4]@3 ~@2", G: "~@8 d5@3 c5@5, [c4,eb4,f4,a4], ~@5 c5@3 ~@8, ~@3 f5@5",
  H: "[bb3,d4,f4]@9 ~@2 [bb3,d4,f4]@3 ~@2", I: "[d4,f4,ab4,bb4]@9 ~@2 [d4,f4,ab4,bb4]@3 ~@2",
  J: "[[g3,bb3,eb4]@31 ~]/2", K: "[c4,eb4,f4,a4]", L: "~@5 [bb3,d4,f4]@4 ~@2 [bb3,d4,f4]@5",
  M: "[f4@8 ~ g4@2 f4@5, [bb3,d4], ~ bb4, ~@8 f4@3 ~@5]/2", N: "[~@8 f4 g4@2 f4@5, [f3,bb3,d4], ~ bb4]/2",
  O: "[g3,c4,eb4]", P: "[bb3,d4,f4]", Q: "[f4,bb4]@5 ~@3 g4@3 f4@5, [d4,ab4], ~@5 f4@6 ~@5, ~@3 bb4@5",
  R: "[~@8 bb4 c5@2 bb4@5, [g3,bb3,eb4], ~ eb5]/2", S: "~@5 [f3,bb3,d4]@4 ~@2 [f3,bb3,d4]@5",
  T: "[g3,bb3,eb4]@9 ~@2 [g3,bb3,eb4]@3 ~@2", U: "[[bb3,eb4,g4]@31 ~]/2", V: "[[g3,c4,e4]@31 ~]/2",
  W: "~@5 [g3,c4,e4]@4 ~@2 [g3,c4,e4]@5", X: "~@5 [bb3,c4,e4,g4]@4 ~@2 [bb3,c4,e4,g4]@5",
  Y: "[~@8 c5 d5@2 c5@5, [a3,c4,f4], ~ f5]/2", Z: "[[d4,g4]@8 ~ eb4@2 d4@5, [b3,f4], ~ g4, ~@8 d4@3 ~@5]/2",
  AA: "[[b3,d4,f4,g4]@31 ~]/2", AB: "[~@8 g4 a4@2 g4@5, [g3,c4,e4], ~ c5]/2", AC: "~@5 [a3,c4,f4]@4 ~@2 [a3,c4,f4]@5",
  AD: "[a3,c4,f4]@9 ~@2 [a3,c4,f4]@3 ~@2", AE: "[[a3,c4,f4]@31 ~]/2", AF: "[a3,c4,f4]",
  AG: "~@8 a4@3 g4@5, [g3,c4,e4], ~@5 g4@3 ~@8, ~@3 c5@5", AH: "[g3,c4,e4]",
  AI: "[d4,g4]@5 ~@3 eb4@3 d4@5, [b3,f4], ~@5 d4@6 ~@5, ~@3 g4@5", AJ: "[b3,d4,f4,g4]@9 ~@2 [b3,d4,f4,g4]@3 ~@2",
  AK: "[g3,c4,e4]@9 ~@2 [g3,c4,e4]@3 ~@2", AL: "[[g3,c4,e4]@3 ~]/2",
})).s("gm_epiano2").gain(0.48)

// chords · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note(`<
  ~@2 A ~ A ~ A ~ B ~ C ~ B D E ~ A ~ A ~ A F A ~ G ~ B ~ B ~ B H A F I@6 J@2 K@2 J@2 L M I@6 N@2 O@2 J@6 N I@2 N P O@4
  I@2 O@6 I@2 J@2 I@2 Q@6 R@2 J@2 S@6 Q@4 J@4 M R@2 M J@4 M R@2 T@2 R U@2
>`.pickRestart({
  A: "[d4,bb4] ~@15", B: "[c4,a4] ~@15", C: "[eb4,c5] ~@15", D: "[eb4,g4,c5]", E: "[a4,f5] ~@15", F: "[d4,f4,bb4]",
  G: "[bb3,g4] ~@15", H: "[a4,c5,f5]",
  I: "[~@15 f3, bb2 bb2, ~@4 f3@5 f3@5 f3@5 ~ f3@5 f3@5 ~@2, ~@5 bb3@11 ~@5 bb3@11, ~@11 d4@5 ~@11 d4@5]/2",
  J: "[~@15 c4, c3@7 c4 c3@8, ~@2 f3@7 ~ f3@6, ~@5 c4@6 f4@7 ~@7 a3@7, ~@9 a3@9 ~@3 c4@6 f4@5]/2",
  K: "[~@15 g3, c3 c3, ~@4 g3@5 g3@5 g3@5 ~ g3@5 g3@5 ~@2, ~@5 c4@11 ~@5 c4@11, ~@11 eb4@5 ~@11 eb4@5]/2",
  L: "~@7 g3, c3, ~@4 g3@5 g3@5 ~@2, ~@5 c4@11, ~@11 eb4@5", M: "~@7 c4, c3, ~ f3@3, ~@5 c4@6 f4@5, ~@9 a3@7",
  N: "~@7 f3, bb2, ~@4 f3@5 f3@5 ~@2, ~@5 bb3@11, ~@11 d4@5",
  O: "[~@15 bb3, bb2@7 bb3 bb2@8, ~@2 eb3@7 ~ eb3@6, ~@5 bb3@6 eb4@7 ~@7 g3@7, ~@9 g3@9 ~@3 bb3@6 eb4@5]/2",
  P: "~@7 bb3, bb2, ~ eb3@3, ~@5 bb3@6 eb4@5, ~@9 g3@7",
  Q: "[~@15 g3, c3 c3, ~@4 g3@5 g3@5 g3@5 ~ g3@5 g3@5 ~@2, ~@5 c4@11 ~@5 c4@11, ~@11 e4@5 ~@11 e4@5]/2",
  R: "~@7 g3, c3, ~@4 g3@5 g3@5 ~@2, ~@5 c4@11, ~@11 e4@5",
  S: "[~@15 d4, d3@7 d4 d3@8, ~@2 g3@7 ~ g3@6, ~@5 d4@6 g4@7 ~@7 b3@7, ~@9 b3@9 ~@3 d4@6 g4@5]/2",
  T: "~@7 d4, d3, ~ g3@3, ~@5 d4@6 g4@5, ~@9 b3@7", U: "[~@16 c3@15 ~, c4@31 ~, ~@5 g3@25 ~@2, ~@11 e3@20 ~]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.64)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@34 A@6 B@2 C@2 B@2 D E A@6 F G H@2 B@6 F A@2 F I H@4 A@2 H@6 A@2 B@2 A@2 C@6 D J K@2 L@6 C@4 K@4 M D@2 M K@4 M D@2
  N@2 D O@2
>`.pickRestart({
  A: "[f4,bb4,f5]/2", B: "[a4,eb5,f5]/2", C: "[g4,c5,g5]/2", D: "[g4,c5,g5]", E: "[a4,eb5,f5]", F: "[f4,bb4,f5]",
  G: "[f4,ab4,d5]", H: "[g4,eb5,g5]/2", I: "[g4,eb5,g5]", J: "[g4,bb4,e5]", K: "[a4,f5,a5]/2", L: "[b4,f5,g5]/2",
  M: "[a4,f5,a5]", N: "[b4,f5,g5]", O: "[[e4,e5]@31 ~]/2",
})).s("gm_string_ensemble_1").gain(0.24)

// drums · kick
const kick = s("bd").struct("<~ A@32 B A@30 B A@59 B A C>".pickRestart({
  A: "x ~@6 x", B: "x ~@3 x!2 ~@5 x ~@2 x ~", C: "x",
})).gain(0.56)

// drums · rim
const rim = s("rim").struct("<~ [~@5 x ~@5 x ~@4]!125 ~>").gain(0.48)

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

// drums · hihat
const hihat = s("hh").struct("<~ [x ~@4 x ~@5 x ~@4]!125 ~>").gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<~@33 A ~@30 A ~@23 A ~@15 A ~@19 A ~ B>".pickRestart({
  A: "~@7 x", B: "x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~ x ~@32 x ~@54 x ~@37>").gain(0.32)

stack(bass, epiano2, acoustic_guitar_nylon, string_ensemble_1, kick, rim, snare, hihat, open_hat, crash)

More by Kenny Rogers