Strudelify

For the Good Times

Kenny Rogers

KeyD majorTempo94 bpm
0:00/0:00
// For the Good Times — Rogers Kenny
// 94 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(94/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 · "AcoustBass"
const bass = note(`<
  ~@5 A B C@2 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC@2 AD AE AF AG AH AE AI AJ E F G AJ I J K AK M
  N O P Q R AL T U V W AM F AH AA AN AC AO AC AP AC AO AQ AO AR@2
>`.pickRestart({
  A: "e1", B: "a1", C: "d1", D: "~ d1 e1 f#1", E: "g1@4 ~@2 g1 ~ g1@6 ~@2", F: "a1@4 ~@2 a1 ~ a1@7 ~",
  G: "d2@5 ~ d2 ~ d2@4 a1@4", H: "d2@3 ~ e1@2 f#1@2, ~@3 d1@2 ~@3", I: "g1@4 ~@2 g1 ~ f#1@6 ~@2",
  J: "e1@4 ~@2 e1 ~ e1@4 b1@4", K: "a1@4 ~@2 a1 ~ b2@4 a2@4", L: "a1@3 ~ b1@2 c#2@2, ~@3 a1@2 ~@3",
  M: "d2@4 ~@2 d2 ~ a1@7 ~", N: "d2@4 ~@2 d2 ~ a2@3 ~ d2@4", O: "a1@4 ~@2 a1 ~ e2@8", P: "a1@4 ~@2 a1 ~ e2@6 ~@2",
  Q: "a1@5 ~ a1 ~ e2@6 ~@2", R: "a1@5 ~ a1 ~ b1@4 c#2@4", S: "d2@5 ~ d2 ~ a2@8", T: "d2@5 ~ d2 ~ a2@4 a2@3 ~",
  U: "d2@4 ~@2 d2 ~ d2@4 a2@4", V: "d2@5 ~ d2 ~ e2@4 f#2@4", W: "g2@5 ~ g2 ~ g2@4 d2@4", X: "g1@4 ~@2 g1 ~ g1@8",
  Y: "a1@4 ~@2 a1 ~ a1@8", Z: "e2@5 ~ e2 ~ e2@7 ~", AA: "a1@5 ~ a1 ~ a1@7 ~", AB: "a1@13 ~@3",
  AC: "d1@4 ~@2 d1 ~ d1@6 ~@2", AD: "e1@4 ~@2 e1 ~ e1@7 ~", AE: "a1@4 ~@2 a1 ~ a1@6 ~@2", AF: "d2@5 ~ d2 ~ d2@4 a2@3 ~",
  AG: "d2@4 ~@2 d2 ~ d2@6 ~@2", AH: "e2@5 ~ e2 ~ e2@6 ~@2", AI: "d2@5 ~ d2 ~ d2@7 ~", AJ: "d2@3 d1 e1@2 f#1@2",
  AK: "a1@3 a1 b1@2 c#2@2", AL: "d2@5 ~ d2 ~ a2@7 ~", AM: "g1@4 ~@2 g1 ~ g1@7 ~", AN: "a1@7 ~",
  AO: "d1@4 ~@2 d1 ~ d1@4 d2@4", AP: "d1@5 ~ d1 ~ d1@4 d2@4", AQ: "d1@5 ~ d1 ~ d1@6 ~@2", AR: "[d1@5 ~@3]/2",
})).s("gm_acoustic_bass").gain(0.72)

// chords · string ensemble 2 · "SlowString"
const string_ensemble_2 = note(`<
  ~@20 A B@2 C@2 D@2 E@4 F@2 G@2 H I J K L@4 M@4 N O P@2 Q@2 R@2 B@2 C@2 S@2 E@4 F@2 G@2 H I T@6 U@4
>`.pickRestart({
  A: "~@3 [a3,c#4] [b3,d4]@2 [c#4,e4]@2", B: "[[d4,f#4]@7 [e4,g4]]/2",
  C: "[[d4,f#4]@7 ~ [c#4,e4]@16 [c#4,e4]@4 [d4,f#4]@4]/2", D: "[[e4,g4]@6 [b3,d4] [c#4,e4]]/2",
  E: "[~@20 c#5@3 ~@5 b5@2 a5@2, [d4,f#4]@15 ~@17, ~@5 a4@3 a5@6 ~@2, ~@24 d5@16 ~@8 c5@15 ~, ~@28 f#5@35 ~]/4", // D
  F: "[b5@16 a#5@15 ~, [d5,g5]]/2", G: "[g5@8 f#5 e5@5 d5@2, [e4,g4], b4@15 ~]/2", H: "[a4,c#5]@2 [b4,d5] [c#5,e5]",
  I: "[a4,c#5]@3 ~", J: "~@7 d5", K: "g5 f#5", L: "[e5@12 d5@4 [c#4,c#5]@16 [d4,f#4]@31 ~, e4 ~, [g3,b3]@16 a3@47 ~]/4",
  M: "[[g3,b3]@16 c#4@16 [d4,f#4]@22 [d4,f#4]@2 [e4,g4]@4 [f#4,a4]@3 ~, e4 ~, ~@4 a3@9 ~@3]/4", N: "[d4,g4,b4]",
  O: "[e4,a4,c#5]", P: "[g4@2 f#4@2 ~ [d4,f#4] [e4,g4] [f#4,a4], d4@19 ~@13, a4 ~]/2",
  Q: "[g4 f#4 [e4,g4]@2, b4, d4@15 ~@17]/2", R: "[[c#4,e4,a4]@19 ~ [a3,c#4]@4 [b3,d4]@4 [c#4,e4]@4]/2",
  S: "[[e4,g4]@11 [a3,c#4] [b3,d4]@2 [c#4,e4]@2]/2", // Em A Bm C#m
  T: "[~@32 d6@7 ~ a5@6 g5@2 g5@6 f#5 ~@5 c#5@2 e5 ~ e5@4 ~@4 a5@6 g5@2 g5@6 f#5 ~@5 c#5@2 e5@2, d3, ~@56 f#5@8 d6@8 ~@16 f#5@7 ~, ~@34 d5@11 ~@3]/6",
  U: "[e5@3 ~@5 a5@6 g5 ~ g5@6 f#5 ~ f#5@28 ~@12, d6@7 ~@57, ~ d5@12 ~@3]/4",
})).s("gm_string_ensemble_2").gain(0.56).pan(0.7)

// chords · acoustic guitar steel · "Steel Guit"
const acoustic_guitar_steel = note(`<
  ~ A B A C D E F G H I J@2 K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH A AI AJ E F G H I J@2 K L M AK O P Q
  R S AL AM AN AO AP AQ Z AA AB AC AR AE AF AG AH AS AT AU AT AU AT AU AV@3
>`.pickRestart({
  A: "~@4 f#4@2 d4 ~ f#4@2 d4@2 a3@2 d4 ~, d3@7 ~@9, ~ a3@3 ~@4",
  B: "~@4 a3@2 f#4@2 ~@2 a3@2 d3 ~ a3@2, [d3,g4]@3 ~@3 f#4@2, ~ d4@2 ~ d4@4", // G5
  C: "~@4 a3@2 f#4@2 ~@2 a3@2 d3 ~ a3@2, g4@2 ~ f#4, d3@3 ~@5, ~ d4@2 ~ d4@4",
  D: "~@6 b3@2 e4@2 ~@2 b3@2 e4 ~, e2@15 ~, ~@2 e3@13 ~, ~@4 g3@5 ~ g3@5 ~",
  E: "~@6 c#4@2 e4@2 ~@2 c#4@2 e4 ~, a2@15 ~, ~@2 e3@13 ~, ~@4 g3@5 ~ g3@5 ~",
  F: "~@4 d4@2 f#4@2 g4@2 f#4@2 f#4 [f#4,g4] d4@2, d3, ~ a3@3 d4@2 ~@2", // Gmaj7
  G: "~@2 d4 ~ d4 a3 [d4,f#4] a3, d3@15 ~, ~@2 a3@7 ~@7, ~@6 f#4@5 ~@5", // D
  H: "~@8 e4@2 g3@2 b3@2 g3 ~, e2, ~ e3@7, ~@4 g3@5 ~@7, ~@3 b3@2 ~@3",
  I: "~@5 g3 ~ g3, a2, ~ e3@7, ~ g3 e4 ~, ~@3 c#4@2 ~ c#4@2",
  J: "[~@3 f#4 ~@4 [d3,d4]@2 [d3,f#4]@2 [e3,g4]@2 [f#3,a4]@2, d3 ~, ~@2 a3@8 d4@4 f#4@5 ~@13, ~ d4 g4 a3 ~@4]/2", // D Em F#m
  K: "~ b3 ~ b3 ~ g3 ~ g3, [g2,g4], ~ g3 d3@2, ~@3 b3", // G
  L: "~ c#4 ~@3 g3 ~ g3, e4@15 ~, a2!2, ~ g3 ~@2, ~@3 c#4@2 ~ c#4@2",
  M: "~ d4 ~ d4 ~ d4 ~ d4, d3, g4@7 ~ f#4@8, ~@2 a3@3 ~ a3@2",
  N: "~ a3 ~ a3 ~ a3 ~ a3, [d3,d4] [d3,f#4] [e3,g4] [f#3,a4]", // D Em F#m
  O: "b4@2 g3@2 ~@2 g3@2 ~@2 g3 ~@3 g3@2, g2 f#2, ~ [b3,g4]@2 [b3,d4], ~@2 d4@3 ~@3", // Em Bm
  P: "~@7 e4, e2, ~ e3@4 g3@3, ~@2 g3@2 e4@3 ~, ~@3 b3@2 ~ b3@2",
  Q: "~@6 c#4@2 e3@2 ~@2 e3 ~ a3@2, a2, ~@2 e3@5 ~ e4@8, ~@2 a3@3 a3@2 ~, ~@3 d4",
  R: "[e3,c#4] [a2,c#4] [b2,d4] [c#3,e4]", S: "~@6 f#4@2 f#4 [f#4,g4] d4@2 ~@2 d4@2, d3, ~@2 a3@7 ~@3 a3@4, ~ d4 ~@2",
  T: "g4 f#4 ~@2 a3 ~@3 f#4@2 a3@2 [d4,g4]@2 a3@2, d3@15 ~, ~ d4@2 ~@5", // G5
  U: "~@2 a3 ~ e4 g3 ~ e4, a2@15 ~, f#4 ~@2 c#4, ~@2 g3@7 ~@7",
  V: "~@2 c#4 ~@3 f#4 a3, a2@15 ~, ~ g3@3 c#4@2 ~@2, ~@3 e4@2 g3@2 ~",
  W: "g4 ~@3 b3 ~ b3 e4, e2, ~@2 g3@7 ~ g3@5 ~, ~ b3 ~@2, ~@3 e4@2 ~@3",
  X: "~@3 e4 ~ a3 ~ a3, a2@2 [b2,d4] [c#3,e4], ~ g3@3 ~@4, ~ c#4 ~@2", // Bm C#m
  Y: "~ a3 d4 ~ d4 ~@2 d4, d3@15 ~, f#4@2 ~ f#4@2 a3@2 ~, ~@3 f#4",
  Z: "~@6 f#4@2 g4 ~@5 d4@2, d3, ~ a3@4 d4@2 ~, ~@4 d4@5 f#4@2 ~ a3@4",
  AA: "~@2 d4@2 ~@2 d4 ~@3 c#4@2 ~@2 c#4@2, [d3,f#4]!2, ~ a3 ~ a3", // D
  AB: "~ c4 ~ c4 ~@3 f#4, [d3,f#4] d3, ~@4 a3@4 ~@2 a3@5 ~, ~@3 c4", // D
  AC: "~@2 d4 ~ d4 ~@2 g4, [g2,g3], ~@2 b3@7 ~ b3@5 ~, ~@3 g4@2 ~ d4@2", // G
  AD: "~ d4 ~ d4 a#3 d4!3, g3, g2@3 [g2,a#3,g4], a#3@7 ~@9, ~@2 g4@3 ~@3", // Gm
  AE: "~@2 g3@2 ~@2 a2 ~ g4 ~ g3@2 [b3,e4]@2 [g3,g4]@2, g4@8 a2@7 ~, a2@4 [b3,e4]@5 ~@7", // E5 G E5
  AF: "f#4@2 ~@4 e2 ~@7 g3@2, e2@3 ~ e2@4, ~@2 [g3,e4]@7 ~ g3@4 ~@2, ~@2 b3@3 ~ [b3,e4]@2", // C E5
  AG: "~ g3@2 g3 ~ g3 ~ g3, a2, c#4@3 ~ d4@2 e4@2", AH: "[a2,c#4,e4]@15 ~",
  AI: "~@2 a3 d4 ~ a3 ~ [a3,d4], [d3,g4]@3 ~@3 d3@2, ~@2 d4@4 ~@2 f#4@5 ~@3", // D5 G5
  AJ: "e4@2 ~@4 b3@2 e4@2 ~@2 b3@2 e4 ~, e2@15 ~, ~@2 e3@13 ~, ~@4 g3@5 ~ g3@5 ~",
  AK: "[d3,d4] [d3,f#4] [e3,g4] [f#3,a4]", AL: "g4 f#4 ~@2 a3 ~@3 f#4@2 a3@2 [d4,f#4]@2 a3@2, d3@15 ~, ~ d4@2 ~@5",
  AM: "~@2 c#4 ~ c#4 ~@2 e4, a2@15 ~, ~@2 g3@7 ~ g3@5 ~, ~@3 e4@2 ~ c#4@2",
  AN: "~@4 c#4@2 ~@2 c#4@2 ~@2 c#4@2 e4 ~, a2@15 ~, ~@2 g3@7 ~ g3@5 ~, ~@6 e4@5 ~@5",
  AO: "~@4 b3 ~ b3 e4, e2, ~@2 g3@7 ~ g3@5 ~, ~ b3 ~@2, ~@3 e4@2 ~@3",
  AP: "~@3 e4 [b2,d4]@2 [c#3,e4]@2, a2 ~, ~ g3@3 ~@4, ~ c#4 ~@2", // Bm C#m
  AQ: "~ a3 d4 ~ d4 ~@2 d4, d3@15 ~, ~@3 f#4@2 a3@2 ~, ~@3 f#4",
  AR: "~ d4 ~ d4 a#3 d4 [g2,a#3,d4,g4]@2, g3, g2@3 ~, a#3@7 ~@9, ~@2 g4@3 ~@3", // Gm
  AS: "~@4 f#4@2 d4 ~ e4@2 d4@2 f#4@2 d4 ~, d3@7 ~@9, ~ a3@3 ~@4",
  AT: "~@4 a3@2 f#4@2 ~@2 a3@2 d3 ~ [a3,e4]@2, [d3,g4]@3 ~@3 c#4@2, ~ d4@2 ~ d4@4", // A5 G5
  AU: "e4@2 ~@2 f#4@2 d4 ~ e4@2 d4@2 f#4@2 d4 ~, d3@7 ~@9, ~ a3@3 ~@4",
  AV: "[~@4 a3@2 f#4@2 ~@2 a3@2 e4@3 ~ [a3,d4,f#4]@20 ~@12, [d3,g4]@6 ~@6 d3 ~@2 d3@21 ~@12, ~ d4@2 ~ d4@3 ~@17]/3", // D G5
})).s("gm_acoustic_guitar_steel").gain(0.56).pan(0.8)

// chords · electric guitar jazz · "Jazz  Guit"
const electric_guitar_jazz = note("<~@39 A B C@2 D E F@2 G ~ H@2 ~ I J ~@27>".pickRestart({
  A: "~ d4", B: "c#4@15 ~", C: "[~@16 d5@15 ~, ~@4 d4@27 ~, ~@8 f#4@23 ~, ~@12 a4@19 ~]/2", D: "~@3 b4, ~ e4@3, ~ g4",
  E: "c#5@3 b4", F: "[a4@18 ~@4 [d4,f#4]@2 [e4,g4]@4 [f#4,a4]@3 ~]/2", G: "[g4,b4]@7 ~",
  H: "[a4@9 ~ [d4,f#4]@2 [e4,g4]@2 [f#4,a4]@2]/2", I: "e4 g4 b4 g4", J: "a4",
})).s("gm_electric_guitar_jazz").gain(0.8).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@13 A@5 B A B A@5 B A@9 C A@9 B A@23 C A B A B A B A B C ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~ x ~", C: "x",
})).gain(0.45)

// drums · rim
const rim = s("rim").struct("<~ A@11 B C@7 D C@7 D C@7 ~ C@9 E ~@24 C@8 ~@2>".pickRestart({
  A: "~@3 x", B: "~ x!3", C: "~ x ~ x", D: "~@2 x ~@3 x!2", E: "~ x ~@2",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@46 [~@6 x!2] [~ x ~ x]!7 [~@2 x ~@3 x!2] [~ x ~ x]!15 ~@11>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<A ~@12 B@7 C D@15 ~ E@2 D@31 ~ A@8 ~@2>".pickRestart({
  A: "x!4", B: "x!2", C: "x", D: "x!8", E: "~ x ~ x",
})).gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@21 A ~@7 A ~@6 A@2 ~ A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@2 A ~@8 A ~>".pickRestart({
  A: "x",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct("<~@5 A ~@3 A ~@2 B A ~@2 B A ~@2 B ~@15 A C@2 A ~@3 A ~@3 A ~@23 C@7 D A ~>".pickRestart({
  A: "x", B: "~ x!3", C: "x!2", D: "x ~ x!2",
})).gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~ x ~ x]!35 ~ [~ x ~ x]!33 ~ [~ x ~ x]!8 ~@2>").gain(0.45)

stack(
  bass, string_ensemble_2, acoustic_guitar_steel, electric_guitar_jazz, kick, rim, snare, hihat, crash, ride, tambourine
)

More by Kenny Rogers