Strudelify

(What a) Wonderful World

Sam Cooke

KeyB♭ majorTempo132 bpm
0:00/0:00
// (What a) Wonderful World — Sam Cooke
// 132 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · acoustic bass
const bass = note(`<
  A B A C D E A C D E A F A F G H I C D E A C D E A J A J G K L M L N O N P Q A C D E A C D E A F A F G H I C D E A C D
  E A J A J G R@2
>`.pickRestart({
  A: "bb2@3 bb2@4 ~", B: "g2@3 g2@4 ~", C: "g2@3 g2@2 bb2 g2 f2", D: "eb3@3 eb3 bb2@2 eb3@2", E: "f2@3 f2 c3@2 f2 a2",
  F: "eb2@2 ~ eb2 bb2@2 eb3@2", G: "f2@3 f2 c3@2 f2@2", H: "bb2@3 g2 f2 g2 f2 d2", I: "bb1@3 bb2@4 ~",
  J: "eb3@2 ~ eb3 bb2@2 eb3@2", K: "bb2@3 g2 f2 g2 f2@2", L: "c3@3 f2 c3@2 f3@2", M: "bb2 bb2@2 f2@3 bb2@2",
  N: "bb2 bb2@2 f2@3 bb2 b2", O: "c3@3 c2 c3!2 c2@2", P: "c3@3 c3@2 g2 c2@2", Q: "f2 f2@2 g2 f2 eb2 d2 c2",
  R: "[bb2 eb2 bb2@6]/2",
})).s("gm_acoustic_bass").gain(0.45)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B A B C D A B C D A C A C D A@2 B C D A B C D A C A C D A D A D A E A E D A B C D A B C D A C A C D A@2 B C D A B C
  D A C A C D F@2
>`.pickRestart({
  A: "bb3 ~ bb3 d4 f4 ~ bb4 ~ f4 ~ d4 ~ bb3@2 d4 ~", B: "g3 ~ g3 bb3 d4 ~ g4 ~ d4 ~ bb3 ~ g3@2 bb3 ~",
  C: "eb3 ~ eb3 g3 bb3 ~ eb4 ~ bb3 ~ g3 ~ eb3@2 g3 ~", D: "f3 ~ f3 a3 c4 ~ f4 ~ c4 ~ a3 ~ f3@2 a3 ~",
  E: "c4 ~ c4 e4 g4 ~ c5 ~ g4 ~ e4 ~ c4@2 e4 ~", F: "[bb3 ~ eb4 ~ [d3,f3,bb3]@12]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.3).pan(0.4)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon_2 = note(`<
  A B A B C D A B E D A E A E D A@2 B C D A B E D A E A E D A F G F G H I H F A B C D A B E D A E A E D A@2 B C D A B E
  D A E A E D J@2
>`.pickRestart({
  A: "[d3,f3,bb3]@2 [d3,f3,bb3] ~ [d3,f3,bb3] ~ [d3,f3,bb3]@8 ~@2", // Bb
  B: "[d3,g3,bb3]@2 [d3,g3,bb3] ~ [d3,g3,bb3] ~ [d3,g3,bb3]@8 ~@2", // Gm
  C: "[eb3,bb3]@2 [eb3,g3,bb3] ~ [eb3,g3,bb3] ~ [eb3,g3,bb3]@8 ~@2", // Eb5 Eb
  D: "[f3,a3,c4]@2 [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4]@8 ~@2", // F
  E: "[eb3,g3,bb3]@2 [eb3,g3,bb3] ~ [eb3,g3,bb3] ~ [eb3,g3,bb3]@8 ~@2", // Eb
  F: "[f3,a3,c4]@2 [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4]@3 ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~", // F
  G: "[f3,bb3,d4]@2 [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4]@3 ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~", // Bb
  H: "[e3,bb3,c4]@2 [e3,bb3,c4] ~ [e3,bb3,c4] ~ [e3,bb3,c4]@3 ~ [e3,bb3,c4] ~ [e3,bb3,c4] ~ [e3,bb3,c4] ~", // C7
  I: "[d3,f3,bb3]@2 [f3,bb3] ~ [d3,f3,bb3] ~ [d3,f3,bb3]@3 ~ [d3,f3,bb3] ~ [d3,f3,bb3] ~ [d3,f3,bb3] ~", // Bb Bb5 Bb
  J: "[[d3,f3,bb3] ~ [eb3,g3,bb3] ~ [d3,f3,bb3]@12]/2", // Bb Eb Bb
})).s("gm_acoustic_guitar_nylon").gain(0.35).pan(0.6)

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

// drums · snare
const snare = s("sd").struct(`<
  A B A B A C A B A C A B A B A C A B A C A B A C A B A B A C A@7 D A B A B A B A C A B A C A C A E A@3 C A C E A E C A
  F ~
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x!2 ~@4", C: "x ~ x ~ x ~ x ~ x!5 ~ x ~", D: "x!5 ~ x ~ x!5 ~ x ~", E: "x!6 ~@2",
  F: "x!3 ~",
})).gain(0.45)

// drums · clap
const clap = s("cp").struct(`<
  A B A B A C A B A C A B A B A D A B A C A B A C A B A B A D A@5 C A C A B A B A B A C A B A D A D A B A E A D A E B A
  B C A F ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@6 x!2 ~ x ~", C: "~@2 x ~@3 x!2", D: "~@2 x ~@4 x", E: "~ x ~@2", F: "~ x!2 ~",
})).gain(0.45)

stack(bass, acoustic_guitar_nylon, acoustic_guitar_nylon_2, kick, snare, clap)

More by Sam Cooke