Strudelify

Try A Little Kindness

Glen Campbell

KeyE majorTempo174 bpm
0:00/0:00
// Try A Little Kindness — Glen Campbell
// 174 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): STEEL GTR.
setcpm(174/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 · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B A B A B A B C D E F G H I J K D L@2 M N O P Q R S T U V W X Y Z AA AB AC AD AE A B A B A B A B C D E F G H I J K D
  L@2 M N O P Q R S T U V W X Y Z AA AB AC AD AE A B A B Q R S T U V W X Y Z AA AB AC AD AE A B A B AF ~
>`.pickRestart({
  A: "~@7 e3, e3@4 e3@3 ~, ~@2 e4@3 e4@3, ~@3 b3@3 b3@2",
  B: "~@4 e3@3 ~ [a3,d4,f#4]@3 ~ [a3,c#4,e4]@4, e4@7 ~@9, ~@2 b3@5 ~@9", // D A
  C: "[e4,g#4,b4] ~@3 e4@4 ~@4 g#4@2 b4@2, e3@6 ~@2 e3@7 ~, ~@2 [g#4,b4]@3 e4@2 ~", // E G#m
  D: "a3@2 e4@2 ~@2 a4 c#5, ~@2 [a4,c#5]@3 e4@2 ~, ~ a3", // A
  E: "[e4,g#4,b4]@2 ~@2 [e4,g#4,b4]@4 ~@2 e4 ~ [g#4,b4]@4, e3@3 ~ e3@3 ~, ~@12 e4 ~@3", // E G#m
  F: "~@4 [e4,g#4,b4]@4 ~@2 e4@2 [g#4,b4]@3 ~, e3@3 ~ e3@4", // E G#m
  G: "~@4 [b4,d#5,f#5]@4 ~@2 b4@2 [d#5,f#5]@3 ~, b3@3 ~ b3@4", // B D#m
  H: "a3@2 e4@2 ~@3 c#5, ~@2 [a4,c#5]@3 e4@3, ~ a3, ~@3 a4", // A
  I: "~@4 e4@4 ~@2 e4 ~ b4@2 g#4 ~, e3@3 ~ e3@4, ~@2 [g#4,b4]@3 ~@3", // G#m
  J: "e3@4 [e4,g#4,b4]@4 ~@2 e4 ~ [e4,g#4,b4] ~ [e4,g#4,b4]@2, ~@8 e3@7 ~", // E
  K: "~@2 e4@2 ~@2 g#4 b4, e3@3 ~ e3@4, ~@2 [g#4,b4]@3 e4@2 ~", // G#m
  L: "[e3@4 [e4,g#4,b4]@4 e3 ~ e3@2 ~@4 e3@4 e4@4 ~@4 g#4@2 b4@2, ~@12 [e4,g#4,b4]@7 ~ [g#4,b4]@6 e4@5 ~, ~@3 e3]/2", // E G#m
  M: "b3@2 [b4,d#5,f#5]@2 ~@3 f#5, ~ b3, ~@10 b4@5 ~, ~@3 d#5", N: "~ [e4,a4,c#5] a3 [e4,a4,c#5], a3 ~",
  O: "e3@4 e4@4 ~@2 e4@2 g#4 ~ b4@2, ~@2 [g#4,b4]@3 ~@3, ~@8 e3@7 ~", // G#m
  P: "e3@4 [e4,g#4,b4] ~@3 [e3,e4,g#4,b4] ~@3 [e3,e4,g#4,b4] ~@3", // E
  Q: "b3@2 d#4@2 ~@3 b4, ~@4 [f#4,b4]@6 d#4@5 ~, ~@4 b3@3 ~, ~@3 f#4", // B5
  R: "b3@2 d#4@2 ~@2 f#4 b4, ~@2 [f#4,b4]@3 d#4@2 ~, ~ b3", S: "~@2 [e4,a4,c#5]@2 ~@2 a4 c#5, a3@3 ~ a3@4, ~@5 e4@2 ~",
  T: "e3@2 [e4,g#4,b4]@2 ~ e4 g#4 b4, ~ e3", U: "~@2 [e4,a4,c#5]@2 ~ e4 a4 c#5, a3@3 ~ a3@4",
  V: "~@2 [e4,g#4,b4]@2 ~@2 [e4,g#4,b4] ~, e3@3 ~ e3@3 ~", W: "~ [d#4,f#4,b4] ~ [d#4,f#4,b4], b3@13 ~@3",
  X: "b3@4 [d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4] ~@3 [b3,d#4,f#4,b4]@2 ~@2", // B
  Y: "~ e4 ~ c#5, a3@3 ~ a3@3 ~, ~@2 [a4,c#5]@3 e4@2 ~, ~@6 a4 ~", // A
  Z: "~@2 e4@2 ~@2 a4 c#5, a3@3 ~ a3@4, ~@4 [a4,c#5]@6 e4@5 ~", // A
  AA: "e3@4 e4@4 ~@2 e4@2 [g#4,b4]@3 ~, ~@2 [g#4,b4]@3 ~@3, ~ e3", // G#m
  AB: "~@2 c#4@2 ~ c#4 [e4,g#4] ~, c#3@3 ~ c#3@3 ~, ~@2 [e4,g#4]@3 ~@3", // E
  AC: "a3@2 [a4,c#5,e5]@2 ~@2 c#5 e5, ~@8 a3@7 ~, ~@10 a4@5 ~", // A
  AD: "~@2 b4@2 ~@2 d#5 f#5, b3@3 ~ b3@4, ~@4 [d#5,f#5]@6 b4@5 ~", // D#m
  AE: "~@4 [a4,c#5,e5]@2 ~@2 b3@4 [b4,d#5,f#5]@3 ~, a3@3 ~@5", AF: "[b3,e4,g#4]",
})).s("gm_acoustic_guitar_steel").gain(0.38).pan(0.7)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@8 A B C D E F C G A H C D E I C A J K I L M N O P Q R S T H E U V@4 W X W X A B C D E F C G A H C D E I C A J K I L
  M N O P Q R S T H E U V@4 J K I L M N O P Q R S T H E U V@4 Y ~
>`.pickRestart({
  A: "e2@3 ~ b1@3 ~", B: "a1@6 ~@2 e2@4 a1@3 ~", C: "e2@5 ~ e2 ~ b1@6 ~@2", D: "e2@6 ~@2 b1@7 ~",
  E: "b1@4 ~@2 b1 ~ f#2@3 ~ b1@2 ~@2", F: "a1@6 ~@2 e2@4 a1 ~@3", G: "e2@4 ~@2 e2 ~ b1@6 ~@2",
  H: "a1@4 ~@2 a1 ~ e2@3 ~ a1@2 ~@2", I: "a1@5 ~ a1 ~ e2@3 ~ a1@2 ~@2", J: "b1@5 ~ b1 ~ f#2@4 b1@3 ~",
  K: "b1@4 ~@2 b1 ~ f#2@4 b1@2 ~@2", L: "e2@5 ~ e2 ~ b1@3 ~ e2@2 ~@2", M: "a1@5 ~ a1 ~ e2@6 ~@2",
  N: "e2@4 ~@2 e2 ~ b1@2 ~@2 e2@3 ~", O: "b1@5 ~ b1 ~ f#2@7 ~", P: "b1@3 ~ f#2 ~ b1 ~", Q: "a1@7 ~ e2@7 ~",
  R: "a1@6 ~@2 e2@3 ~ a1@2 ~@2", S: "e2@6 ~@2 b1@5 ~@3", T: "c#2@3 ~ g#1@2 c#2 ~", U: "a1@3 ~ b1@3 ~",
  V: "[e2@20 ~@2 e2 ~ d2@3 ~ c#2@2 ~@2]/2", W: "e2@3 ~@5", X: "~@6 e2 ~ d2@3 ~ c#2@2 ~@2", Y: "e1",
})).s("gm_acoustic_bass").gain(0.38)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel_2 = note("<A@8 ~@31 A@8 ~@31 A@4 ~@15 A@4 ~@2>".pickRestart({
  A: "[b3@23 ~@9]/2",
})).s("gm_acoustic_guitar_steel").gain(0.44).pan(0.3)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  ~@23 A ~ B C D C E F A C G E H C I J E ~@5 K@2 L C M N B O P Q L C M N B O P A ~ B C D C E F A C G E H C I J E ~ E A ~
  B C D C E F A C G E H C I J E ~ K@2 L ~
>`.pickRestart({
  A: "~@4 [e4,g#4,b4] ~@3 [e4,g#4,b4] ~@3 [e4,g#4,b4] ~@3", B: "~@4 [f#4,b4] ~@5 [f#4,b4] ~@5", C: "[e4,a4,c#5]",
  D: "~@4 [e4,g#4,b4] ~@3 [e4,f#4,a4] ~ [e4,g#4,b4] ~@5", E: "[e4,g#4,b4]", F: "[d#4,f#4,g#4,b4]",
  G: "~@4 [e4,a4,c#5] ~@5 [e4,a4,c#5] ~@5", H: "[e4,g#4,c#5]", I: "[f#4,b4,d#5]", J: "[e4,a4,c#5] [f#4,b4,d#5]",
  K: "[[b4,e5]@23 ~ [a4,d5]@4 [g#4,c#5]@4]/2", L: "[e4,b4]", M: "~@4 [e4,g#4,b4] ~@5 [e4,g#4,b4] ~@5",
  N: "[e4,g#4,b4]@15 ~", O: "[e4,a4]@7 ~", P: "[e4,g#4]", Q: "~@2 [e4,g#4] ~ [d4,f#4] [e4,g#4] ~@2",
})).s("gm_brass_section").gain(0.44).pan(0.8)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@4 A@2 B@2 C D@3 E F G@2 H D@3 E F G@2 I@2 J K L M N@2 O@2 P Q R S T U V@2 W X@2 Y@2 C D@3 E F G@2 H D@3 E F G@2 I@2
  J K L M N@2 O@2 P Q R S Z A@4 I@2 J K L M N@2 O@2 P Q R S Z A@4 AA ~
>`.pickRestart({
  A: "[e6@23 ~ d6@4 c#6@4]/2", B: "[e6@21 ~@3 d6@2 c#6@2 b5@2 g#5@2]/2", C: "[e4,b4,e5]@7 ~",
  D: "[[e4,a4]@15 [e4,g#4]@31 ~@2]/3", E: "[f#4,b4]@3 [f4,a#4]", F: "[e4,a4]", G: "[[e4,g#4]@29 ~@3]/2",
  H: "[e4,b4]@7 ~", I: "[b5@9 ~ b5 c#6 d#6 b5 c#6 d#6]/2", J: "c#6", K: "b5@15 ~", L: "[c#6,a6]",
  M: "[e6,b6]@3 [g#5,e6]", N: "[[b5,f#6]@15 ~]/2", O: "[[e5,a5]@15 ~]/2", P: "[e5,g#5]@15 ~", Q: "[c#5,g#5]@7 ~",
  R: "[a4,c#5]@15 ~", S: "[b4,d#5]@7 ~", T: "[a4,c#5]@7 ~ [b4,d#5]@6 ~@2", U: "[b4,e5] ~",
  V: "[~@8 b2 e3 g#3 b3 e4 g#4 b4 e5@12 ~@5]/2", W: "~@7 g#3 b3 e4 g#4 b4 e5 g#5 ~ b5", X: "[e6@22 ~@2 d6@4 c#6@3 ~]/2",
  Y: "[e6@11 ~ d6@2 c#6@2]/2", Z: "[a4,c#5]@7 ~ [b4,d#5]@8", AA: "[e5,b5]",
})).s("gm_string_ensemble_1").gain(0.33).pan(0.3)

// drums · kick
const kick = s("bd").struct("<A B A B A@36 B A B A@36 B A B A@16 B A B C ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~ x ~", C: "x",
})).gain(0.49)

// drums · snare
const snare = s("sd").struct("<~@4 A@19 B A@7 B A@7 ~@4 A@19 B A@7 B A@7 ~@3 B A@7 B A@7 ~@6>".pickRestart({
  A: "~ x ~ x", B: "~ x!3",
})).gain(0.49)

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

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

stack(acoustic_guitar_steel, bass, acoustic_guitar_steel_2, brass_section, string_ensemble_1, kick, snare, hihat, crash)

More by Glen Campbell