Strudelify

Who Put the Bomp (In the Bomp, Bomp, Bomp)

Barry Mann

KeyG minorTempo160 bpm
0:00/0:00
// Who Put the Bomp (In the Bomp, Bomp, Bomp) — Barry Mann
// 160 bpm, 4/4, key G minor. 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 75 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/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 · "Sax (Melody Doubled)"
const tenor_sax = note(`<
  A B@2 C@2 D@3 E F G H I J K H I J L M N O P Q R S@2 T U V W T X Y@2 Z AA AB AC AD AE AF@2 H I J K H I J L M N O P Q R
  S@2 T U V W T X Y@2 Z AA AB AC AD AE AF@2
>`.pickRestart({
  A: "~@12 f3@3 ~", B: "[f3@3 ~ a3@3 c4@3 ~ eb4@3 d4@14 ~@4]/2", C: "[d4@3 ~ d4@3 c4@3 ~ bb3@14 ~@3 bb3@3 ~]/2",
  D: "[bb3@3 ~ a3@3 g3@6 ~ g3@6 ~ a3@6 ~ bb3@6 ~@2 d4@6 ~ c4@5]/3", E: "~@2 c4@11 ~@3",
  F: "[d3,f3,bb3]@3 ~ [d3,f3,bb3]@2 [d3,f3,bb3]@2 [d3,f3,bb3]@3 ~ [bb2,d3,f3]@2 [bb2,d3,f3]@2", // Bb
  G: "[bb2,d3,g3]@3 ~ [bb2,d3,g3]@2 [bb2,d3,g3]@3 ~ [bb2,d3,g3]@2 [c3,eb3,a3]@3 ~", // Gm Adim
  H: "bb3@3 ~ bb3@2 bb3@2 bb3@3 ~ f3@2 f3@2", I: "g3@3 ~ g3@2 g3@3 ~ g3@2 g3@3 ~",
  J: "eb3@3 ~ eb3@2 eb3@2 eb3@3 ~ eb3@2 eb3@2", K: "f3@2 f3@2 f3@2 f3@2 g3@3 ~ f3@3 ~",
  L: "f3@3 ~ f3@2 g3@3 ~ g3@2 f3@3 ~", M: "f3@6 ~@2 f3@3 ~ f3@3 ~", N: "gb3@10 ~@2 d4@3 ~",
  O: "d4@3 ~ c4@3 ~ bb3@3 ~ c4@3 ~", P: "db4@2 c4@2 bb3@6 ~@2 c4@3 ~", Q: "d4@3 ~ d4@3 ~ d4@3 ~ bb3@3 ~",
  R: "eb4@3 ~ c4@3 ~ bb3@3 ~ a3@3 ~", S: "[bb3@5 ~@3]/2", T: "d3@3 ~ f3@3 ~ f3@3 ~ f3@3 ~", U: "g3@13 ~@3",
  V: "g3@3 ~ g3@2 g3@2 g3@3 ~ g3@2 a3@2", W: "~@2 a3@2 a3@3 ~ a3@6 ~@2", X: "g3@3 ~ bb3@3 ~ c4@3 ~ d4@3 ~",
  Y: "[d4@6 ~@2 c4@16 ~@4 f3@3 ~]/2", Z: "d4@3 ~ d4@3 ~ d4@3 ~ d4@3 ~", AA: "c4@3 ~ bb3@10 ~@2",
  AB: "bb3@3 ~ bb3@2 bb3@5 ~ bb3@2 db4@2", AC: "~@2 db4@2 db4@2 db4@2 c4@3 ~ bb3@4", AD: "~@4 d4@3 ~ d4@3 ~ d4@3 ~",
  AE: "c4@3 ~ bb3@3 ~ a3@3 ~ c4@3 ~", AF: "[c4@3 ~ bb3@6 ~@6]/2",
})).s("gm_tenor_sax").gain(0.29).pan(0.3)

// chords · piano
const piano = note(`<
  A B@3 C D E F@2 G H G I J K L M N O P Q J R S T U V W X Y@2 L M Z AA AB I AC AD AE AF AG AH AI AJ AK AL AM AN AC K W
  AO AC AP AQ AR AS AT G AN AU@2 G AV AC K AM AV AC AW AX T AY AZ
>`.pickRestart({
  A: "~ [c4,eb4,f4,a4]@5 f3@2", // F7
  B: "[[c4,eb4,f4,a4]@5 ~@2 [c4,eb4,f4,a4]@2 ~@5 [bb3,d4,f4]@27 ~@2 [g3,bb3,d4]@2 ~ [g3,bb3,d4]@2]/3", // F7 Bb Gm
  C: "~@5 [g3,bb3,d4]@11", D: "~@11 [bb3,c4,eb4,g4]@3 ~@2", E: "~@2 c3@3 [bb3,c4,eb4,g4]@4 ~@3 [bb3,c4,eb4,g4]@2 ~@2",
  F: "[~@4 [c4,eb4,g4,a4]@10 f3@4 [c4,eb4,g4,a4]@5 ~@2 [c4,eb4,g4,a4]@2 ~@5]/2", // Am7b5
  G: "[bb3,d4,f4] ~ [bb3,d4,f4] ~@3 [bb3,d4,f4]@6 ~@4", H: "[g3,bb3,d4]@4 [bb3,c4,eb4,g4]@7 ~ [c4,eb4,f4,a4]@4",
  I: "[g3,bb3,d4] ~ [g3,bb3,d4] ~@3 [g3,bb3,d4]@6 ~@4", J: "[g3,bb3,eb4]@15 ~",
  K: "[c4,eb4,f4,a4] ~ [c4,eb4,f4,a4] ~@3 [c4,eb4,f4,a4]@6 ~@4", // F7
  L: "~@2 [f3,bb3,d4]@2 ~@2 bb2@2 [f3,bb3,d4]@2 ~@2 [f3,bb3,d4] ~@3", M: "g3@8 g3@2 bb3@2 d4@2 g4 ~, [bb3,d4]@5 ~@3",
  N: "[g3,bb3,eb4]@6 eb3@2 [g3,bb3,eb4]@3 ~ [g3,bb3,eb4] ~@3", O: "f4@8 f4@2 a4@2 c5@2 f5 ~, [c4,eb4,a4]@5 ~@3",
  P: "~@2 [bb3,d4,f4]@2 ~@2 bb2@2 [bb3,d4,f4]@2 ~@2 [bb3,d4,f4] ~@3", // Bb
  Q: "[c4,d4,gb4,a4] ~ [c4,d4,gb4,a4] ~@3 [c4,d4,gb4,a4]@6 ~@4", R: "[bb3,db4,e4,g4]@15 ~",
  S: "~@2 [f3,bb3,d4]@4 ~@2 [g3,bb3,d4]@7 ~", T: "~ [g3,c4,eb4]@2 ~@2 [c4,eb4,f4,a4]@2 ~",
  U: "bb3@4 ~@2 f4 bb4, f4@3 ~, d4@5 d4@2 ~, ~@4 bb3@3 ~", V: "[bb3,d4,f4] ~ [bb3,d4,f4] ~@3 [bb3,d4,f4]@8 ~@2",
  W: "bb3@8 bb3@2 d4@2 f4@2 bb4 ~, [f3,d4]@5 ~@3", X: "~@2 [bb3,d4,g4]@2 ~@2 g2@2 [bb3,d4,g4]@2 ~@2 [bb3,d4,g4] ~@3",
  Y: "[[g3,bb3,eb4] ~ [g3,bb3,eb4] ~@3 [g3,bb3,eb4]@6 ~@2 [c4,eb4,f4,a4]@17 ~]/2", // Eb F7
  Z: "eb4@8 eb4@2 g4@2 bb4@2 eb5 ~, [g3,bb3]@5 ~@3", // Gm
  AA: "~@2 [c4,eb4,f4,a4]@2 ~@2 f3@2 [c4,eb4,f4,a4]@2 ~@2 [c4,eb4,f4,a4] ~@3", // F7
  AB: "[f3,bb3,d4]@6 bb2@2 [f3,bb3,d4]@3 ~ [f3,bb3,d4] ~@3", AC: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~@3 [g3,bb3,eb4]@6 ~@4",
  AD: "~ [db4,eb4,g4,a4]@2 ~@2 [bb3,db4,eb4,g4]@2 ~", AE: "~ [f3,bb3,d4]@2 ~@2 [bb3,d4,g4]@2 ~",
  AF: "[g3,c4,eb4]@7 ~@3 [c4,eb4,f4,a4]@4 ~@2", AG: "[bb3,d4,f4]@10 bb2@2 [bb3,d4,f4]@3 ~",
  AH: "[bb3,d4,f4]@2 [bb3,d4,f4] ~@3 [bb3,d4,f4]@8 ~@2", AI: "bb3@8 bb3@2 d4@2 f4@2 bb4 ~, [d4,f4]@5 ~@3",
  AJ: "[d4,g4,bb4]@15 ~", AK: "~@2 [g3,bb3,eb4]@2 ~@2 eb3@2 [g3,bb3,eb4]@2 ~@2 [g3,bb3,eb4] ~@3",
  AL: "[c4,eb4,f4,a4]@6 f3@2 [c4,eb4,f4,a4]@3 ~ [c4,eb4,f4,a4] ~@3", // F7
  AM: "[bb3,d4,f4]@6 bb2@2 [bb3,d4,f4]@3 ~ [bb3,d4,f4] ~@3", AN: "[g3,bb3,d4]@15 ~",
  AO: "d4@8 d4@2 gb4@2 a4@2 d5 ~, [c4,gb4,a4]@5 ~@3", AP: "[db4,e4,g4,bb4]@15 ~", AQ: "[bb3,d4,f4]@7 ~ [g3,bb3,d4]@7 ~",
  AR: "[g3,c4,eb4]@7 ~ [c4,eb4,f4,a4]@7 ~", AS: "[f3,bb3,d4]@4 ~ [f3,bb3,d4]@2 ~", AT: "[f3,bb3,d4]@5 ~ [f3,bb3,d4] ~",
  AU: "[[g3,bb3,eb4]@14 f4@10 f4@2 a4@2 c5@2 f5 ~, ~@7 [c4,eb4,a4]@6 ~@3]/2", // Eb Adim
  AV: "[d4,g4,bb4]@6 g2@2 [d4,g4,bb4]@3 ~ [d4,g4,bb4] ~@3", AW: "[db4,eb4,g4,a4]@7 ~@3 [bb3,db4,eb4,g4]@4 ~@2",
  AX: "[f3,bb3,d4]@7 ~ [g3,bb3,d4]@7 ~", AY: "[f3,bb3,d4] ~ [f3,bb3,d4] ~@3 [f3,bb3,d4]@6 ~@4",
  AZ: "[bb3,d4,f4]@7 ~ [bb3,d4,f4]@4 ~@4", // Bb
})).s("gm_piano").gain(0.45).pan(0.9)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A@6 B@2 C D E F G H E F G I E J G K L M N O E P Q@2 E R S T E U V@2 L M W O E F G H E F G I E J G K L M N O E P Q@2
  E R S T E U V@2 L M W X
>`.pickRestart({
  A: "[[f3,eb4]@13 ~@8 f3@6 ~ d4@11 ~@11 d3@6 ~ bb3@11 ~@3 [c3,bb3]@23 ~@2, ~@14 bb2@26 ~@3 g2@26 ~@27]/6", // F7 C7
  B: "[~@4 a3@23 ~@5]/2", C: "bb2@3 ~ bb2@3 ~", D: "g2@4 ~@2 c3@5 ~ f2@3 ~", E: "bb2 ~ bb2 ~",
  F: "g2@4 ~@2 g2@5 ~ g2@3 ~", G: "eb2 ~ eb2 ~", H: "f2 ~ f2 ~", I: "f2@4 ~@2 f2@5 ~ f2@3 ~", J: "a2 ~ d2 ~",
  K: "e2@4 ~@4 e2@3 ~ e2@3 ~", L: "f2 ~ g2 ~", M: "c3 ~ f2 ~", N: "bb2@3 ~ f3@2 g3@3 ~ g3@2 f3@3 ~",
  O: "bb2@3 ~ f3@2 eb3@3 ~ d3@2 c3@3 ~", P: "g2@4 ~@2 g2@5 ~ f2@3 ~", Q: "[eb2@4 ~@4 eb2@3 ~ eb2@2 f2@11 ~@3 f2@3 ~]/2",
  R: "g2 ~ g2 ~", S: "eb2@3 ~ bb2@3 ~ eb3@3 ~ g3@3 ~", T: "f3@3 ~ f2@2 g2@3 ~ g2@2 a2@3 ~", U: "g2@4 ~@4 g2@3 ~ f2@3 ~",
  V: "[eb2@4 ~@2 eb2@5 ~ eb2@2 f2@8 ~@2 eb2@6 ~@2]/2", W: "bb2@3 ~ f3@6 ~@2 f3@3 ~", X: "bb2@2 g3@3 ~ f3@2 bb2@4 ~@4",
})).s("gm_electric_bass_finger").gain(0.58).pan(0.1)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@58 [~@7 x] ~@16>").gain(0.64)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@18 [~@12 x!4] ~@39 [~@3 x ~ x!2 ~] ~@16>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@12 A ~ A ~ A ~@3 A ~@2 B A ~@7 A ~@5 A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ C ~ A ~@3 A ~@10
>`.pickRestart({
  A: "~@7 x", B: "~@15 x", C: "~@2 x ~@4 x",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@58 [~ x] ~@16>").gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@11 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@5 A ~>".pickRestart({
  A: "x",
})).gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@9 A ~@2 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A
  ~@2
>`.pickRestart({
  A: "~@3 x",
})).gain(0.72)

stack(tenor_sax, piano, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, tambourine)