Strudelify
Teach Your Children cover art

1970 · Deja Vu

Teach Your Children

Crosby, Stills & Nash

KeyD majorTempo156 bpm
0:00/0:00
// Teach Your Children — Crosby, Stills & Nash
// 156 bpm, 4/4, key D major. Source: mcgill + 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 112 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(156/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 · electric bass finger · "BASS"
const bass = note(`<
  ~ A B C D A E F G H I J K H L M N H I J K H L M N H I J K H L M N H I J K H L M N H O C P H Q R S T U H V W X Y Z M U
  H I J K H L M N H I J K H L M N H I J K H L M N H I J K H L M N H O C P H Q R S T U AA@2 W X AB AC H AD@4
>`.pickRestart({
  A: "d2@7 ~ a1@7 ~", B: "d2@7 ~ e2@3 ~ f#2@3 ~", C: "g2 d2", D: "g1@8 g2@7 ~", E: "d2@8 c#2@4 b1@3 ~", F: "a1 e2",
  G: "a2@3 ~", H: "d2@8 a1@7 ~", I: "d2@2 a1 e2", J: "g1 d2", K: "g2@4 d2@2 g2 ~", L: "d2@2 c#2 b1", M: "a1@8 e1@7 ~",
  N: "a1@7 ~ b1@4 c#2@3 ~", O: "d2@7 ~ e2@3 ~ f#2@2 ~@2", P: "g1@8 g2@4 f#2@3 ~", Q: "d2@6 ~@2 d2@4 c#2@3 ~",
  R: "b1@8 f#1@7 ~", S: "b1@8 f#1@3 ~ b1@3 ~", T: "g1@2 d2 g2", U: "a1@13 ~@3", V: "d2@4 a1@2 d2 ~", W: "g1@7 ~ d2@7 ~",
  X: "g2@8 g1@7 ~", Y: "d2 a1", Z: "d2@7 ~ c#2@4 b1@3 ~", AA: "[d2@7 ~]/2", AB: "d2@7 ~ a1@5 ~@3", AC: "a1@4 e1@2 a1 ~",
  AD: "[d2@3 ~ a1@3 ~ d2@51 ~@5]/4",
})).s("gm_electric_bass_finger").gain(0.33)

// chords · piano
const piano = note(`<
  ~ A@2 B@2 C@2 D E F@2 G@2 H@2 I J F@2 G@2 H@2 I J F@2 G@2 H@2 I J F@2 G@2 H@2 I J K L M N O P Q@2 R S T@2 U@2 V W X E
  F@2 G@2 H@2 I J F@2 G@2 H@2 I J F@2 G@2 H@2 I J F@2 G@2 H@2 I J K L M N O P Q@2 R S Y@2 U@2 Z AA AB AC@4
>`.pickRestart({
  A: "[[d3,f#3,a3,d4]@3 ~]/2", B: "[~@4 [g3,b3,d4]@19 ~ [g2,a3,d4]@7 ~, g2@11 ~@5]/2",
  C: "[~@4 [f#3,a3,d4]@19 ~@9, d3@23 ~@9]/2", D: "~@12 [b3,e4] ~@3, a2@13 ~@3, ~@4 [a3,c#4,e4]@9 ~@3, ~@11 e3@2 ~@3",
  E: "[a2,a3,c#4,e4]@13 ~@3", F: "[~@4 [d4,a4]@23 ~ e4 ~@3, d3@23 ~@9, ~@4 f#4@21 ~@7]/2",
  G: "[~@2 [b3,d4]@9 ~@5, g2@11 ~@5, ~ g3@4 ~@3]/2", // Bm
  H: "[~@4 [d4,f#4,a4]@15 ~ [d4,e4,a4]@7 ~ [d4,f#4] ~@3, d3@13 ~@3]/2", I: "~ [a3,c#4,e4]@3, a2",
  J: "~@4 [b3,e4]@7 ~ [a2,a3,c#4,e4] ~@3", K: "~ [a3,d4,f#4]@3, d3", L: "d2@3 ~",
  M: "~@4 [g3,b3,d4]@7 ~ [g3,b3,d4] ~@3, g2@11 ~@5", N: "~@12 [a3,d4]@3 ~, g2@15 ~",
  O: "~@4 [f#3,a3,d4]@8 [f#3,a3,d4]@3 ~, d3@3 ~", P: "~@4 [f#3,a3,d4]@8 [f#3,a3,d4]@3 ~",
  Q: "[b2@4 [b3,d4,f#4]@8 [b3,d4,f#4]@8 b3@8 b3@3 ~, ~@20 [d4,f#4]@11 ~]/2", // Bm D
  R: "~@4 d4@8 [a3,d4]@3 ~, g2@15 ~, ~@4 [g3,b3]@11 ~", S: "[a2,a3,c#4]@13 ~@3",
  T: "[~@4 [a3,d4,f#4]@8 [a3,d4,f#4]@6 ~@2 [a3,d4,f#4]@6 ~@2 [a3,d4,f#4] ~@3, d3@7 ~@9]/2", // D
  U: "[~@4 [g3,b3,d4]@6 ~@2 [g3,b3,d4]@6 ~@2 [g3,b3,d4]@7 ~ [g3,a3,d4]@2 ~@2, g2@3 ~@5]/2", // G Gsus2
  V: "~@4 [d3,f#3,a3,d4]@7 ~ [d3,f#3,a3,d4]@4", W: "~@4 [d3,a3,d4,f#4]@7 ~ [a3,d4,f#4] ~@3",
  X: "~@4 [a2,a3,c#4,e4]@7 ~ [b3,e4]@2 ~@2, ~@11 e3@2 ~@3", Y: "[[d2,a3,d4,f#4]@27 ~ [d2,a3,d4,f#4] ~@3]/2",
  Z: "~@4 [d4,f#4,a4]@7 ~ [d4,e4,a4] ~@3, d3@3 ~", AA: "~@4 [a3,c#4,e4]@7 ~ [b3,e4] ~@3, a2@13 ~@3",
  AB: "~@4 [d4,f#4,a4]@8 d4@3 ~, d3", AC: "[a3 ~@3 [d3,d4,e4,a4] ~@3 [d3,d4,f#4,a4]@42 ~@14]/4",
})).s("gm_piano").gain(0.34).pan(1)

// drums · hihat
const hihat = s("hh").struct("<[x ~@3 x ~@3 x ~@3 x!2 ~@2] [~ x ~ x]!7 ~ [~ x ~ x]!99 ~@4>").gain(0.38)

// drums · open hat
const open_hat = s("oh").struct("<[~@11 x ~@3 x] ~@111>").gain(0.38)

stack(bass, piano, hihat, open_hat)

More by Crosby, Stills & Nash