Strudelify

Wild Wild West

Will Smith

KeyE♭ minorTempo107 bpm
0:00/0:00
// Wild Wild West — Will Smith
// 107 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 7 tremolo strings (copy of ch 8 contrabass)
// note: Full arrangement: all 91 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(107/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.

// bass · fretless bass
const bass = note(`<
  A B C D E F C D E F C D E ~ G H E F C D E F C D E F I J K L C D E ~ C D E F G H E F C D E F C D E F C D E F M N O ~ M
  N O ~ C D E F I J K L C D E F C D E F G H E F C D E F C D E F P
>`.pickRestart({
  A: "~@4 eb2@2 ~@2 gb2@3 ~ ab2@2 ~@2 gb2@4 ab2@2 ~@2 bb2@2 ~@2 db3@2 ~@2",
  B: "eb3@3 ~ eb2@2 ~@2 gb2@2 ~@2 ab2@2 ~@2 gb2@2 ~@2 ab2@2 ~@2 bb2@2 ~@2 db3@2 ~@2",
  C: "eb1@8 eb2@4 eb1@7 ~ eb1@4 gb1@4 ab1@4", D: "eb1@8 eb2@4 eb1@5 ~ eb1@5 ~ gb1@4 ab1@4",
  E: "eb1@4 eb2@2 eb1@3 ~ eb1@2 gb1@2 ab1@2", F: "eb1@8 eb2@4 eb1@6 ~@2 eb1@4 gb1@4 ab1@3 ~", G: "gb2@31 ~",
  H: "ab2@16 bb2@13 ~@3", I: "eb1@2 eb2 bb1 ab1 ~@3", J: "~ eb1@7 eb2@4 bb1@4 ab1@4 ~@12",
  K: "eb1@7 eb2@5 bb1@4 ab1@3 ~@13", L: "~ eb1@7 eb2@4 bb1@5 ab1@3 bb1@5 db2@3 eb2@4", M: "eb2@5 eb1@11 ~@16",
  N: "~ eb2@4 eb1@12 ~@15", O: "eb2@2 eb1@7 ~@7", P: "eb1@25 ~@7",
})).s("gm_fretless_bass").gain(0.45)

// chords · percussive organ
const percussive_organ = note(`<
  A B C D E F G@2 H I G@2 H ~ G@2 J K G@2 H I G@2 H ~ L@2 M N G@2 H ~ G@2 H O P@2 Q ~ G@2 H I R G@2 H I G@2 H S ~@7 G@2
  H I L@2 M N R G@2 H I G@2 H T@2 J U L@2 J U L@2 J U V
>`.pickRestart({
  A: "~@4 eb4@3 ~ gb4@3 ~ bb4@3 ~ ab4@3 ~ bb4@3 ~ ab4@3 gb4 eb4@2 ~ db4",
  B: "eb4@3 ~ eb4@3 ~ gb4@3 ~ bb4@2 ~@2 ab4@2 ~@2 bb4@2 ~@2 ab4@2 gb4 ~ eb4@2 [bb3,db4]@2", // Bbm
  C: "eb4@3 ~ eb3@2 ~@2 [gb3,eb4,gb4]@4 ab3@3 [eb4,gb4] bb3@3 ~ ab3@3 eb4 [bb3,gb4]@2 ~ ab4 ab3@3 db4, ~@3 gb4@2 ~@7 eb4 ~@6 [eb4,gb4]@3 ~@5 eb4@2 ~@3, ~@4 ab4 ~@27", // Ebm
  D: "[eb3,eb4]@3 ~ eb3@2 ~@2 [eb4,gb4]@4 ab3@2 ~@2 bb3@2 ~ eb4 [ab3,eb4,gb4]@3 ~ bb3@2 ~@2 db4@3 ~, ~@3 gb4@2 ~@3 gb3@2 ~@22, ~@4 ab4 ~@7 eb4 ~@2 [eb4,gb4]@2 ~@7 eb4 ~@2 [eb4,gb4]@4 ~", // Eb Ebm Ab7 Ebm
  E: "eb4@2 eb4@2 [gb4,bb4] ~@3 [gb3,eb4]@3 [gb4,bb4] ab3@2 ~@2 [bb3,f4,ab4]@3 [eb4,gb4] ab3@2 ~ eb4 [bb3,ab4] bb3 ~@2 gb4@2 eb3@2, ~@4 eb3@2 ~@9 eb4@2 ~@11 db4 ~@3", // Gb Ebm Gb Bb7 Ebm Bb7
  F: "~@2 bb3@2 [bb3,db4]@2 ~@2 bb3@2 [bb3,db4]@2 ~@2 bb3@2 [f3,ab3,c4]@2 ~ bb3@2 ~@2 c4@3 ~ [gb3,bb3,db4]@4 db4, ~@2 gb3@2 ~ gb3@2 ~@2 gb3 ~ [f3,ab3]@2 ~@3", // Bbm Fm Gb Fm
  G: "[eb4@3 ~ eb3@2 ~@2 [gb3,eb4,gb4]@4 ab3@3 [eb4,gb4] bb3@3 ~ ab3@3 eb4 [bb3,gb4]@2 ~ ab4 db4@3 eb4@3 ~@2 eb3@2 ~@2 [eb4,gb4]@4 ab3@2 ~@2 bb3@2 ~ eb4 [ab3,eb4,gb4]@3 ~ bb3@2 ~@2 db4@3 ~, ~@3 gb4@2 ~@7 eb4 ~@6 [eb4,gb4]@3 ~@5 eb4@2 ~@2 bb3 ~@4 ab4 ~@7 eb4 ~@2 [eb4,gb4]@2 ~@7 eb4 ~@2 [eb4,gb4]@4 ~, ~@4 ab4 ~@30 gb4@2 ~@3 gb3@2 ~@22]/2", // Ebm Ab7 Ebm
  H: "eb4@2 eb4@2 [gb4,bb4] ~@3 [gb3,eb4]@2 ~ [gb4,bb4] ab3@2 ~@2 [bb3,f4,ab4]@3 [eb4,gb4] ab3@2 eb4 ~ [bb3,ab4] bb3 ~@2 gb4@2 eb4@2, ~@4 eb3@2 ~@4 eb3@2 ~@2 bb3@2 ~@12 db4 ~@3, ~@15 eb4@2 ~@3 gb4 ~@11", // Gb Ebm Gb Bb7 Ebm Bb7
  I: "~@4 [bb3,db4,bb4]@2 ~@2 ab4@2 ~ gb4 ab4@2 ~@2 [f3,ab3,c4,bb4]@2 ~@2 ab4@2 ~@2 gb4@2 ~@2 ab4 ~ eb4 db4, ~@4 gb3@3 gb4@2 ~ gb3@4 ~@4 gb3@2 ~@2 [f3,ab3]@4 ~ [gb3,bb3,db4]@4 ~, ~@10 [bb3,db4]@2 ~@7 bb3@2 ~@2 c4@3 ~@6", // Bbm Fm Gb Bbm
  J: "~@2 eb4@2 [gb4,bb4] ~@3 [gb3,eb4]@2 ~ [gb4,bb4] ab3@2 ~@2 [bb3,f4,ab4]@3 [eb4,gb4] ab3@2 eb4 ~ [bb3,ab4] bb3 ~@2 gb4@2 eb4@2, ~@4 eb3@2 ~@4 eb3@2 ~@2 bb3@2 ~@12 db4 ~@3, ~@15 eb4@2 ~@3 gb4 ~@11", // Gb Ebm Gb Bb7 Ebm Bb7
  K: "~@4 [bb3,db4,bb4]@2 ~@6 [gb3,bb3,db4,bb4]@2 ~@6 [gb3,bb3,db4,bb4]@2 ~@9 db4, ~ gb3 ~@6", // Bbm Gb
  L: "~@4 db4@2 [eb4,gb4]@3 ~ db4@2 [eb4,gb4]@3 ~ c4@3 ~@13", // Ebm
  M: "~@3 db4@2 ~ [eb4,gb4]@3 ~ db4@2 [eb4,gb4]@3 ~ c4@3 ~@13", // Ebm
  N: "~@3 db4@2 [eb4,gb4]@3 ~ db4@3 [eb4,gb4]@4 c4@2 ~@13 db4", // Ebm
  O: "~@4 [bb3,db4,bb4]@2 ~@2 ab4@2 ~ gb4 ~@20, ~@4 gb3@3 gb4@2 ~ gb3@4 ~@18, ~@5 [bb3,db4] ~@10", // Bbm
  P: "[eb4@3 ~ eb3@2 ~@2 [gb3,eb4,gb4]@4 ab3@3 [eb4,gb4] bb3@3 ~ ab3@3 eb4 [bb3,gb4]@2 ~ ab4 db4@3 eb4@3 ~@2 eb3@2 ~@2 [eb4,gb4]@4 ab3@2 ~@2 bb3@2 ~@6 bb3@2 ~@2 db4@3 ~, ~@3 gb4@2 ~@7 eb4 ~@14 eb4@2 ~@2 bb3 ~@4 ab4 ~@7 eb4 ~@2 [eb4,gb4]@2 ~@7 eb4 ~@2 [eb4,gb4]@4 ~, ~@4 ab4 ~@30 gb4@2 ~@3 gb3@2 ~@22]/2", // Ebm
  Q: "~@2 eb4@2 [gb4,bb4] ~@3 [gb3,eb4]@2 ~ [gb4,bb4] ab3@2 ~@2 [bb3,f4,ab4]@3 [eb4,gb4] ab3@2 eb4 ~ ab4 bb3 ~@2 gb4@2 eb4@2, ~@4 eb3@2 ~@4 eb3@2 ~@2 bb3@2 ~@12 db4 ~@3, ~@15 eb4@2 ~@3 gb4 ~@11", // Gb Ebm Gb Bb7 Ebm
  R: "~@31 db4",
  S: "~@4 [bb3,db4,bb4]@2 ~@2 ab4@2 ~ gb4 ab4@2 ~@2 [f3,ab3,c4,bb4]@2 ~@2 ab4@2 ~@2 gb4@2 ~@2 ab4 ~ eb4 ~, ~@4 gb3@3 gb4@2 ~ gb3@4 ~@4 gb3@2 ~@2 [f3,ab3]@4 ~ [gb3,bb3,db4]@4 ~, ~@10 [bb3,db4]@2 ~@7 bb3@2 ~@2 c4@3 ~@6", // Bbm Fm Gb Bbm
  T: "[eb4@3 ~ [eb3,bb3,db4,bb4]@2 ~ gb4 [gb3,ab4]@2 ~ gb4 [ab3,ab4]@3 [eb4,gb4] [f3,ab3,bb3,c4,bb4]@2 ~@2 [ab3,ab4]@2 ~ eb4 [bb3,gb4]@2 ~ [db4,ab4] db4@2 eb4 eb4@3 ~@2 eb3@2 ~@2 [eb4,gb4]@4 ab3@2 ~@2 bb3@2 ~ eb4 [ab3,eb4,gb4]@3 ~ bb3@2 ~@2 db4@3 ~, ~@3 gb4@2 ~@3 [eb4,gb4]@4 eb4 ~@14 eb4@2 ~@7 ab4 ~@27, ~@4 gb3@3 ~@3 gb3@4 ~@4 gb3@2 ~@2 [f3,ab3]@4 ~ [gb3,bb3]@4 bb3 ~@8 gb3@2 ~@22, ~@4 ab4 ~@5 [bb3,db4]@2 ~@7 [bb3,eb4,gb4]@3 ~ c4@3 ~@2 ab4 ~@6 gb4@2 ~@7 eb4 ~@2 [eb4,gb4]@2 ~@7 eb4 ~@2 [eb4,gb4]@4 ~]/2", // Eb7 Gbsus2 Ab Ebm Fm Ab Ebm Db5 …
  U: "~@2 [bb3,db4,bb4] ~@3 [gb3,bb3,db4,bb4] ~@3 [gb3,bb3,db4,bb4] ~@5, ~ gb3 ~@6", V: "[bb3,eb4]@9 ~@23",
})).s("gm_percussive_organ").gain(0.41)

// other · brass section
const brass_section = note(`<
  ~@2 A B C D E F G H I J@2 ~ E F G H E F G H I J@2 K E L M N E F G H O F G K E L M N E F G H E F G H E F G H E F G H E
  F G H E F G H E F G H E F G H E F G H E F G H E F G H E F G H ~
>`.pickRestart({
  A: "~@20 c3@2 ~@2 db3@2 ~@2 d3@3 ~", B: "eb3@3 ~@29", C: "~@20 c3@2 ~@3 db3@2 ~ d3@3 ~", D: "~ eb3@3 ~@28",
  E: "~@21 c3@2 ~ db3@2 ~@3 d3@3", F: "~ eb3@4 ~@15 c3@2 ~@2 db3@2 ~@2 d3@2 ~@2",
  G: "eb3@3 ~@17 c3@2 ~@2 db3@2 ~@2 d3@2 ~@2", H: "eb3@2 ~@18 c3@2 ~@2 db3@2 ~@2 d3@3 ~",
  I: "~ eb3@3 ~@16 c3@2 ~@2 db3@2 ~@2 d3@3 ~", J: "~ eb3@2 ~@17 c3@2 ~@2 db3@2 ~@2 d3@3 ~", K: "eb3 ~@15",
  L: "~ eb3@4 ~@27", M: "~@10 c3 ~ db3 ~ d3 ~", N: "~ eb3@2 ~@29", O: "eb3@2 ~@19 c3@2 ~ db3@2 ~@3 d3@3",
})).s("gm_brass_section").gain(0.4)

// chords · piano
const piano = note("<~@14 A B ~@22 A B ~@38 A B ~@11>".pickRestart({
  A: "[eb2,gb2]@3 ~", B: "ab2@17 [ab2,bb2]@10 ~@5, gb2@5 ~@3",
})).s("gm_piano").gain(0.8)

// bass · contrabass
const bass_2 = note("<~@14 A B C@2 D E@2 F D E@2 F ~@20 D E@2 F D E@2 F ~@16 D E@2 F D E@2 F D E@2 F ~@9>".pickRestart({
  A: "~@12 [eb3,eb4] ~ [eb3,eb4] ~ [eb3,eb4]@4 [gb3,gb4]@9 ~@3", // Eb Gb
  B: "~@10 [eb3,eb4] ~ [eb3,eb4]@3 ~ [eb3,eb4] ~ [eb3,eb4] ~ [eb3,eb4]@3 ~ [gb3,gb4]@7 ~", C: "[~@14 eb4 eb3@7 ~@10]/2",
  D: "[eb2,eb3]@3 ~ [eb2,eb3]@3 ~ [gb2,gb3]@3 ~@21", E: "[eb2,eb3]@2 ~@2 [eb2,eb3]@3 ~ [gb2,gb3]@3 ~@21",
  F: "[eb2,eb3]@3 ~ [eb2,eb3]@3 ~@2 gb3@3 ~@20, ~@8 gb2@3 ~@21", // Eb
})).s("gm_contrabass").gain(0.8)

// bass · slap bass 2
const bass_3 = note(`<
  ~@17
  [~@18 eb2 ~ eb2 ~ eb2@3 ~ eb2 ~ eb2 ~ eb2 ~]!4
  ~@24
  [~@18 eb2 ~ eb2 ~ eb2@3 ~ eb2 ~ eb2 ~ eb2 ~]!4
  ~@20
  [~@18 eb2 ~ eb2 ~ eb2@3 ~ eb2 ~ eb2 ~ eb2 ~]!12
  ~@10
>`).s("gm_slap_bass_2").gain(0.8)

// chords · contrabass
const contrabass = note(`<
  ~@18 A B C D A B C D E F G H ~@12 A B C D A B C D A B C D ~@16 A B C D A B C D I B J ~ A K C L A K C L ~
>`.pickRestart({
  A: "~@2 [eb5,gb5] ~@5", B: "~@8 [eb5,gb5]@4 ~@13 [bb4,eb5]@4 ~@3", C: "~@9 [eb5,gb5]@3 ~@20",
  D: "~@9 [eb5,gb5]@3 ~@13 [bb4,eb5]@4 ~@3", E: "db5@2 ~@2 db5@2 ~@2 db5 ~@2 db5 ~@2 c5@2 ~@16",
  F: "~ db5 ~@2 db5@2 ~@2 db5 ~ db5@2 ~@2 eb5@2 ~@16", G: "db5@2 ~@2 db5@2 ~@2 db5 ~ db5 ~@3 c5 ~@17",
  H: "db5 ~@3 db5 ~@3 db5 ~ db5@2 ~@2 eb5@2 ~@16", I: "~@8 [eb5,gb5]@4 ~@9 db5@2 ~@9",
  J: "~@9 [eb5,gb5]@3 ~@12 db5@2 ~@6", K: "~@8 [eb5,gb5]@2 ~ eb5@2 ~ eb5@3 ~@8 [bb4,eb5]@4 ~@3, ~@5 gb5 ~@10",
  L: "~@9 [eb5,gb5]@3 [eb5,gb5]@2 ~ eb5@3 ~@7 [bb4,eb5]@4 ~@3", // Ebm Eb5
})).s("gm_contrabass").gain(0.45)

// chords · violin · Gb Ab Bbm Gb Ab Gb Fm Ebm …
const violin = note(`<
  ~@25
  [[gb3,bb3,gb4,bb4]@2 ~@2 [gb3,bb3,gb4,bb4]@2 ~@2 [gb3,bb3,gb4,bb4]@2 ~@2 [ab3,c4,ab4,c5]@2 ~@2 [bb3,db4,bb4,db5]@2 ~ c5@2 ~ [gb3,gb4,bb4]@4 ~@6, ~@9 [ab3,c4,ab4] ~ bb3 ~@4]
  ~@4
  [[gb5,bb5]@14 ~@2 [f5,ab5]@15 ~]
  [~ [eb5,gb5]@14 ~ [f5,ab5]@14 ~@2]
  [[gb5,bb5]@2 [eb5,gb5]@3 ~@27]
  ~@58
>`).s("gm_violin").gain(0.51)

// other · baritone sax
const baritone_sax = note("<~@42 A@2 ~@22 B@3 ~@13 A@2 ~@2 A@2 ~@3>".pickRestart({
  A: "~@5 db4 eb4@2", B: "[~@13 eb4@9 ~@6 db4 eb4@9 ~@10, ~@25 db4@2 ~@69]/3",
})).s("gm_baritone_sax").gain(0.36)

// chords · violin
const violin_2 = note("<~@50 A B A C D E F G D E F G ~@8 A B A C A B A C ~@2 A C ~@3 C ~@3 C ~>".pickRestart({
  A: "~@2 [eb4,ab4] ~@3 [eb4,gb4] ~", B: "~@12 eb4@3 ~ [eb4,gb4]@5 ~@2 [eb4,gb4]@4 ~@2 [f4,ab4]@3",
  C: "~@12 db4@3 ~ [bb3,eb4]@6 ~@2 [bb3,eb4]@4 ~@2 [bb3,eb4]@2", // Eb5
  D: "~@13 [f4,ab4]@2 [eb4,gb4]@5 [f4,ab4]@2 ~ eb4@4 [f4,ab4]@2 ~@3, ~@11 gb4@2 ~@3", // Fm Ebm Fm
  E: "~@12 [f4,ab4]@2 [eb4,gb4]@5 ~ [f4,ab4]@2 [eb4,gb4]@4 ~ ab4@2 ~@3, ~@13 f4 ~@2", // Fm Ebm Fm Ebm
  F: "~@15 gb4@5 [f4,ab4]@2 ~ [eb4,gb4]@4 ~ ab4@2 ~@2, ~@12 f4@2 eb4@6 ~@7 f4@2 ~@3, ~@13 ab4@2 ~@17", // Fm Ebm
  G: "[eb4,gb4]@2 ~@2 [eb4,gb4]@2 ~@2 [eb4,gb4]@2 ~@2 [f4,ab4]@2 ~@2 [gb4,bb4] ~ ab4@2 ~ [eb4,gb4]@6 ~@5, ~@18 f4 ~@13", // Ebm Fm Gb Ebm
})).s("gm_violin").gain(0.32)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A@11 ~ A@3 ~ A@8 B@2 A@5 B A@3 ~ A@3 ~ A@3 ~ A@8 ~@8 A@19 ~ A@3 ~ A@3 ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.8)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@3 A@2 ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~@2 A@2 ~ A@3 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~ B A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~
  A@3 ~ A@3 ~@2 A@2 ~@2 A@2 ~ A@3 ~ B A@2 ~ B A
>`.pickRestart({
  A: "x", B: "x ~@6 x",
})).gain(0.8)

stack(
  bass, percussive_organ, brass_section, piano, bass_2, bass_3, contrabass, violin, baritone_sax, violin_2, snare,
  open_hat, ride, crash
)

More by Will Smith