Strudelify

Downtown

Duran Duran

KeyE♭ majorTempo120 bpm
0:00/0:00
// Downtown — Duran Duran
// 120 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · trumpet
const trumpet = note("<~@66 A B C D E ~ C D E ~@20 F>".pickRestart({
  A: "[ab4,b4,e5]@3 [gb4,b4,e5]@5", B: "[ab4,b4,e5]@6 [gb4,b4,e5]@9 ~", C: "e5@5 ~ eb5@9 ~",
  D: "db5 e5 db5 b4@2 eb5 gb5 eb5", E: "e5@2 ab5 ~@3 b4@9 ~", F: "e5 ~@15",
})).s("gm_trumpet").gain(0.4).pan(0.9)

// other · celesta
const celesta = note("<~@10 A ~@3 A ~@22 A ~@3 A ~@54>".pickRestart({
  A: "eb6 ~ g6 ~@3 bb5 ~@9",
})).s("gm_celesta").gain(0.25).pan(0.4)

// bass · synth bass 2
const bass = note(`<
  ~@2 A B C D E B F G H I F G H I J K J K L M@2 L@2 N O N O N P Q@4 F G H I F G H I J K J K L M@2 L@2 N O N O N P Q@4
  ~@6 R S T U R S T U V W V W X Y@2 Z@2 AA AB AA AB AA AC AD@4 AE
>`.pickRestart({
  A: "bb1!2 ~ ab1 bb1 ~@2 f1 ab1 f1 ~ f1 ab1 ~ f1 ~", B: "bb1@2 ~@2 bb1@2 ~ f1 ab1 f1 ~ f1 ab1 ~ f1 ~",
  C: "bb1@2 ~@2 bb1@2 ~ ab1 bb1!2 ~ bb1 ab1 ~ bb1 ~", D: "c2@2 ~@2 c2@2 ~ ab1 bb1!2 ~ bb1 f1 ~ bb1 ~",
  E: "eb2@2 ~@2 eb2@2 ~@2 eb2!2 ~ eb2 ab1 ~ f1 ~", F: "bb1@2 ~@2 bb1@2 ~@2 bb1!2 ~ bb1 ab1 ~ bb1 ~",
  G: "c2@2 ~@2 c2@2 ~@2 bb1!2 ~ bb1 f1 ~ bb1 ~", H: "eb2@2 ~@2 eb2@2 ~@2 eb2!2 ~ eb2 bb1 ~ eb2 ~",
  I: "ab1@2 ~@2 ab1@2 ~@2 bb1!2 ~ bb1 ab1 ~ bb1 ~", J: "g1@2 ~@2 g1@2 ~@2 g1!2 ~ g1 f1 ~ bb1 ~",
  K: "c1@2 ~@2 c1@2 ~@2 c1!2 ~ c1 bb0 ~ eb1 ~", L: "f1@2 ~@2 f1@2 ~@2 f1!2 ~ c1 eb1 ~ c1 ~",
  M: "c1@2 ~@2 c1@2 ~@2 c1!2 ~ g0 bb0 ~ g0 ~", N: "bb1@2 ~@2 bb1@2 ~@2 g1!2 ~ g1 f1 ~ g1 ~",
  O: "f1@2 ~@2 f1@2 ~@2 f1!2 ~ f1 eb1 ~ f1 ~", P: "f1@2 ~@2 f1@2 ~@2 eb1!2 ~ eb1 db1 ~ eb1 ~",
  Q: "eb1@2 ~@2 eb1@2 ~@2 bb0!2 ~ bb0 db1 ~ bb0 ~", R: "b1@2 ~@2 b1@2 ~@2 b1!2 ~ b1 gb1 ~ b1 ~",
  S: "db2@2 ~@2 db2@2 ~@2 b1!2 ~ gb1 a1 ~ b1 ~", T: "e2@2 ~@2 e2@2 ~@2 ab1!2 ~ ab1 a1 ~ ab1 ~",
  U: "a1@2 ~@2 a1@2 ~@2 b1!2 ~ a1 b1 ~ b1 ~", V: "ab1@2 ~@2 ab1@2 ~@2 ab1!2 ~ ab1 gb1 ~ b1 ~",
  W: "db1@2 ~@2 db1@2 ~@2 db1!2 ~ db1 b0 ~ e1 ~", X: "ab1 ~ ab1 ~", Y: "db1@2 ~@2 db1@2 ~@2 db1!2 ~ ab0 b0 ~ ab0 ~",
  Z: "gb1@2 ~@2 gb1@2 ~@2 gb1!2 ~ db1 e1 ~ db1 ~", AA: "b1@2 ~@2 b1@2 ~@2 ab1!2 ~ ab1 gb1 ~ ab1 ~",
  AB: "gb1@2 ~@2 gb1@2 ~@2 gb1!2 ~ gb1 e1 ~ gb1 ~", AC: "gb1@2 ~@2 gb1@2 ~@2 e1!2 ~ e1 d1 ~ e1 ~",
  AD: "e1@2 ~@2 e1@2 ~@2 b0!2 ~ b0 d1 ~ b0 ~", AE: "e1 ~@15",
})).s("gm_synth_bass_2").gain(0.5)

// chords · vibraphone
const vibraphone = note(`<
  ~@4 A B C ~@9 D E D E ~@5 F ~ F G H@2 I ~@11 D E D E ~@5 F ~ F G H@2 I ~@7 J@2 K L M N O L P N ~ Q R Q ~@5 S ~ S T S ~
  U ~@3 V
>`.pickRestart({
  A: "bb4 ~ bb4 ~ bb4 ~ bb4 ~@3 bb4 ~ bb4 ~ bb4 ~", B: "c5 ~ eb5 ~ c5 ~ bb4 ~@3 d5 ~ f5 ~ d5 ~",
  C: "eb5 ~ g5 ~@3 bb4 ~@9", D: "[d4,g4,bb4]", E: "[c4,eb4,g4,c5]", F: "bb5 ~@15", G: "~@12 bb4 [c5,d5] [d5,eb5] f5",
  H: "bb5/2", I: "eb5 ~@15", J: "~@10 b5@2 e6@3 ~", K: "[ab4,b4]@3 [gb4,ab4,b4]@5, e5 ~@5 eb5 ~@9",
  L: "[db5,e5] e5 db5 eb5@2 eb5 gb5 eb5, ab4@3 gb4@5, ~@6 b4 ~@9", // Dbm
  M: "e5@2 ab5 ~@3 [gb4,ab4,eb5]@10, [ab4,b4]@6 b4 ~@9", N: "~ [a4,db5,e5] [b4,eb5,gb5] ~",
  O: "[ab4,b4,e5]@3 [gb4,ab4,b4,eb5]@5", P: "e5 ~ ab5 ~@3 [gb4,ab4,b4,eb5]@10, [ab4,b4]@3 ~@5", Q: "[db4,e4,ab4,db5]",
  R: "[eb4,ab4,b4]", S: "b5 ~@15", T: "~@12 b4 db5 [eb5,e5] gb5", U: "e5 ~@15", V: "[ab4,b4,e5] ~@15",
})).s("gm_vibraphone").gain(0.24).pan(0.6)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@4 A B C ~@9 D E D E ~@5 F ~ G@2 H@2 I@2 ~@10 D E D E ~@5 F ~ G@2 H@2 I@2 ~@6 J@2 K L K M K L K M N O N O ~@5 P ~ Q@2
  R@2 S@2 ~@2 T
>`.pickRestart({
  A: "bb4 ~ bb4 ~ bb4 ~ bb4 ~@3 bb4 ~ bb4 ~ bb4 ~", B: "c5 ~ eb5 ~ c5 ~ bb4 ~@3 d5 ~ f5 ~ d5 ~",
  C: "eb5 ~ g5 ~@3 bb4 ~@9", D: "[d4,g4,bb4]", E: "[c4,eb4,g4,c5]", F: "bb5@13 ~@3", G: "[bb5@28 bb4 c5 [d5,eb5] f5]/2",
  H: "bb5/2", I: "eb5/2", J: "~@10 b5@2 e6@3 ~", K: "[ab4,b4,e5]@3 [gb4,ab4,b4,eb5]@5",
  L: "[ab4,db5,e5]@3 [gb4,b4,eb5]@5", M: "~ [a4,db5,e5] [b4,eb5,gb5] ~", N: "[eb4,ab4,b4]", O: "[db4,e4,ab4,db5]",
  P: "b5@13 ~@3", Q: "[b5@28 b4 db5 [eb5,e5] gb5]/2", R: "b5/2", S: "e5/2", T: "[ab4,b4,e5] ~@15",
})).s("gm_synth_strings_1").gain(0.4).pan(0.2)

// other · alto sax
const alto_sax = note("<~@25 A B A B A B C@2 ~@19 A B A B A B C@2 ~@25 D E D E D E F@2 ~@2 G>".pickRestart({
  A: "bb4 g4", B: "bb3", C: "eb4 bb3", D: "b4 ab4", E: "b3", F: "e4 b3", G: "e4 ~@15",
})).s("gm_alto_sax").gain(0.4).pan(0.2)

// drums · kick
const kick = s("bd").struct("<[x!2]!62 [x!4]!4 [x!2]!29 x>").gain(0.6)

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

// drums · low tom
const low_tom = s("lt").struct("<~@65 [~@2 x!6 ~@4 x!4] ~@30>").gain(0.6)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B C ~ C ~ C ~ C ~ C ~ C ~ C ~@2 C ~ C ~ C ~ C D A@10 C ~ C ~ C ~ C ~@2 C ~ C ~ C ~ C D A@9 E C ~ C F C ~ A@8 ~ C ~ C
  ~ C ~ C D A@10 ~
>`.pickRestart({
  A: "x!3 ~@4 x!2 ~@5 x!2", B: "x!2 ~@5 x!2 ~@7", C: "~@7 x ~@8", D: "~@13 x!3", E: "x!3 ~@4 x!2 ~@7", F: "~ x ~@14",
})).gain(0.54)

// drums · bongos
const bongos = s("bongo:4").struct("<A ~ A ~ A ~@3 A ~@16 A ~@9 A ~@16 A ~@13 A ~ A ~@16 A ~@9 A>".pickRestart({
  A: "x",
})).gain(1.42)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct(`<
  A B A C A C A C A C A C A C A C@2 A C A C A C A C A@11 C A C A C A C@2 A C A C A C A C A@11 C A ~ A C A@8 C A C A C A
  C A C A@10 ~
>`.pickRestart({
  A: "~@3 x ~@3 x ~@2 x ~@5", B: "~@3 x ~@2 x ~@3 x!2 ~@4", C: "~@3 x ~@3 x ~@2 x!2 ~@4",
})).gain(3.45)

// drums · shaker
const shaker = s("sh").struct("<~ A ~ B ~@3 B ~@53 C D E D ~@31>".pickRestart({
  A: "x ~ x ~@2 x!2 ~ x ~@7", B: "x ~ x ~@2 x!2 ~ x ~ x ~@5", C: "~@14 x!2", D: "x!5 ~@11", E: "~@6 x!3 ~ x ~@3 x!2",
})).gain(0.6)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~ [~@5 x ~@2] ~ [~@13 x!2 ~] ~@3 [~@13 x!2 ~] ~@88>").gain(2.59)

stack(
  trumpet, celesta, bass, vibraphone, synth_strings_1, alto_sax, kick, snare, low_tom, hihat, tambourine, bongos,
  agogo_bells, shaker, jingle_bells
)

More by Duran Duran