Strudelify
(What a) Wonderful World cover art

1970 · Louis Armstrong and His Friends

(What a) Wonderful World

Louis Armstrong

KeyF majorTempo64 bpm
0:00/0:00
// (What a) Wonderful World — ARMSTRONG LOUIS
// 64 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 39 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(64/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.

// other · tenor sax
const tenor_sax = note("<~ A B C D E F@5 G H I J K@3 L M N O@2 P Q R@3 S T@2 U@3 V@2 W@2 ~>".pickRestart({
  A: "~@10 c4 e4", B: "f4@5 a4 c5@6", C: "~@2 d5@5 ~ d5@2 d5@2 c5@12", D: "~@2 bb4@5 ~ bb4@2 bb4@2 a4@12",
  E: "~@2 g4@5 g4@2 ~ g4@2 f4@8 f4 ~ f4@2",
  F: "[f4@9 f4 ~ f4 ~ f4@14 ~@5 f4@2 f4 [f4,g4] e4@4 f4@4 g4@3 a4@36 ~@10 e4 ~ f4@10 a4@2 ~ c5@10 c5 ~, ~@47 ab4 ~@44 c4@2 ~@14 b4 ~@11]/5", // Fsus2
  G: "d5@11 d5 c5@9 ~ c5 b4", H: "bb4@8 bb4@2 bb4 a4@9 ~ a4@2 bb4", I: "g4@8 g4@2 g4 f4@8 ~ f4 ~ f4@2",
  J: "f4@8 f4 ~ f4 f4@13", K: "[~@8 f4 f4@2 ~ e4@3 f4@4 g4@3 ~ f4@27 ~@19 f4@2 ~]/3",
  L: "g4@3 g4@2 ~ g4@3 g4@2 ~ g4@3 c4@5 c4@3 ~", M: "bb4@3 a4@5 [a4,bb4] a4 ab4 a4@10 [gb4,g4] f4@2",
  N: "g4@4 g4@3 g4@2 g4@2 ~ g4@3 c4@6 g4@2 ~",
  O: "[bb4@3 a4@5 ~ ab4 ~ a4@8 ~@2 c5 ~ d5@8 ~ d5@3 e5 c5@8 a4@2 c5@2, ~@4 a4 ~@5 a4 ~@13]/2", P: "d5@8 d5@3 e5 c5@12",
  Q: "~@2 d5@2 d5@2 d5@2 c5@4 c5@11 ~",
  R: "[bb4@5 ~ a4@5 g4@6 ~@4 c4 ~ e4@2 f4@8 a4@2 c5@9 ~ c5@2 d5@9 d5@3 ~ c5@9 c5 d5 ~]/3",
  S: "bb4@7 bb4@2 ~ bb4 c5 a4@8 a4@3 [a4,bb4]", // Bbmaj7
  T: "[g4@8 g4@2 g4@2 f4@8 f4@12 f4!2 ~ f4@13, ~@8 gb4 ~ gb4 ~@9 e4 ~@27]/2",
  U: "[~@8 f4 f4@2 ~ e4@4 f4@3 g4@4 a4@42 ~ a4@3 a4@2 ab4, ~@23 ab4 ~@48]/3",
  V: "[a4@8 f4 g4 ~ f4@16 ~@5 f4@2 f4@2 e4@4 f4@3 g4@5]/2", W: "[~ f4@47]/2",
})).s("gm_tenor_sax").gain(0.48)

// bass · acoustic bass · "ACOU BASS"
const bass = note("<~@2 A B C D E F G H I J C D E K L M N O P Q R S T U I V W X Y K Z AA AB AC AD AE@2>".pickRestart({
  A: "f2@4 ~ f2 a2@4 ~ a2", B: "bb2@4 ~ bb2 a2@6", C: "g2@4 ~ g2 f2@4 ~ f2", D: "a2@4 ~ a2 d2@4 ~ d2",
  E: "db2@8 ~@2 db2@2 db2@7 ~ f2@2 db2@2", F: "c2@8 ~@2 c2@2 c2@7 ~@5", G: "f2@4 ~ f2 f2@4 ~ f2",
  H: "bb2@4 ~ bb2 c3@4 ~ c3", I: "f2@4 ~ f2 a2@5 a2", J: "bb2@4 ~ bb2 a2@5 a2", K: "c2@4 ~ c2 c2@4 e2 g2",
  L: "f2@4 ~ f2 bb2@4 ~ bb2", M: "bb2@4 ~ bb2 f2@4 ~ f2", N: "c2@8 ~@2 c2@2 c2@7 ~ e2@2 g2@2",
  O: "f2@4 ~ f2 f2@4 a2 f2", P: "c2@8 ~@2 c2@2 c2@7 ~ c2@2 g2@2", Q: "f2@7 ~ f2@2 c3@2 f2@6 f2@2 a2@2 c3@2",
  R: "d2@5 d2 e2@4 ~ e2", S: "f2@5 f2 g2@5 g2", T: "f2@4 ~ f2 gb2@5 gb2", U: "g2@5 ~ gb2@5 ~ c2@8 ~@4",
  V: "bb2@8 ~@2 bb2@2 a2@7 ~ e3@2 a2@2", W: "g2@4 d3 bb2 f2@5 f2", X: "a2@7 ~ a2@3 ~ d2@8 ~@2 d2@2",
  Y: "db2@8 ~@2 db2@2 db2@7 ~ ab2@2 f2@2", Z: "f2@5 f2 a1@4 ~ a1", AA: "d2@4 ~ d2 d2@4 gb2 a2",
  AB: "g2@8 ~@2 g2@2 g2@7 ~ a2@2 g2@2", AC: "g2@4 ~ g2 c2@4 ~@2", AD: "f2@5 f2 bb2@5 bb2", AE: "[bb2@5 bb2 f2@9 ~@9]/2",
})).s("gm_acoustic_bass").gain(0.64)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A B C D E F G H I J K L M N O P Q@2 R S T@2 U V W X Y Z AA AB@2 AC AD AE AF@2 AG@2 ~
>`.pickRestart({
  A: "a4 g4", B: "a4@12 g4@5 ~@7", C: "[f3,a3]@11 ~ [a2,e3,a3]@12", D: "[bb2,f3,bb3] [a2,e3,a3]",
  E: "[g2,f3]@11 ~ [f2,f3,a3,c4]@12", F: "[a2,g3,a3,db4]@12 [d2,f3,a3,d4]@11 ~", G: "[db2,f3,ab3,db4]@23 ~",
  H: "[g3,bb3,d4,f4]@12 [g3,bb3]@11 ~, c2@23 ~", I: "[f3,a3]@6 [f3,a3,db4]@5 ~, f2", J: "[bb2,bb3,d4,a4] [c3,g3,bb3]",
  K: "[f2,f3,a3] [a2,e3,a3,c4]", L: "[bb2,f3,bb3,d4]@11 ~ [a2,e3,a3,c4]@12", M: "[g2,f3,bb3,d4] [f2,f3,a3,c4]",
  N: "[a2,g3,a3,db4] [f3,a3,d4], ~@6 d2@5 ~", O: "[db3,f3,ab3,db4]@23 ~",
  P: "[g3,bb3,d4,f4]@11 ~ [e3,g3,bb3]@11 ~, c3@23 ~", // Gm7 Edim
  Q: "[[f2,a3]@12 [bb2,bb3,d4]@24 [a3,c4]@11 ~, f3@47 ~, ~@6 f2 ~]/2", // F Bb Am
  R: "[e3,g3,bb3]@5 ~@4 c3@3, ~@12 [c4,e4,bb4]@11 ~", S: "[f4,a4,c5]@13 ~ a5@6 ~ f5@2 ~, f3, ~@10 g5 ~",
  T: "[e5@12 d5@7 ~@5 [f4,a4,c5]@14 ~ c5@3 a4@2 ~ e4@2 ~, c3 ~, ~ [g3,g4,bb4] f3@2, ~@10 e5@3 ~@6 f5 ~@2 f4 ~]/2", // F Gm
  U: "~@3 [f4,a4]@9 e4@2 ~ [e2,c4,e4]@9, d3@13 ~@11, d4@11 ~ g4@12", V: "[d4,f4]@11 ~ [g3,c4,e4]@12, f2@3 ~@5",
  W: "[f3,d4,f4]@11 ~ [c4,gb4,a4]@12", X: "[g3,d4,g4,bb4]@6 [gb3,a4]@5 ~ [c3,e4,g4,bb4]@6 ~@6, ~@2 gb4 ~@5",
  Y: "[f3,f4,a4] [a2,e4,a4], c5", Z: "[bb2,f4,bb4,d5]@12 [a2,e4,a4,c5]@11 ~", AA: "[g3,g4,bb4,d5,f5] [f3,a4,c5,f5]",
  AB: "[[a3,db5,e5,g5]@12 [d3,a5]@12 [db5,ab5]@19 ~@5, ~@12 f5@31 ~@5, ~@12 d5@11 ~ db3@24]/2", // A7 D5 Db5
  AC: "[g4,bb4]@3 ~, c3, [d5,f5] ~", AD: "[c4,f4,a4]@5 ~ [a3,eb4,g4,a4]@6, f3 ~", AE: "[gb4,a4]@6 a4@5 ~, d3, c5@11 ~",
  AF: "[[g3,bb3,d4]@36 [c3,e4,g4,bb4,db5]@11 ~, f4 ~]/2", AG: "[[f3,a4,c5] [bb3,g4,bb4]@2 [f3,c4,a4], f4 ~]/2",
})).s("gm_synth_strings_1").gain(0.44).pan(0.9)

// drums · kick
const kick = s("bd").struct(`<
  [x!2]!18
  [x ~ x ~ x!3 ~@4 x]!7
  [x ~ x ~ x!3 ~@5]
  [x ~ x ~ x!3 ~@4 x]!9
  [x ~ x ~ x!3 ~@5]
  [x ~ x ~ x!3 ~@4 x]
  [x ~ x ~ x!6 ~@2]
  ~
>`).gain(0.45)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!32 [~@3 x!3 ~@3 x ~@2] [~@3 x!4 ~@2 x ~@2] [~ x ~ x] [~ x ~@2] [~ x ~ x]!2 ~>")
  .gain(0.45)

// drums · low tom
const low_tom = s("lt").struct("<~@25 [~@15 x!3 ~@2 x ~@3] ~@6 [~@18 x!6] ~@4 [x!7 ~@17] ~>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<A@18 B C@6 D C@7 E C F G H ~>".pickRestart({
  A: "x!12", B: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x!3 ~@7", C: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~",
  D: "x ~ x!3 ~ x ~ x ~ x ~@7 x ~@5", E: "~@3 x!4 ~@2 x!3", F: "x ~ x!3 ~ x ~ x ~ x ~@13",
  G: "~@2 x!3 ~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", H: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x!3 ~ x ~@5",
})).gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<~@25 [~@12 x!3 ~@7 x ~] ~@6 [~@13 x!5 ~@6] [~@6 x ~@6 x!5 ~@6] ~@3 [~@6 x!6 ~@12] ~>")
  .gain(0.4)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@32 [~ x]!2 ~@5>").gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@18 A B@6 C B@7 D B ~ B E ~>".pickRestart({
  A: "~@9 x!3", B: "~@9 x!2 ~", C: "~@3 x", D: "x!4 ~@5 x!2 ~", E: "~@6 x!4 ~@2",
})).gain(0.1)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@19 [~@11 x]!6 ~ [~@11 x]!9 ~ [~@11 x] ~@2>").gain(0.05)

// drums · high tom
const high_tom = s("ht").struct("<~@33 [x!3 ~@6 x ~@2] ~@3 [~@6 x!4 ~@2] ~>").gain(0.5)

// drums · crash
const crash = s("cr").struct("<~@25 A ~@7 B ~ C ~ A ~>".pickRestart({
  A: "~@3 x", B: "~ x!3", C: "~ x",
})).gain(0.5)

// drums · claves
const claves = s("clave:2").struct("<~@18 A@7 ~ A@6 ~@2 A ~ A@2 ~>".pickRestart({
  A: "~@8 x!2 ~@2",
})).gain(0.73)

stack(
  tenor_sax, bass, synth_strings_1, kick, snare, low_tom, hihat, mid_tom, mid_tom_soft, open_hat, open_hat_soft,
  high_tom, crash, claves
)

More by Louis Armstrong