Strudelify

The Kwek Kwek Song

Talk of the Town

KeyA majorTempo142 bpm
0:00/0:00
// The Kwek Kwek Song — Talk of the Town
// 142 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(142/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~ A@2 B C@3 D E@2 F G C@2 H I@2 C D J C@3 D E@2 F G C@2 H I@2 C D K L@2 M@3 N O@2 M P M@3 N O@2 M Q C@3 D E@2 F G C@2
  H I@2 C D J I C D J C R C R S T S U
>`.pickRestart({
  A: "~@2 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~", // A
  B: "a2@2 [e4,a4,c#5] ~ e2@2 [e4,a4,c#5] ~ a2 ~ [e4,a4,c#5] ~ f#2 ~ [e4,a4,c#5] ~, ~@5 e2 ~ g#2", // A
  C: "a1@2 [e4,a4,c#5] ~ e1@2 [e4,a4,c#5] ~ a1@2 [e4,a4,c#5] ~ e1@2 [e4,a4,c#5] ~", // A
  D: "e1@2 [e4,g#4,b4] ~ b1@2 [e4,g#4,b4] ~ e1@2 [e4,g#4,b4] ~ b1@2 [e4,g#4,b4] ~", // E
  E: "e1@2 [e4,g#4,b4,d5] ~ b1@2 [e4,g#4,b4,d5] ~ e1@2 [e4,g#4,b4,d5] ~ b1@2 [e4,g#4,b4,d5] ~", // E7
  F: "e1@2 [e4,g#4,b4,d5] ~ e1@2 [e4,g#4,b4,d5] ~ f#1@2 [e4,g#4,b4,d5] ~ g#1@2 [e4,g#4,b4,d5] ~", // E7
  G: "a1@2 [e4,a4,c#5] ~ g#1@2 [e4,a4,c#5] ~ f#1 ~ [e4,a4,c#5] ~ f#1 ~ [e4,a4,c#5] ~, ~@5 e1 ~ g#1", // A
  H: "a1@2 [e4,g4,a4,c#5] ~ a1@2 [e4,g4,a4,c#5] ~ b1@2 [e4,g4,a4,c#5] ~ c#2@2 [e4,g4,a4,c#5] ~", // A7
  I: "d2@2 [f#4,a4,d5] ~ a1@2 [f#4,a4,d5] ~ d2@2 [f#4,a4,d5] ~ a1@2 [f#4,a4,d5] ~", // D
  J: "a1@2 [e4,a4,c#5] ~ g#1@2 [e4,a4,c#5] ~ f#1@2 [e4,a4,c#5] ~ e1@2 [e4,a4,c#5] ~", // A
  K: "a1@2 [e4,a4,c#5] ~ e1@2 [e4,a4,c#5] ~ f#1@2 [e4,f#4,a#4,c#5] ~ a#1@2 [e4,f#4,a#4,c#5] ~", // A F#7
  L: "[b1,b3,d4,f#4,b4] ~ [b1,b3,d4,f#4,b4] ~", // Bm
  M: "b1@2 [f#4,b4,d5] ~ f#1@2 [f#4,b4,d5] ~ b1@2 [f#4,b4,d5] ~ f#1@2 [f#4,b4,d5] ~", // Bm
  N: "e1@2 [g4,b4,e5] ~ b1@2 [g4,b4,e5] ~ e1@2 [g4,b4,e5] ~ b1@2 [g4,b4,e5] ~", // Em
  O: "f#1@2 [e4,f#4,a#4,c#5] ~ c#2@2 [e4,f#4,a#4,c#5] ~ f#1@2 [e4,f#4,a#4,c#5] ~ c#2@2 [e4,f#4,a#4,c#5] ~", // F#7
  P: "e1@2 [g4,b4,e5] ~ b1@2 [g4,b4,e5] ~ f#1@2 [e4,f#4,a#4,c#5] ~ c#2@2 [e4,f#4,a#4,c#5] ~", // Em F#7
  Q: "e1@2 [g#4,b4,d5,e5] ~ b1@2 [g#4,b4,d5,e5] ~ e1 ~ [g#4,b4,d5,e5] ~ f#1 ~ [g#4,b4,d5,e5] ~, ~@5 e1 ~ g#1", // E7
  R: "a1@2 [e4,a4,c#5] ~ e1@2 [e4,a4,c#5] ~ a1 ~ [e4,a4,c#5] ~ f#1 ~ [e4,a4,c#5] ~, ~@5 e1 ~ g#1", // A
  S: "a1@3 ~ e1@3 ~ a1@3 ~ e1@3 ~", T: "a1@3 ~ e1@3 ~ a1 ~ e1@2 f#1 ~ g#1@2",
  U: "[e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@7, a1 ~ a1 ~ a1 ~@3", // A
})).s("gm_piano").gain(0.35)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@4 A@3 B@3 C D A@2 E F@2 A B G A@3 B@3 C D A@2 E F@2 A B H I@2 J@3 B K@2 J L J@3 B K@2 J M A@3 B@3 C D A@2 E F@2 A B
  G F A B G A N A N A N A O
>`.pickRestart({
  A: "a1@3 ~ e1@3 ~ a1@3 ~ e1@3 ~", B: "e1@3 ~ b1@3 ~ e1@3 ~ b1@3 ~", C: "e1@3 ~ e1@3 ~ f#1@3 ~ g#1@3 ~",
  D: "a1@3 ~ g#1@3 ~ f#1 ~ e1@2 f#1 ~ g#1@2", E: "a1@3 ~ a1@3 ~ b1@3 ~ c#2@3 ~", F: "d2@3 ~ a1@3 ~ d2@3 ~ a1@3 ~",
  G: "a1@3 ~ g#1@3 ~ f#1@3 ~ e1@3 ~", H: "a1@3 ~ e1@3 ~ f#1@3 ~ a#1@3 ~", I: "b1 ~ b1 ~",
  J: "b1@3 ~ f#1@3 ~ b1@3 ~ f#1@3 ~", K: "f#1@3 ~ c#2@3 ~ f#1@3 ~ c#2@3 ~", L: "e1@3 ~ b1@3 ~ f#1@3 ~ c#2@3 ~",
  M: "e1@3 ~ b1@3 ~ e1 ~ e1@2 f#1 ~ g#1@2", N: "a1@3 ~ e1@3 ~ a1 ~ e1@2 f#1 ~ g#1@2", O: "a1 ~ a1 ~ a1 ~@3",
})).s("gm_fretless_bass").gain(0.4)

// chords · banjo
const banjo = note(`<
  ~@3 A@4 B C@3 A@3 D E@2 A B A@4 B C@3 A@3 D E@2 A B F ~@2 G@3 H I@2 G J G@3 H I@2 G K A@3 B C@3 A@3 D E@2 A B A E A B
  A@3 ~@5 L
>`.pickRestart({
  A: "~@2 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~", // A
  B: "~@2 [e4,g#4,b4] ~@3 [e4,g#4,b4] ~@3 [e4,g#4,b4] ~@3 [e4,g#4,b4] ~", // E
  C: "~@2 [e4,g#4,b4,d5] ~@3 [e4,g#4,b4,d5] ~@3 [e4,g#4,b4,d5] ~@3 [e4,g#4,b4,d5] ~", // E7
  D: "~@2 [e4,g4,a4,c#5] ~@3 [e4,g4,a4,c#5] ~@3 [e4,g4,a4,c#5] ~@3 [e4,g4,a4,c#5] ~", // A7
  E: "~@2 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~", // D
  F: "~@2 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,f#4,a#4,c#5] ~@3 [e4,f#4,a#4,c#5] ~", // A F#7
  G: "~@2 [f#4,b4,d5] ~@3 [f#4,b4,d5] ~@3 [f#4,b4,d5] ~@3 [f#4,b4,d5] ~", // Bm
  H: "~@2 [g4,b4,e5] ~@3 [g4,b4,e5] ~@3 [g4,b4,e5] ~@3 [g4,b4,e5] ~", // Em
  I: "~@2 [e4,f#4,a#4,c#5] ~@3 [e4,f#4,a#4,c#5] ~@3 [e4,f#4,a#4,c#5] ~@3 [e4,f#4,a#4,c#5] ~", // F#7
  J: "~@2 [g4,b4,e5] ~@3 [g4,b4,e5] ~@3 [e4,f#4,a#4,c#5] ~@3 [e4,f#4,a#4,c#5] ~", // Em F#7
  K: "~@2 [g#4,b4,d5,e5] ~@3 [g#4,b4,d5,e5] ~@3 [g#4,b4,d5,e5] ~@3 [g#4,b4,d5,e5] ~", // E7
  L: "[e4,a4,c#5] ~@3 [e4,a4,c#5] ~@3 [e4,a4,c#5] ~@7", // A
})).s("gm_banjo").gain(0.17).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A@17 B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A C
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x!3 ~",
})).gain(0.64)

// drums · clap
const clap = s("cp").struct("<[x!4]!36 [~ x ~ x]!2 [x!4]!43 [x!3 ~]>").gain(0.48)

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

// drums · hihat
const hihat = s("hh").struct("<~@2 A@2 B@32 C@2 A@3 D A@3 E A@3 D A@3 E B@20 A@7 F>".pickRestart({
  A: "x!8", B: "x!4", C: "x!2", D: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", E: "x!5 ~ x ~", F: "x!3 ~",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@4 [~ x ~ x ~ x ~ x]!32 ~@9 [~@5 x ~ x] ~@7 [~@5 x ~ x] [~ x ~ x ~ x ~ x]!20 ~@8>")
  .gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@7 A ~@7 A ~@7 A ~@7 B@2 ~@8 A ~@7 A ~@7 A ~@11 A ~@6 C>".pickRestart({
  A: "x", B: "~ x ~ x", C: "x!3 ~",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@4
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!32
  [~ x ~ x]!18
  [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2]!20
  ~@7
  [x!3 ~]
>`).gain(0.48)

// drums · ride
const ride = s("rd").struct("<~@54 [~ x]!20 ~@8>").gain(0.72)

// drums · whistle
const whistle = s("ballwhistle:1").struct("<~ A ~ A ~@7 B ~@7 B ~@7 B ~@25 B ~@7 B ~@7 B ~@3 B ~@8>".pickRestart({
  A: "x!4", B: "~ x!3",
})).gain(0.62)

// drums · whistle
const whistle_2 = s("ballwhistle:0").struct("<~@36 [x!2]!2 ~@43 [x!3 ~]>").gain(0.62)

// drums · guiro
const guiro = s("guiro:4").struct("<~@20 [x!4]!16 [x!2]!2 [x!4]!43 [x!3 ~]>").gain(13.52)

stack(piano, bass, banjo, kick, clap, snare, hihat, open_hat, crash, tambourine, ride, whistle, whistle_2, guiro)

More by Talk of the Town