Strudelify

The Wild Boys

Duran Duran

KeyE minorTempo117 bpm
0:00/0:00
// The Wild Boys — Duran Duran
// 117 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(117/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 · electric bass finger
const bass = note(`<
  ~@4 A B C D E B C D E B C D E B C D F G H B C D E B C D F I J G K L M N O P Q R S ~@3 A B C D E B C D F G H B C D E B
  C D F I J G K L M N O P Q R S ~@3 A B C D E B C D T U V I W U V I X L M N O P Y Z AA L M N O P Y Z AA L M N O
>`.pickRestart({
  A: "~@8 e1 ~ e1 ~ e1 ~@3", B: "e1 ~ e1 ~ e1 ~@3 e1 ~ e1 ~ e1 ~@3", C: "e1 ~ e1 ~ e1 ~@3 b1 ~ b1 ~ b1 ~@3",
  D: "b1 ~ b1 ~ b1 ~@3 b1 ~ b1 ~ b1 ~@3", E: "b1 ~ b1 ~ b1 ~@3 e1 ~ e1 ~ e1 ~@3",
  F: "b1 ~ b1 ~ b1 ~@3 c2 ~ c2 ~ c2 ~ c2 ~", G: "c2 ~@7 a1 ~ a1 ~ a1 ~ a1 ~", H: "a1 ~@7 e1 ~ e1 ~ e1 ~@3",
  I: "c2 ~@7 d2 ~ d2 ~ d2 ~ d2 ~", J: "d2 ~@7 c2 ~ c2 ~ c2 ~ c2 ~", K: "a1 ~@7 e2@2 ~@6", L: "~@2 d2@2 b1 ~@3",
  M: "~@4 d2@4 e2@3 ~@5", N: "~@2 d2@2 b1 ~ c#2 ~", O: "d2@2 ~ d2 ~@2 d#2 ~ e2@2 ~@6", P: "~@4 d2@4 b1@3 ~@5",
  Q: "~@4 d2@4 a1 ~ a1 ~ a1 ~ a1 ~", R: "a1@2 ~@6 b1 ~ b1 ~ b1 ~ b1 ~", S: "c2 ~ c2 ~ g2 ~@11",
  T: "b1 ~ b1 ~ b1 ~@3 a1 ~ a1 ~ a1 ~ a1 ~", U: "a1 ~@7 b1 ~ b1 ~ b1 ~ b1 ~", V: "b1 ~@7 c2 ~ c2 ~ c2 ~ c2 ~",
  W: "d2 ~@7 a1 ~ a1 ~ a1 ~ a1 ~", X: "d#2 ~ d#2 ~ d#2 ~ d#2 ~ e2@2 ~@6", Y: "~@4 d2@4 c2 ~ c2 ~ c2 ~ c2 ~",
  Z: "c2 ~ c2 ~ c2 ~ c2 ~ d2 ~ d2 ~ d2 ~ d2 ~", AA: "d2 ~ d2 ~ d2 ~ d2 ~ e2@2 ~@6",
})).s("gm_electric_bass_finger").gain(0.61)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@40 A@2 B@5 C D E F C D E G@3 C D E F C D E H@5 I J K L I A@2 M@5 C D E F C D E N@8 O I J K L I P@2 Q I J K L I P@2 Q
  I J K L
>`.pickRestart({
  A: "[~@8 [a2,e3]@16 b2 ~ b2 ~ b2 ~ b2 ~]/2", // A5
  B: "[c3 ~ c3 ~ c3 ~ c3 ~ [e2,b2,e3]@63 ~ [e3,b3,e4]!4 ~ [e3,b3,e4]@2 [e3,b3,e4]]/5", // E5
  C: "[e3,b3,e4]@2 ~@6 [e3,b3,e4]!4 ~ [e3,b3,e4]@2 [e3,b3,e4]", // E5
  D: "[e3,b3,e4]@2 ~@6 [b2,f#3,b3]!4 ~ [b2,f#3,b3]@2 [b2,f#3,b3]", // E5 B5
  E: "[b2,f#3,b3]@2 ~@6 [b2,f#3,b3]!4 ~ [b2,f#3,b3]@2 [b2,f#3,b3]", // B5
  F: "[b2,f#3,b3]@2 ~@6 [e3,b3,e4]!4 ~ [e3,b3,e4]@2 [e3,b3,e4]", // B5 E5
  G: "[[b2,f#3,b3]@2 ~@6 c4@14 ~@2 c#4@14 ~@2 [e3,b3,e4]!4 ~ [e3,b3,e4]@2 [e3,b3,e4], ~@7 g3@31 ~@10, ~@7 c3@15 ~ e3@15 ~@10]/3", // B5 E5
  H: "[[b2,f#3,b3]@2 ~@6 c4@15 ~ [a3,d4]@15 ~ [c3,g3,c4]@15 ~ [a3,c#4]@15 ~ [b2,e3,b3]@3 ~@5, ~@7 [c3,g3]@15 ~ d3@15 ~@17 e3@15 ~@10]/5", // B5 D5 C5 A E5 C5
  I: "~@4 [a2,d3,a3]@3 ~ [f#2,b2,f#3]@3 ~@5", J: "~@4 [a2,d3,a3]@3 ~ [b2,e3,b3]@3 ~@5",
  K: "~ [a2,d3,a3] [f#2,b2] [g#2,c#3]", L: "[a2,d3]@6 [a#2,d#3,a#3]@2 [b2,e3,b3]@3 ~@5",
  M: "[c3 ~ c3 ~ c3 ~ c3 ~ e2@62 ~@2 [e3,b3,e4]!4 ~ [e3,b3,e4]@2 [e3,b3,e4]]/5", // E5
  N: "[[b2,f#3,b3]@2 ~@6 [a2,e3,g3]@15 ~ [b2,f#3,a3]@15 ~ [c3,g3]@16 [d3,a3]@14 ~@2 [a2,e3,g3]@15 ~ [b2,f#3,a3]@15 ~ [c3,g3]@15 ~ [d3,a3]@8]/8", // B5 A7 B7 C5 D5 A7 B7 C5 …
  O: "d#3@7 ~ [b2,e3,b3]@3 ~@5", P: "[~@8 [c3,g3]@16 d3 ~ d3 ~ d3 ~ d3 ~]/2", Q: "d3 ~ d3 ~ d3 ~ d3 ~ [b2,e3,b3]@3 ~@5",
})).s("gm_distortion_guitar").gain(0.4)

// chords · pad choir
const pad_choir = note("<~@20 A@3 ~@7 B@5 ~@19 A@3 ~@7 B@5 ~@19 C@8 D ~@5 E@3 ~@5 E@3 ~@4>".pickRestart({
  A: "[~@4 c4@8 c#4@5 ~@7, ~@4 [e4,g4]@13 ~@7]/3", // Em
  B: "[~@4 [c4,e4]@8 [d4,f#4]@8 c4@8 c#4@5 ~@7, ~@4 a4@16 [e4,g4]@13 ~@7]/5", // C D Em
  C: "[~@8 [c4,e4,a4]@16 [b3,d4,f#4]@15 ~ [c4,e4,g4]@16 [d4,f#4,a4]@16 [c#4,e4]@16 [d4,f#4]@16 [c4,e4,g4]@16 [d4,f#4,a4]@8, ~@72 a4@31 ~@25]/8", // Am Bm C D C#m D C D
  D: "d#4@5 ~@11", E: "[~@2 [c4,e4,g4]@4 [d4,f#4,a4]@3 ~@3]/3",
})).s("gm_pad_choir").gain(0.31)

// bass · slap bass 2
const bass_2 = note(`<
  ~@4 A B C D E B C D E B C D E B C D F G H B C D E B C D F I J G K L M N O P Q R S ~@3 A B C D E B C D F G H B C D E B
  C D F I J G K L M N O P Q R S ~@3 A B C D E B C D T U V I W U V I X L M N O P Y Z AA L M N O P Y Z AA L M N O
>`.pickRestart({
  A: "~@8 e0 ~ e0 ~ e0 ~@3", B: "e0 ~ e0 ~ e0 ~@3 e0 ~ e0 ~ e0 ~@3", C: "e0 ~ e0 ~ e0 ~@3 b0 ~ b0 ~ b0 ~@3",
  D: "b0 ~ b0 ~ b0 ~@3 b0 ~ b0 ~ b0 ~@3", E: "b0 ~ b0 ~ b0 ~@3 e0 ~ e0 ~ e0 ~@3",
  F: "b0 ~ b0 ~ b0 ~@3 c1 ~ c1 ~ c1 ~ c1 ~", G: "c1 ~@7 a0 ~ a0 ~ a0 ~ a0 ~", H: "a0 ~@7 e0 ~ e0 ~ e0 ~@3",
  I: "c1 ~@7 d1 ~ d1 ~ d1 ~ d1 ~", J: "d1 ~@7 c1 ~ c1 ~ c1 ~ c1 ~", K: "a0 ~@7 e1@2 ~@6", L: "~@2 d1@2 b0 ~@3",
  M: "~@4 d1@4 e1@3 ~@5", N: "~@2 d1@2 b0 ~ c#1 ~", O: "d1@2 ~ d1 ~@2 d#1 ~ e1@2 ~@6", P: "~@4 d1@4 b0@3 ~@5",
  Q: "~@4 d1@4 a0 ~ a0 ~ a0 ~ a0 ~", R: "a0@2 ~@6 b0 ~ b0 ~ b0 ~ b0 ~", S: "c1 ~ c1 ~ g1 ~@11",
  T: "b0 ~ b0 ~ b0 ~@3 a0 ~ a0 ~ a0 ~ a0 ~", U: "a0 ~@7 b0 ~ b0 ~ b0 ~ b0 ~", V: "b0 ~@7 c1 ~ c1 ~ c1 ~ c1 ~",
  W: "d1 ~@7 a0 ~ a0 ~ a0 ~ a0 ~", X: "d#1 ~ d#1 ~ d#1 ~ d#1 ~ e1@2 ~@6", Y: "~@4 d1@4 c1 ~ c1 ~ c1 ~ c1 ~",
  Z: "c1 ~ c1 ~ c1 ~ c1 ~ d1 ~ d1 ~ d1 ~ d1 ~", AA: "d1 ~ d1 ~ d1 ~ d1 ~ e1@2 ~@6",
})).s("gm_slap_bass_2").gain(0.44)

// other · string ensemble 2
const string_ensemble_2 = note("<~@32 A@3 ~@31 A@3 ~@48>".pickRestart({
  A: "[~@2 [e5,e6,e7]@7 ~@3]/3", // E
})).s("gm_string_ensemble_2").gain(0.08)

// chords · melodic tom
const melodic_tom = note(`<
  ~@3 A B ~@37 C D C D E ~@21 E@3 F G E@2 ~@4 A H ~@15 E@3 F G E ~@2 E@3 F G E ~@2 E@3 F G
>`.pickRestart({
  A: "~@8 c3!5 ~ c3!2", B: "c3!2 ~@14", C: "~@8 [f1,b2,c3] ~@3 b2 ~@2 b2",
  D: "~ b2 ~ b2!2 ~@3 [f1,b2,c3] ~@3 b2 ~@2 b2", E: "~@8 [f1,b2,c3] ~@7", F: "~@8 [f1,b2,c3] ~@3 [g1,g4,g#4] ~@3",
  G: "[g1,f#4,g#4] ~@3 [g1,f4,g#4] ~ [f1,g1,b2,c3,e4,g#4] ~ [f1,g1,b2,c3,e4,g#4] ~@7", H: "c3!3 ~ c3 ~@11",
})).s("gm_melodic_tom").gain(0.7)

// bass · slap bass 2
const bass_3 = note(`<
  ~@4 A ~ B ~ A ~ B ~ A ~ C ~ D ~ C ~@3 D ~@3 D ~@21 C ~ D ~ C ~@3 D ~@3 D ~@19 D ~ C ~ D ~ C ~@30
>`.pickRestart({
  A: "~@6 d3 e3 ~@2 d3 ~@3 d3 ~", B: "~@6 a2 b2 ~@2 a2 ~@3 a2 ~", C: "~@6 a2 b2@3 a2 ~@3 a2 ~",
  D: "~@6 d3 e3@3 d3 ~@3 d3 ~",
})).s("gm_slap_bass_2").gain(0.24)

// bass · slap bass 2 · soft notes
const bass_soft = note("<~@4 A ~ B ~ A ~ B ~ A ~ C@2 D@2 E@8 F@8 ~@14 C@2 D@2 E@8 F@8 ~@12 G@7 ~@30>".pickRestart({
  A: "~@11 e3 ~@3 e3", B: "~@11 b2 ~@3 b2", C: "[~@11 b2@4 b2@17]/2", D: "[~@11 e3@4 e3@17]/2",
  E: "[~@11 b2@4 ~@60 e3@4 e3@49, ~@15 b2@113]/8", F: "[~@11 e3@4 e3@113]/8",
  G: "[~@11 e3@4 ~@28 b2@4 ~@28 e3@4 ~@28 b2@4 ~, ~@15 e3@56 ~@41, ~@47 b2@56 ~@9]/7",
})).s("gm_slap_bass_2").gain(0.08)

// other · overdriven guitar
const overdriven_guitar = note("<~@88 A@8 ~@21>".pickRestart({
  A: "[~@8 g4@15 [e4,b4] e5@6 e4@6 d4@4 c4@12 c4@4 d4@16 g4@15 [e4,b4] e5@6 e4@6 d4@4 c4@11 ~ d4@4 e4@8]/8", // E5
})).s("gm_overdriven_guitar").gain(0.52)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@22 A B C D A E F G H ~@15 A B C D A E C G ~@2 A B C D A E C G ~@12 A I A I A B C D A J K D ~@29
>`.pickRestart({
  A: "~@10 [e3,g3,b3] ~ [e3,g3,b3] ~@3", B: "~@2 [e3,g3,b3] ~ [e3,g3,b3] ~@5 [e3,g3,b3] ~ [e3,g3,b3]@3 ~",
  C: "~@10 [d3,f#3,b3] ~ [d3,f#3,b3] ~@3", D: "~@2 [d3,f#3,b3] ~ [d3,f#3,b3] ~@5 [d3,f#3,b3] ~ [d3,f#3,b3]@3 ~",
  E: "~@2 [e3,g3,b3] ~ [e3,g3,b3]@2 ~@4 [e3,g3,b3] ~ [e3,g3,b3]@2 ~@2", // Em
  F: "[e3,g3,b3]@2 ~@2 [e3,g3,b3]@2 ~@4 [d3,f#3,b3] ~ [d3,f#3,b3] ~@3", // Em Bm
  G: "~@2 [d3,f#3,b3] ~ [d3,f#3,b3]@2 ~@4 [d3,f#3,b3] ~ [d3,f#3,b3]@2 ~@2", H: "[b2,d3,f#3] ~@7",
  I: "~@2 [e3,g3,b3] ~ [e3,g3,b3] ~@5 [e3,g3,b3] ~ [e3,g3,b3]@4", // Em
  J: "~@2 [e3,g3,b3] ~ [e3,g3,b3] ~@5 [e3,g3,b3] ~ [e3,g3,b3]!2 ~ [e3,g3,b3]", // Em
  K: "[e3,g3,b3]!2 ~ [e3,g3,b3]!2 ~@5 [d3,f#3,b3] ~ [d3,f#3,b3] ~@3", // Em Bm
})).s("gm_synth_brass_1").gain(0.36).pan(0.4)

// drums · kick
const kick = s("bd").struct("<[x!4]!4 [x ~ x!2] [x!4]!111 [x!3 ~]>").gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@42 A@4 B C@21 D A@3 E A B C F ~@3 G C@15 D A@3 E A G C D A@3 E A G C D A@3 E
>`.pickRestart({
  A: "~ x", B: "~@2 x!2", C: "~ x ~ x", D: "~ x!2 ~", E: "~@3 x!2 ~@3", F: "~ x ~@2", G: "~@3 x",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@42 A@5 ~@21 A@4 ~ A@2 ~@21 A@4 ~ A ~@2 A@4 ~ A ~@2 A@4 ~>".pickRestart({
  A: "~@7 x ~@8",
})).gain(0.48)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!8]!4 [x ~@3 x!4] [x!8]!75 [x!3 ~ x!4] [x!8]!35 [x!5 ~@3]>").gain(0.72)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@4 A B@15 C ~ A B@7 C ~@3 D C E F G C H ~@5 A B@7 C ~ A B@7 C ~@3 D C E F G C H ~@5 A B@7 C ~@7 D C E F G C H ~ D C E
  F G C H ~ D C E F I
>`.pickRestart({
  A: "~@8 x!5 ~ x!2", B: "x!3 ~@5 x!5 ~ x!2", C: "x!3 ~@13", D: "~@14 x!2", E: "x!4 ~@10 x!2", F: "x!3 ~@7 x!3 ~ x!2",
  G: "x ~@13 x!2", H: "x!4 ~@12", I: "x",
})).gain(0.64)

stack(
  bass, distortion_guitar, pad_choir, bass_2, string_ensemble_2, melodic_tom, bass_3, bass_soft, overdriven_guitar,
  synth_brass_1, kick, snare, snare_soft, pedal_hat, cowbell
)

More by Duran Duran