Strudelify
(What a) Wonderful World cover art

1970 · Louis Armstrong and His Friends

(What a) Wonderful World

Louis Armstrong

KeyF majorTempo70 bpm
0:00/0:00
// (What a) Wonderful World — Louis Armstrong
// 70 bpm, 4/4, key F 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: duplicate parts dropped: ch 8 tenor sax (copy of ch 4 "Melody" tenor sax); ch 9 "Don Carroll" acoustic guitar nylon (copy of ch 1 "Arpegio Guitar" acoustic guitar nylon); ch 11 "Houston, Texas" string ensemble 1 (copy of ch 2 "Strings" string ensemble 1)
// note: Full arrangement: all 39 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/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 · acoustic guitar nylon · "Arpegio Guitar"
const acoustic_guitar_nylon = note(`<
  A B C D E F G H I J C K L M G H N O P Q R Q S T U V C D E F G H W X Y Z AA AB ~
>`.pickRestart({
  A: "f3 a3 c4 f4 c4 a3 f3 bb3 d4 g4 d4 bb3", B: "f3 a3 c4 f4 c4 a3 f3 bb3 d4 g4 e4 c4",
  C: "f3 a3 c4 f4 c4 a3!2 c4 e4 a4 e4 c4", D: "f3 bb3 d4 f4 d4 bb3 e3 a3 c4 e4 c4 a3",
  E: "f3 bb3 d4 g4 d4 bb3 f3 a3 c4 f4 c4 a3", F: "e3 a3 db4 e4 db4 a3 d3 f3 a3 d4 a3 f3",
  G: "db3 ab3 db4 f4 db4 ab3 db3 ab3 db4 f4 db4 ab3", H: "c3 g3 bb3 d4 bb3 g3 c3 g3 bb3 c4 bb3 g3",
  I: "f3 a3 c4 f4 c4 a3 f3 a3 db4 f4 db4 a3", J: "f3 bb3 d4 f4 d4 bb3 c3 e3 g3 c4 g3 e3",
  K: "f3 bb3 d4 f4 d4 bb3 a3 c4 e4 a4 e4 c4", L: "g3 bb3 d4 f4 d4 bb3 f3 a3 c4 f4 c4 a3",
  M: "a3 db4 e4 a4 e4 db4 d3 f3 a3 d4 a3 f3", N: "f3 a3 c4 f4 c4 a3 f3 bb3 d4 f4 d4 bb3",
  O: "f3 a3 c4 f4 c4 a3 f3 a3 c4 f4 c4 a3", P: "c3 bb3 c4 e4 c4 a3 c3 bb3 c4 e4 c4 g3",
  Q: "f3 c4 f4 a4 f4 c4 f3 c4 f4 a4 f4 c4", R: "c3 bb3 c4 e4 c4 bb3 c3 bb3 c4 e4 c4 bb3",
  S: "~ [d3,d4]!2 [d3,d4]@3 ~ [e3,e4]!2 [e3,e4]@3", T: "~ [f3,f4]!2 [f3,f4]@3 ~ [g3,g4]!5",
  U: "d3 f3 a3 c4 a3 f3 gb3 a3 c4 eb4 c4 a3", V: "g3 bb3 d4 g4 d4 bb3 c3 e3 g3 c4 g3 e3",
  W: "f3 c4 f4 a4 f4 c4 a3 c4 eb4 g4 eb4 c4", X: "d4 gb4 a4 c5 a4 gb4 d4 gb4 a4 c5 a4 gb4",
  Y: "g3 bb3 d4 g4 d4 bb3 g3 bb3 d4 g4 d4 bb3", Z: "c4 e4 g4 c5 g4 e4 c4 e4 g4 c5 g4 e4",
  AA: "f3 c4 f4 a4 f4 c4 f3 bb3 d4 g4 d4 bb3", AB: "f3 c4 f4 c5 a4 c4 f3@6",
})).s("gm_acoustic_guitar_nylon").gain(0.45).pan(0.9)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A@2 B C D E F G H I B C D J F G K L M N M N O@2 P Q B C D J F G R S T@2 U N ~
>`.pickRestart({
  A: "[a4,c5,f5] [bb4,d5,f5]", B: "[a4,c5,f5] [a4,c5,e5]", C: "[bb4,d5,f5] [a4,c5,e5]", D: "[f4,bb4,d5] [f4,a4,c5]",
  E: "[g4,db5,e5] [f4,a4,d5]", F: "[ab4,db5,f5]", G: "[g4,c5,e5] [g4,bb4,e5]", H: "[f4,a4,c5] [f4,a4,db5]",
  I: "[a4,bb4,d5] [g4,bb4,e5]", J: "[g4,db5,e5] [a4,d5,f5]", K: "[f4,a4,c5] [f4,bb4,d5]", L: "[f4,a4,c5]",
  M: "[g4,bb4,e5]", N: "[a4,c5,f5]", O: "[a4,d5,f5] [g4,c5,e5]", P: "[a4,d5,f5] [a4,c5,gb5]",
  Q: "[bb4,d5,f5] [a4,c5,gb5] [g4,bb4,e5]@2", R: "[a4,c5,f5] [g4,c5,eb5]", S: "[gb4,a4,c5]",
  T: "[[f4,bb4,d5]@3 [e4,bb4,db5]]/2", U: "[f4,a4,c5] [g4,bb4,d5]",
})).s("gm_string_ensemble_1").gain(0.18).pan(0.8)

// bass · fretless bass · "Bass"
const bass = note("<A@2 B C D E F G H I B C D E J K A L G L G L M@2 N O B C D E F G B P Q G A R ~>".pickRestart({
  A: "f1 bb1", B: "f1 a1", C: "bb1 a1", D: "g1 f1", E: "a1 d2", F: "db2@5 f2 ab2@3 f2@2 ab2", G: "c2@5 e2 g2@3 e2@2 g2",
  H: "f1!2", I: "bb1@2 c2 g1", J: "db2@10 f2@2 ab2@6 f2@3 ~ ab2@2", K: "c2@10 e2@2 g2@6 e2@3 ~ g2@2",
  L: "f1@5 a1 c2@3 a1@2 c2", M: "d2 c2", N: "f1 gb1", O: "g1 gb1 c2@2", P: "d2@5 gb2 a2@3 gb2@2 a2",
  Q: "g1@5 bb1 d2@3 bb1@2 d2", R: "f1",
})).s("gm_fretless_bass").gain(0.4).pan(0.4)

// chords · acoustic guitar steel · "Rhythm Guitar"
const acoustic_guitar_steel = note(`<
  A@2 B C D E F G H I B C D E F G A J K L K M N O P Q B C D E R G S T U G A V ~
>`.pickRestart({
  A: "f2 [a3,c4,f4] bb2 [bb3,d4,f4]", B: "f2 [a3,c4,f4] a2 [a3,c4,e4]", C: "bb2 [bb3,d4,f4] a2 [a3,c4,e4]",
  D: "g2 [g3,bb3,d4] f2 [a3,c4,f4]", E: "a2 [g3,db4,e4] d3 [a3,d4,f4]",
  F: "~@5 f3 ab3@3 ab3@2 ab3, db3@5 ~@4 f3 ~@2, ~ [ab3,db4,f4] ~ [db4,f4]", // Db
  G: "~@5 e3 g3@3 [e3,g3]@2 g3, c3@5 ~@7, ~ [g3,c4,e4] ~ [c4,e4]", H: "f2 [a3,c4,f4] f2 [a3,db4,f4]",
  I: "bb2 [bb3,d4,f4] c3 [g3,c4,e4]", J: "~@5 a2 c3@3 a2@2 c3, f2@5 ~@7, ~ [a3,c4,f4] ~ [a3,c4,f4]",
  K: "~@5 e3 g3@3 e3@2 g3, c3@5 ~@7, ~ [c4,e4,g4] ~ [c4,e4,g4]", // C
  L: "~@5 a2 c3@3 a2@2 c3, f2@5 ~@7, ~ [c4,f4,a4] ~ [c4,f4,a4]", // F
  M: "~@5 a2 c3@3 a2@2 c3, f2 ~@2, ~ [c4,f4,a4] ~ [c4,f4,a4]", N: "d3 [d4,f4,a4] e3 [e4,g4,c5]",
  O: "f3 [f4,a4,d5] g3 [g4,c5,e5]", P: "d3 [f4,a4,d5] gb3 [gb4,a4,c5]", Q: "g3 [g4,bb4,d5] c3 [e4,g4,c5]",
  R: "~@5 f3 ab3@3 [f3,ab3]@2 ab3, db3@5 ~@7, ~ [ab3,db4,f4] ~ [db4,f4]", S: "f2 [a3,c4,f4] a2 [a3,c4,eb4]",
  T: "~@5 gb3 a3@3 [gb3,a3]@2 a3, d3 ~@2, ~ [a3,d4,gb4] ~ [d4,gb4]", // Gbm D
  U: "~@5 bb2 d3@3 bb2@2 d3, g2 ~@2, ~ [bb3,d4,g4] ~ [bb3,d4,g4]", V: "f2 c3 [f2,a3,c4,f4]@2",
})).s("gm_acoustic_guitar_steel").gain(0.15).pan(0.6)

// other · string ensemble 1 · "String fill"
const string_ensemble_1_2 = note("<~@9 [~@12 c4 b3 c4 d4 e4 f4 g4 a4 bb4 c5 d5 e5] f5 ~@28>")
  .s("gm_string_ensemble_1").gain(0.55)

// drums · kick
const kick = s("bd").struct("<[x!2]!38 ~>").gain(0.36)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!37 [~ x ~@2] ~>").gain(0.6)

// drums · hihat
const hihat = s("hh").struct("<[x!12]!37 [x!3 ~ x!3 ~@5] ~>").gain(0.42)

// drums · crash
const crash = s("cr").struct("<~@37 [~ x] ~>").gain(0.36)

stack(
  acoustic_guitar_nylon, string_ensemble_1, bass, acoustic_guitar_steel, string_ensemble_1_2, kick, rim, hihat, crash
)

More by Louis Armstrong