Strudelify
For All We Know cover art

1971 · Carpenters

For All We Know

Carpenters

KeyG majorTempo136 bpm
0:00/0:00
// For All We Know — Carpenters
// 136 bpm, 4/4, key G 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 84 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(136/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 1"
const piano = note(`<
  A B C D E F G H I@2 J K L M N O P Q R@2 S T U V W@2 X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP B C D E F G
  H AQ@2 X Y Z AA AB AC AD AE AF AR AS AI AJ AK AL AM AN AO AP B C D E F G H AT@3 ~
>`.pickRestart({
  A: "~@3 d5 ~@3 g4, d5@3 ~ g5@4, ~@2 g4@7 ~@3 b4@4, ~@4 b4@5 ~ d5@6",
  B: "~@3 f#5 ~@3 a4, f#5@3 ~ a5@4, ~@2 a4@7 ~@3 d5@4, ~@4 d5@5 ~ f#5@6",
  C: "~@3 e5 ~@3 g4, e5@3 ~ g5@4, ~ g4@3 ~@2 c5@2, ~@2 c5@2 ~ e5@3",
  D: "~@2 d5 f#5 ~@3 a4, f#5@3 ~ a5@4, ~@2 a4@5 ~@3 f#5@6, ~@3 d5",
  E: "~@3 d5 ~@2 b4 g4, d5@6 ~@2 g5@7 ~, ~ g4@3 ~@4, ~@4 b4@4 ~@2 d5@5 ~",
  F: "~@2 d5 f#5 ~@2 d5 a4, f#5@6 ~@2 a5@7 ~, ~@2 a4@5 ~@3 f#5@5 ~",
  G: "~@2 c5 e5 ~@2 c5 g4, e5@6 ~@2 g5@7 ~, ~@2 g4@5 ~@3 e5@5 ~",
  H: "~@4 d5@2 f#5@2 ~@4 d5@2 a4 ~, f#5@6 ~@2 a5@7 ~, ~@2 a4@5 ~@3 f#5@5 ~",
  I: "[~@2 b3 ~@5 b3 ~@2 d4 ~@3 g4, g4@3 g4@3 g4@3 g4@3 g4@3 ~, ~@2 g3@5 ~ g3@6 g3@5 ~ g3@5 ~ g3@6, ~@5 b3@3 ~@6 b3@2]/2",
  J: "e4@2 ~@2 c#4@2 ~@6 e4@2 a3 ~, ~@2 a3@4 g4@9 ~, ~@4 a3@3 ~, ~@10 c#4@5 ~",
  K: "~@2 e4 ~@4 a3, g4@3 g4@3 g4@2, ~ a3@2 ~ a3@3 ~, ~@5 e4@3",
  L: "~@2 a3 c4 ~@2 e4 a3, c4@3 ~@2 a3@2 ~, ~@2 g4@5 ~ g4@7 ~",
  M: "~@6 c4@2 d#4@2 ~@2 c4@2 d#4 ~, c4@3 ~@5, ~ e4@3 ~@4, ~@4 a3@4 ~@2 g3@5 ~",
  N: "~@2 b3 ~@3 g4 g3, d4@3 g4@3 ~@2, ~ g3@2 ~ g3@3 ~, ~@10 b3@5 ~",
  O: "~@3 d4 ~@3 f#4, g4@4 f#4@3 ~, ~ g3@3 ~ f#3@3, ~ b3 ~ b3",
  P: "e4 ~ b3 g4 ~@2 e4 g3, ~@2 g3@5 ~ g3@6 ~@2, ~@10 b3@5 ~",
  Q: "~@2 b3 g4 ~@3 g3, g4@3 ~@2 b3@3, ~@2 g3@5 ~ g3@6 ~@2, ~@3 d4",
  R: "[~@2 c#4 ~ a3 c#4 ~@2 c#4 e4 ~ a3 c#4 ~ a3 c#4, g4@6 g4@4 ~@2 g4@7 ~ g4@5 ~ g4@5 ~, ~@2 a3@4 ~@8 a3@5 ~@13]/2",
  S: "~@2 c#4 ~@3 f#4 a3, f#4@3 f#4@3 ~@2, ~@2 a3@5 ~ a3@6 ~@2, ~@10 c#4@5 ~",
  T: "~@4 b3@2 ~@6 f#4@2 g3 ~, f#4@3 f#4@3 ~@2, ~ g3@2 ~ g3@3 ~, ~@10 b3@5 ~",
  U: "~@2 b3 ~@3 e4 g3, e4@3 e4@3 ~@2, ~ g3@2 ~ g3@3 ~, ~@10 b3@5 ~",
  V: "~@4 d4@2 ~@6 g4@2 a3 ~, d4@2 ~ g4@3 ~@2, ~@2 a3@5 ~ a3@6 ~@2, ~@10 d4@5 ~",
  W: "[~@2 b3 g4 ~@2 g4 g3 b3 ~@2 b3 ~@3 b3, d4@6 b5@8 b5@5 ~@13, ~@2 g3@5 ~ g3@6 ~@6 g3@4 ~@2 d4@6, ~@4 g5@8 g5@7 ~@13, ~@10 [b3,d5]@5 ~@3 g4@6 g4@4 g3@4]/2", // Bm
  X: "~@2 c#4 ~@2 a3 c#4 e4, e4@2 ~ e4@3 ~@2, ~ g3@2 ~ g3@2 ~@2", Y: "~ c#4 e4 ~ c#4 ~@2 c#4, g3@2 ~ a3@2 g4@3, ~@3 a3",
  Z: "~@2 c4 g4 ~ c4 ~ a3, g4 ~@2 e4, ~@2 a3@5 ~ a3@4 ~@4", AA: "d#4 g3 c4 ~@2 c4 ~ g3, ~@6 d#4@5 ~ d#4@4, ~@2 g3 ~",
  AB: "d4 ~ b3 g4 ~ b3 g4 g3, ~@2 g3@4 ~@2 g3@5 ~@3", AC: "~@3 g4 f#4 ~@2 f#4, g4@3 ~@5, ~ g3@3 ~ f#3@3, ~ b3 ~ b3",
  AD: "e4 ~ b3 ~@2 b3 e4 g3, ~ g3@2 g4@3 ~@2, ~@2 g3 ~", AE: "d4 ~@2 g4 g3 ~@2 g3, ~@2 g3@5 ~@5 d4@4, ~@2 b3@2 ~ b3@3",
  AF: "g4 ~ c#4 ~ [a3,c#6] [c#4,d6] e6 [a3,d6], ~@2 a3@4 g4@5 ~ g4@4", // A Dmaj7 D5
  AG: "[c#4,c#6]@2 [e4,b5]@2 a5@2 ~@2 g5 a5 [g5,a5] g5 ~@2 f#5 g5, ~@2 g4@2 c#4 g4@2 c#4, ~@6 [a3,g5]@3 ~@3 [a3,a5]@3 ~, ~@7 a5@2 ~@4 g5@2 ~", // C# E5 Gsus2 A7 A
  AH: "~@4 c#4@2 ~@2 a3@2 c#4 ~@3 a3@2, [f#4,f#5]@7 ~@5 f#4@4, ~@2 a3@4 f#4@5 ~@5", // F#
  AI: "~@2 b3 ~@2 b3 ~ g3, f#4@3 f#4@3 f#4@2, ~ g3@2 ~ g3@2 ~@2", AJ: "e4 ~ b3 e4 ~ b3 e4 g3, ~ g3@2 ~ g3@2 ~@2",
  AK: "b3 e4 ~ b3 e4 ~@2 e4, ~@2 g3@2 ~ g3@3, ~@3 b3",
  AL: "f#4 ~ a3@2 b3@2 ~@8 a3@2, ~@3 f#4@3 f#4@2, ~@4 a3@3 ~, ~@5 b3@3",
  AM: "e4 ~@2 e4 d4 ~@2 d4, ~ g3@3 ~ g3@3, ~ b3 ~ b3", AN: "e4 ~ b3 ~@4 g3, ~ g3@2 e4@3 e4@2, ~@4 g3@3 ~, ~@5 b3@3",
  AO: "d4 ~ d4 g4 a3 d4 ~ a3, ~ a3@2 ~@3 f#4@2", AP: "d5@2 g4@2 b4 ~ d5 ~@7 g4@2, ~ g5, ~@5 d5@3, ~@3 b4",
  AQ: "[~@2 b3 ~@5 b3 ~@6 g4, g4@3 g4@3 g4@3 g4@3 g4@3 ~, ~@2 g3@5 ~ g3@6 g3@4 ~@2 g3@6 g3@6, ~@5 d4@4 ~@2 d4@5, ~@7 b3]/2",
  AR: "[c#4,c#6]@2 [e4,b5]@2 a5@2 ~@2 g5 [g5,a5] a5 g5 a5 g5!2 f#5, ~@2 g4@2 c#4 g4@2 c#4, ~@6 [a3,g5]@3 ~@3 a3@3 ~, ~@7 a5@2 ~@4 a5@2 ~", // C# E5 Gsus2 A7
  AS: "g5 ~@3 c#4@2 ~@2 a3@2 c#4 ~@3 a3@2, f#4@6 f#4@5 ~ f#4@4, ~ f#5@6 ~@9, ~ a3@2 ~@5",
  AT: "[c4@16 ~@8 b5@2 c6@2 b5@2 a5@2 b5 a5 b5@13 ~, [d4,g4], ~@16 b3@29 ~@3]/3", // G5
})).s("gm_piano").gain(0.33)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  A B@2 C D E@2 F G H I J K L M N O P Q R S T U V W X I J K L M W O Y Q Z AA AB AC AD AE AF AG AH E@3 T AI E@2 AJ W X I
  J K L AK@2 O AL Q R AM T AN AO AP AF AQ AR E@3 AS AI E@2 AT AU@3 ~
>`.pickRestart({
  A: "g1@15 ~", B: "g3@7 ~", C: "g3@11 ~ d3@3 ~", D: "g1@8 g2@7 ~", E: "g2@15 ~", F: "g2@3 d3", G: "g3@5 ~ g3@2 f#3@8",
  H: "e3@5 ~ e3@2 d3@8", I: "c#3@15 ~", J: "a3 c#3", K: "c3", L: "a3 c3", M: "b2@9 ~ g3@5 ~", N: "g3@8 f#3@7 ~",
  O: "e3@3 b2", P: "d3@15 ~", Q: "c#3 a2", R: "c#2", S: "d2", T: "g2", U: "c2", V: "d2@3 d3", W: "g3 f#3", X: "e3 d3",
  Y: "d3!2", Z: "c#2@2 c#2 a2", AA: "d2@5 ~ d2 ~ d2@8", AB: "g1@5 ~ g1@2 d2@8", AC: "c2@6 c2 ~ c2@6 g2@2",
  AD: "c3@2 b2@2 g2@4 c2@7 ~", AE: "b1@5 ~ b1@6 d2@4", AF: "e2 d2", AG: "c2@5 ~ c2 ~ c2@8", AH: "d2@5 ~ d2@2 f#2@8",
  AI: "g1", AJ: "g2 ~@3 g2@10 ~@2", AK: "[b2@10 g3@14 f#3@7 ~]/2", AL: "d3", AM: "d2@3 a2", AN: "c2@7 g2",
  AO: "c3@3 ~ c3@4 g2@6 c2@2", AP: "b1@13 ~ b1@2", AQ: "c2@15 ~", AR: "d2@8 f#2@7 ~", AS: "g2 ~ g2@6", AT: "g1 g2",
  AU: "g1/3",
})).s("gm_fretless_bass").gain(0.38)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@4 A B C D E@2 ~@4 F G H@4 I J K L M@4 N@2 F O@5 P@4 Q@2 R@2 S ~@3 T U V U E@2 ~@4 W G X@4 Y@7 L Z ~@3 AA@4 AB@3 ~
>`.pickRestart({
  A: "[d4,g4,b4]", B: "[d4,f#4,a4]@3 [d4,f#4,a4]", C: "e4@11 ~ e4@4, [c4,g4]", D: "g4 a4, [d4,e4]",
  E: "[[b3,d4,g4]@3 ~]/2", F: "[g3,b3,g4]", G: "[g4,b4] [f#4,a4], d4", H: "[d4@4 c#4@3 ~, [b3,e4,g4]@7 ~]/4",
  I: "~ [f#3,a3,c#4,f#4]", J: "[g3,b3,d4,f#4]@5 ~@3", K: "~ [g3,b3,c4,e4]", L: "g4 f#4, [a3,c4,d4]",
  M: "[[g3,d4]@16 [c#4,e4]@15 ~, [b3,g4]@31 ~]/4", N: "[e4 d#4, c4]/2",
  O: "[[g4,b4] [f#4,a4] ~@4 c#4@3 ~, d4@3 ~@2, ~@2 [b3,e4,g4]@7 ~]/5", // G F#m Em
  P: "[~ [f#3,a3,c#4] [g3,d4]@2 [c4,e4,g4]@4, ~ f#4@3 ~@4, ~ b3@3]/4", Q: "[[a3,f#4] [e4,g4], [b3,d4]]/2",
  R: "[[b3,e4]@2 ~ f#4, c4, g4@3 ~, ~ [a3,d4]]/2", S: "[b3,d4,g4]", T: "[g4,b4]", U: "[f#4,a4]", V: "[e4,g4]",
  W: "~ [g3,b3,g4]", X: "[d4@16 c#4@15 ~, [b3,e4,g4]@31 ~]/4",
  Y: "[[f#3,a3,c#4]@16 [g3,d4]@16 [c4,e4,g4]@32 [a3,f#4]@15 ~ [e4,g4]@8 f#4@8 [g3,c4,e4]@16, f#4@2 ~@2 d4@2 ~, ~@16 b3@63 ~ b3@32]/7", // F#m G5 C D Em C
  Z: "[b3,d4,g4]@9 ~@7", AA: "[[g4,b4] [f#4,a4] [e4,g4] [f#4,a4], d4]/4", AB: "[c4 b3@2, [d4,g4]]/3",
})).s("gm_string_ensemble_2").gain(0.27).pan(0.4)

// chords · oboe
const oboe = note("<A B C D E F G H@2 ~@35 I J K L M F G N@2 ~@19 O B C P Q F G R S@3 ~>".pickRestart({
  A: "g4@9 ~ e4 f#4 g4@2 e4@2", B: "f#4@9 ~ d4 e4 f#4@2 d4@2", C: "e4@9 ~ c4 d4 e4@2 c4@2", D: "d4@13 ~@3",
  E: "[g4,b4]@10 [e4,g4] [f#4,a4] [g4,b4]@2 [e4,g4]@2", F: "[f#4,a4]@9 ~ [d4,f#4] [e4,g4] [f#4,a4]@2 [d4,f#4]@2",
  G: "[e4,g4]@9 ~ [c4,e4] [d4,f#4] [e4,g4]@2 [c4,e4]@2", H: "[d4@7 ~]/2", I: "g4@5 ~ g4 e4, ~@5 e4 ~@2, ~@11 f#4@2 ~@3",
  J: "f#4@9 ~ d4 ~ f#4@2 d4@2, ~@11 e4@2 ~@3", K: "e4@9 ~@2 d4 e4@2 c4@2, ~@5 c4 ~@2", L: "d4@3 ~",
  M: "[g4,b4]@9 ~ [e4,g4] a4 [g4,b4]@2 [e4,g4]@2, ~@11 f#4@2 ~@3", N: "[[d4,a4]@25 ~@7]/2", O: "g4@10 e4 f#4 g4@2 e4@2",
  P: "d4@15 ~", Q: "[g4,b4]@9 ~ [e4,g4] [f#4,a4] [g4,b4]@2 [e4,g4]@2", R: "f#4@2 e4 [c4,f#4], d4@3 ~",
  S: "[c4 b3@2, g4]/3",
})).s("gm_oboe").gain(0.33).pan(0.3)

// chords · french horn · "FR.HORN"
const french_horn = note("<~@31 A B@3 ~ C@2 D@2 E F G H@4 ~@17 I J K@2 L F G M N@2 ~@6 O@3 ~>".pickRestart({
  A: "b4 a4", B: "[g4@11 ~@5]/3", C: "[~ [a3,c#4] [b3,d4]@2, ~ f#4@3]/2", D: "[~@8 [c4,e4]@11 g4@4 ~ b4@8]/2",
  E: "a4@3 f#4", F: "g4@4 f#4 e4 f#4@2", G: "e4", H: "[d4@25 ~@7]/4", I: "~ [a3,c#4,f#4]", J: "[b3,d4,f#4]",
  K: "[~@3 b4, ~@2 c4@7 ~@7, ~ e4@3, ~ g4]/2", L: "a4@3 f#4, f#4@11 ~@5", M: "d4@15 ~", N: "d4/2", O: "g3/3",
})).s("gm_french_horn").gain(0.33).pan(0.9)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x!2 ~@3]!80 x ~@3>").gain(0.33)

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

stack(piano, bass, string_ensemble_2, oboe, french_horn, kick, hihat)

More by Carpenters