Strudelify

Union of the Snake

Duran Duran

KeyB minorTempo115 bpm
0:00/0:00
// Union of the Snake — Duran Duran
// 115 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 126 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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.

// chords · church organ
const church_organ = note(`<
  A B ~ C ~ D ~ C ~ D E C F D E C F G H I J K H I J L M N O P Q R O S E C F D E C F G H I J K H I J L M N O P Q R O P M
  N O P Q R O T ~@3 U ~ V W@2 ~ V W@2 ~ V W@2 ~ V X@2 H I J K H I J L M N O P Q R O P M N O P Q R O P M N O P Q R O P M
  N O P Q R O T
>`.pickRestart({
  A: "~@10 [f#5,b5,f#6,b6]!4 [b4,d5]!2", // B5 Bm
  B: "[b4,d5] [b4,d5]@2 [b4,d5] [b4,f#5,b5,f#6,b6] ~ [b4,e5,b5,e6,b6] ~ [b4,g5,b5,g6,b6] ~ [b4,d5,f#5,b5,d6,f#6]@2 ~@2 [b4,d5,f#5,b5,d6,f#6]@2", // Bm B5 E5 Em Bm
  C: "~@5 [e5,f#5,a5,e6,f#6,a6] ~ [e5,f#5,a5,e6,f#6,a6]", D: "~@5 [b4,d5,f#5,b5,d6,f#6] ~ [b4,d5,f#5,b5,d6,f#6]",
  E: "~@5 [b4,d5,f#5,b5,d6,f#6] ~@2", F: "~@5 [e5,f#5,a5,e6,f#6,a6] ~@2", G: "~@12 [g4,b4,d5] ~ [g4,b4,d5] ~",
  H: "~@2 [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~@3 [g4,b4,d5] ~ [f#4,a#4,c#5] ~@3", // G F#
  I: "~@2 [f#4,a#4,c#5] ~ [f#4,a#4,c#5] ~@7 [b3,e4,g#4] ~ [b3,e4,g#4] ~", // F# E
  J: "~@2 [b3,e4,g#4] ~ [b3,e4,g#4] ~ [b3,e4,g#4] ~@3 [b3,e4,g#4] ~ [b3,e4,g#4] ~@3", // E
  K: "~@2 [b3,e4,g#4] ~ [b3,e4,g#4] ~@7 [g4,b4,d5] ~ [g4,b4,d5] ~", // E G
  L: "~@12 [b3,d4,f#4,b4,d5,f#5] ~ [b3,d4,f#4,b4,d5,f#5] ~", // Bm
  M: "~@4 [b3,d4,f#4,b4,d5,f#5] ~ [f#5,b5,d6,f#6] ~ [e5,a5,c#6,e6] ~@3 [b3,d4,f#4,b4,d5,f#5] ~@2 [b3,d4,f#4,b4,d5,f#5]", // Bm A Bm
  N: "~@2 [b3,d4,f#4,b4,d5,f#5] ~@3 [f#5,b5,d6,f#6] ~ [e5,a5,c#6,e6] ~@3 [f#3,a#3,c#4,f#4,a#4,c#5] ~ [f#3,a#3,c#4,f#4,a#4,c#5] ~", // Bm A F#
  O: "~@4 [f#3,a#3,c#4,f#4,a#4,c#5] ~ [f#3,a#3,c#4,f#4,a#4,c#5] ~@5 [g3,b3,d4,g4,b4,d5] ~@2 [g3,b3,d4,g4,b4,d5]", // F# G
  P: "~@2 [g3,b3,d4,g4,b4,d5] ~ [g3,b3,d4,g4,b4,d5] ~@7 [b3,d4,f#4,b4,d5,f#5] ~ [b3,d4,f#4,b4,d5,f#5] ~", // G Bm
  Q: "~@2 [b3,d4,f#4,b4,d5,f#5] ~ [b3,d4,f#4,b4,d5,f#5] ~ [f#5,b5,d6,f#6] ~ [e5,a5,c#6,e6] ~ [b3,d4,f#4,b4,d5,f#5] ~ [b3,d4,f#4,b4,d5,f#5] ~@2 [b3,d4,f#4,b4,d5,f#5]", // Bm A Bm
  R: "~@2 [b3,d4,f#4,b4,d5,f#5] ~ [b3,d4,f#4,b4,d5,f#5] ~ [f#5,b5,d6,f#6] ~ [e5,a5,c#6,e6] ~@3 [f#3,a#3,c#4,f#4,a#4,c#5] ~ [f#3,a#3,c#4,f#4,a#4,c#5] ~", // Bm A F#
  S: "~@2 [g3,b3,d4,g4,b4,d5] ~ [g3,b3,d4,g4,b4,d5] ~@5 [b4,d5,f#5,b5,d6,f#6]@2 ~@2 [b4,d5,f#5,b5,d6,f#6]@2", // G Bm
  T: "~@2 [g3,b3,d4,g4,b4,d5] ~ [g3,b3,d4,g4,b4,d5] ~@11", U: "~@5 [d4,f#4,b4,d5,f#5,b5] ~ [d4,f#4,b4,d5,f#5,b5]",
  V: "~@5 [f#4,a4,e5,f#5,a5,e6] ~ [f#4,a4,e5,f#5,a5,e6]", // F#m7
  W: "[~@12 [g4,b4,d5,g5,b5,d6]@2 ~ [g4,b4,d5,g5,b5,d6]@2 ~ [g4,b4,d5,g5,b5,d6] ~ [g4,b4,d5,g5,b5,d6]@2 ~@4 [d4,f#4,b4,d5,f#5,b5]@2 ~@2 [d4,f#4,b4,d5,f#5,b5]@2]/2", // G Bm
  X: "[~@12 [g4,b4,d5,g5,b5,d6]@2 ~ [g4,b4,d5,g5,b5,d6]@2 ~ [g4,b4,d5,g5,b5,d6] ~ [g4,b4,d5,g5,b5,d6]@2 ~@6 [g4,b4,d5] ~ [g4,b4,d5] ~]/2", // G
})).s("gm_church_organ").gain(0.14)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@3 A@3 ~ A@3 ~@25 A@3 ~ A@3 ~@84>".pickRestart({
  A: "[~@5 [e5,f#5,a5,e6,f#6,a6]@17 ~@2]/3", // F#m7
})).s("gm_string_ensemble_1").gain(0.06)

// bass · electric bass finger
const bass = note(`<
  ~ A B C D E B C D E B C D E B C D F G H I J G H I K L M N O L M N P B C D E B C D F G H I J G H I K L M N O L M N O L
  M N O L M N Q ~ R S T ~ R S U ~ R S E B C D E B C D F G H I J G H I K L M N O L M N O L M N O L M N O L M N O L M N O
  L M N O L M N V
>`.pickRestart({
  A: "~@4 d2@2 b1 ~", B: "~@2 a1 ~ b1@4 ~@2 a1@2 b1 ~ a1 ~", C: "b1@6 ~@6 a1@2 ~ a1", D: "g1 ~ g1 ~ f#1@5 ~@7",
  E: "~@4 d2@2 ~ d2 c#2 ~ a1 ~ b1@2 ~@2", F: "~@4 d2@2 ~ d2 c#2 ~ a1 ~ g1@2 ~ g1",
  G: "g1 ~ e1 ~ g1 ~ g2 ~@3 g1 ~ f#1@2 ~ f#1", H: "f#1 ~ e1 ~ f#1 ~ f#2 ~@5 e1 ~ e1 ~",
  I: "~@2 e1 ~ e1 ~ e1 ~@3 e1 ~ e1 ~@3", J: "~@2 e1 ~ e1 ~@7 g1@2 ~ g1", K: "~@2 e1 ~ e1 ~@7 b1 ~@2 b1",
  L: "b1 ~ a1 ~ b1@2 ~@4 a1 ~ b1 ~@2 b1", M: "b1 ~ a1 ~ b1@2 ~@4 a1 ~ f#1 ~@2 f#1",
  N: "~@2 e1 ~ c#2 d#2 f#2@2 ~@4 g1 ~@2 g1", O: "~@2 e1 ~ d2 e2 g2@2 ~@2 a1@2 b1 ~@2 b1",
  P: "~@2 e1 ~ d2 e2 g2@2 ~@2 a1@2 b1@2 ~@2", Q: "~@2 e1 ~ d2 e2 g2@2 ~@2 a1@2 ~@4", R: "~@12 a1@2 ~ a1",
  S: "g1 ~ g1 ~ f#1 ~@11", T: "~@4 a1@2 ~ a1 g1 ~ g1 ~ b1 ~@3", U: "~@4 d2@2 ~ d2 c#2 ~ a1 ~ b1 ~@3",
  V: "~@2 e1 ~ d2 e2 g2@2 ~@8",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A B C ~ A B C ~ A B C ~ A B C ~@17 A B C ~ A B C ~@29 A D E ~ F G E ~ H I J ~ A D E ~@42
>`.pickRestart({
  A: "~@12 [f#4,b4] ~ [f#4,b4] ~", B: "[f#4,b4] ~ [f#4,b4] ~@2 [f#4,b4] ~@2 [f#4,b4] ~@3 [f#4,b4] ~ [f#4,b4] ~",
  C: "[f#4,b4] ~ [f#4,b4] ~@2 [f#4,b4] ~@2 [f#4,b4] ~@7", // B5
  D: "[f#4,b4] ~ [f#4,b4] ~@2 [f#4,b4] ~@2 [f#4,b4] ~@3 [a4,d5] ~ [g#4,c#5] ~", // B5 D5 C#5
  E: "[f#4,b4] ~@4 [f#4,b4] ~@2 [f#4,b4] ~@7", F: "~@12 [a4,d5] ~ [g#4,c#5] ~",
  G: "[f#4,b4] ~@4 [f#4,b4] ~@2 [f#4,b4] ~@3 [a4,d5] ~ [g#4,c#5] ~", H: "~@12 [a4,d5] ~@2 [a4,d5]",
  I: "~@2 [a4,d5] ~@2 [a4,d5] ~@2 [a4,d5] ~@2 [a4,d5] ~@2 [a4,d5] ~", J: "~ [a4,d5] ~@2 [a4,d5]@4 ~@8",
})).s("gm_electric_guitar_clean").gain(0.25)

// other · guitar harmonics · "17/Feb/1999"
const guitar_harmonics = note(`<
  ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@18 A@2 ~@2 A@2 ~@30 A B ~@2 B@2 ~ C D E ~@2 A B ~@42
>`.pickRestart({
  A: "~@4 f#4 ~@2 f#4 ~@8", B: "~@2 f#4 ~ f#4 ~@2 f#4 ~@8", C: "~@14 f#4 ~", D: "f#4 ~@3 f#4 ~ f#4 ~@3 f#4 ~ f#4 ~@3",
  E: "f#4 ~ f#4 ~@13",
})).s("gm_guitar_harmonics").gain(0.14)

// other · distortion guitar · "Have fun!"
const distortion_guitar = note("<~@19 A B C ~ A B D ~@17 A B C ~ A B D ~@15 E@3 ~@19 A B C ~ A B D ~@32>".pickRestart({
  A: "~@12 e2 ~ e2 ~", B: "~@2 e2 ~ e2 ~ e2 ~@3 e2 ~ e2 ~@3", C: "~@2 e2 ~ e2 ~@3 b2@4 ~@4",
  D: "e2 ~ e2 ~ e2 ~@3 b2@4 ~@4", E: "[~@3 g3@2 b6@6 ~]/3",
})).s("gm_distortion_guitar").gain(0.4)

// other · tenor sax
const tenor_sax = note(`<
  ~@27 A@3 ~ B@3 ~@11 C ~@2 D E ~ A@3 ~ F@3 ~ A@3 ~ G@3 ~@3 H@4 I@4 J@2 K@3 L M@3 ~@3 C ~@2 D E ~ F@3 ~ N@3 ~ F@3 ~ N@3
  ~ F@3 ~ N@3 ~ F@3 ~ O@2 ~
>`.pickRestart({
  A: "[~@12 f#5@6 e5 d5 c#5@8 d5@16 ~@4]/3", B: "[~@3 c#5@4 d5@4 ~]/3", C: "~@2 d4 e4 d4@8 ~@4", D: "~@12 d5 e5 d5 e5",
  E: "d5 e5 d5 e5 d5@8 ~@4", F: "[~@12 f#5@6 e5 d5 c#5@8 g5@16 ~@4]/3",
  G: "[~@12 f#5@6 e5 d5 c#5@8 g5@8 g5@2 a5@2 g5 a5 g5 a5 ~@4]/3", H: "[~@6 a5@13 a3 a5@2 g#5@8 ~@2]/4",
  I: "[~@12 a3@3 g#3@3 a4@2 g#4@6 a5@2 g#5@12 ~@4 c#5@8 c#6@8 b5 g5 f#5 d5]/4",
  J: "[c#5 a4 g4 f#4 d4@6 ~@2 b5@8 b5@2 a#5@4 f#5@4 g5@2]/2",
  K: "[d5@2 c#5@2 e5@8 d5 c#5@13 d5@4 b4@12 ~@2 d5!2 ~@2]/3", L: "c#5!2 ~@2 d5!2 ~@2 e5!2 ~@2 d5!2 ~@2",
  M: "[c#5!2 ~@2 d5!2 ~@2 e5!2 ~@2 a5@7 [g5,g#5] f#5@8 b5@12 ~@8]/3", N: "[~@12 f#5@6 e5 d5 c#5@8 g5@8 d5@8 ~@4]/3",
  O: "[~@12 f#5@6 e5 d5 c#5@8 ~@4]/2",
})).s("gm_tenor_sax").gain(0.14).pan(0.6)

// other · tenor sax · soft notes
const tenor_sax_soft = note(`<
  ~@81
  [~@14 b4!2]
  [~@2 b4!2 ~@2 b4!2 ~@2 b4!2 ~@2 b4!2]
  [~@2 b4!2 ~@2 b4!2 ~@2 b4!2 ~@4]
  ~@42
>`).s("gm_tenor_sax").gain(0.09).pan(0.6)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~@25 A B C D E B C D F ~@15 A B C D E B C D E B C D E B C D F ~@27 A B C D E B C D E B C D E B C D E B C D E B C D E B
  C D E B C D G
>`.pickRestart({
  A: "~@10 [a3,c#4] ~ [b3,d4] ~ [b3,d4]!2", B: "[b3,d4] ~ [a3,c#4] ~ [b3,d4] ~@5 [a3,c#4] ~ [b3,d4] ~@2 [b3,d4]",
  C: "~@2 [b3,d4] ~@3 [b3,d4] ~ [a3,c#4] ~ [e3,a3] ~ [f#3,c#4] ~@3", // Bm A A5 F#5
  D: "~@2 [e3,b3] ~ [f#3,c#4] ~@5 [e3,b3] ~ [g3,d4] ~@2 [g3,d4]", // E5 F#5 E5 G5
  E: "~@2 [g3,d4] ~ [g3,d4] ~@5 [a3,c#4] ~ [b3,d4] ~ [b3,d4]!2", F: "~@2 [g3,d4] ~ [g3,d4] ~@5 [a3,c#4] ~@5",
  G: "~@2 [g3,d4] ~ [g3,d4] ~@11", // G5
})).s("gm_electric_guitar_muted").gain(0.16)

// chords · church organ
const church_organ_2 = note(`<
  A B ~@24 C@2 ~@2 C@2 ~@18 C@2 ~@2 C@2 ~@2 C@2 ~@2 C@2 ~@2 D E F G ~@2 D E ~@2 D E ~@2 D E ~@2 D H ~@8 C@2 ~@2 C@2 ~@2
  C@2 ~@2 C@2 ~@2 C@2 ~@2 C@2 ~@2 C@2 ~@2 C@2 ~@2
>`.pickRestart({
  A: "~@10 [f#5,b5,f#6,b6]!4 ~@2", B: "~@4 [f#5,b5,f#6,b6] ~ [f#5,b5,f#6,b6] ~@9",
  C: "~@6 [f#5,b5,d6,f#6] ~ [e5,a5,c#6,e6] ~@7", D: "~@10 [f#4,b4,d5]!6",
  E: "[f#4,b4,d5]!2 [d5,f#5,b5]!3 ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~ [f#4,d5,f#5,b5] ~ [f#4,b4,d5,f#5] ~@3", // Bm
  F: "~@15 [f#4,b4,d5]", G: "[f#4,b4,d5]!5 ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [d5,f#5,b5] ~ [d5,f#5,b5] ~@3",
  H: "[f#4,b4,d5]!2 [d5,f#5,b5]!3 ~ [d5,f#5,b5] ~@9", // Bm
})).s("gm_church_organ").gain(0.19).pan(0.3)

// chords · synth brass 1
const synth_brass_1 = note("<~@74 A ~ B ~ A ~ B ~ A ~ B ~@41>".pickRestart({
  A: "~@2 [d4,f#4,b4]@3 ~@3", B: "~@2 [c#4,e4,a4]@3 ~@3",
})).s("gm_synth_brass_1").gain(0.16).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C D E B C D E B C D E B C D E F C D E F C D G H@6 B I B C D E B C D E F C D E F C D G H@14 B I B C D E B C D E B
  C D E B C D E B C D E F C D E F C D G H@22 B C H@7 D
>`.pickRestart({
  A: "~@7 x ~@2 x ~ x ~@3", B: "~ x!2 ~@2 x!2 ~", C: "~@12 x ~@2 x", D: "~ x!2 ~@5", E: "~@4 x ~@2 x ~@2 x ~ x ~@3",
  F: "~@5 x!2 ~", G: "~@4 x ~@2 x ~@2 x ~ x ~@2 x", H: "~@2 x ~ x ~@5 x ~ x ~@2 x", I: "~@3 x",
})).gain(0.48)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@9 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 B ~@7 A ~@4 A ~@2 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 C ~@3 C ~@4
>`.pickRestart({
  A: "~ x", B: "~@6 x ~ x!3 ~@5", C: "~@3 x ~ x ~@2",
})).gain(0.6)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@26 A@6 ~@18 A@2 ~@2 A@2 ~ A@3 ~@2 A@2 ~@30 A@2 ~@2 A@2 ~ A@3 ~@2 A@2 ~ A@3 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~ A
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(0.36)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A B ~@2 A B ~@2 A B ~@2 A B C A@3 C A@3 ~@7 B D ~ A B ~@2 A B C A@3 C A@3 ~@15 B D ~ A B ~@2 A B ~@2 A B ~@2 A B
  ~@2 A B C A@3 C A@3 ~@23 B D ~@8
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@7 x", C: "~@3 x", D: "~ x ~@6",
})).gain(0.24)

// drums · crash
const crash = s("cr").struct("<~@25 A ~@23 A ~@7 A ~@35 A ~@7 A ~@7 A ~@7 A ~@8>".pickRestart({
  A: "~@3 x",
})).gain(0.36)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@2 A B A B A B A B A B A B A B A B C@8 B@8 A B A B A B A B C@8 B@16 A B@3 A B@3 A B@3 A B@3 A B@3 C@8 B@31 D
>`.pickRestart({
  A: "~@4 x!2 ~@2", B: "~ x ~@3 x ~@2", C: "x!2", D: "~ x ~@6",
})).gain(0.36)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~ A B C D C B C D C B C D C B C D E F G F@3 G F H I@7 J B C D C B C D E F G F@3 G F H I@15 J B E@2 C B E@2 C B E@2 C B
  E@2 C B E@3 F G F@3 G F H I@31 K
// … 23 more lines

More by Duran Duran