Strudelify

New Moon on Monday

Duran Duran

KeyA majorTempo120 bpm
0:00/0:00
// New Moon on Monday — Duran Duran
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 · whistle
const whistle = note("<A@2 ~@68 B@2 ~@2 C@2 ~@56>".pickRestart({
  A: "[~@11 a5@4 c6@14 ~@3]/2", B: "[~@5 d5@2 g5@7 ~@2]/2", C: "[~@10 d5@4 g5@15 ~@3]/2",
})).s("gm_whistle").gain(0.11).pan(1)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@6 A B C D E F G H A B C D E F G H A B C D E F I J K L M N K L M N O P Q R A B C D E F G H A B C D E F I J K L M N K
  L M N O P Q R O P Q R O P Q R O S T R K L M N K L M N K L M N K L M N K L M N K L M N K L M N K L M N K L M N K L M N
  K L M N K L M N ~@2
>`.pickRestart({
  A: "a1@3 a1!2 ~@5 a2@2 ~@4", B: "f#1@3 f#1!2 ~@5 f#2@2 ~@4", C: "a1@3 a1 a1@2 ~@4 a2@2 ~@4",
  D: "f#1@3 f#1!2 ~@5 f#2@2 ~@2 f#2@2", E: "a1@2 ~ a1!2 ~ f#1@2 a1@2 a2@2 ~@4", F: "f#1@3 f#1!2 ~ e1@2 f#1@2 f#2@2 ~@4",
  G: "e1@3 g#1@2 b1@2 e2", H: "c#1@3 e1@2 g#1@2 c#2", I: "e2 ~@2 e2 ~@2 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  J: "d2 ~@2 d2@2 ~ d2 ~ c#2@2 c#3@2 d2@2 d3@2", K: "e1@3 e1 ~@2 d#1@2 e1@2 e2@2 f1@2 f2@2",
  L: "f#1@3 f#2 ~@2 f#1@2 b1@2 b2@2 c2@2 c3@2", M: "c#1@3 c#2 ~@2 c#1@2 ~@2 c#1@2 c#2@2 c#1 ~",
  N: "a1@3 a2@2 ~ a1@4 a2@2 a1@2 g#2@2", O: "a1@13 ~ a1@2", P: "e1@6 ~ e1", Q: "a1@2 ~ a1 ~@2 a1@2 a1@2 a2 ~@5",
  R: "a1 ~@2 a1 ~@2 a1@2 e1 ~ e1@2 g1 ~ g1@2", S: "e1@3 ~", T: "a1@2 ~ a1 ~@2 a1@2 a1@2 a2 ~@5, e1 ~@15",
})).s("gm_electric_bass_finger").gain(0.59)

// chords · dulcimer · "china"
const dulcimer = note(`<
  ~@6 A B A B A B C D E B A B A B C D A B A B A B F G ~@12 A B A B A B C D E B A B A B F G ~@74
>`.pickRestart({
  A: "[a4,e5] ~@3 [a4,e5] ~ [a4,d5] ~@9", B: "[f#4,b4] ~@3 [f#4,b4] ~ [f#4,a4] ~@9",
  C: "~@4 [e4,g#4] ~ [e4,g#4] ~@3 [e4,g#4] ~@5", D: "~@4 [c#5,f#5] ~@5 [c#5,e5] ~@2 [c#5,f#5] ~@2",
  E: "a4@2 ~@2 [a4,e5] ~@3 [a4,d5] ~ [a4,c#5] ~@5, e5 ~@15", F: "e5 ~@3 b4 ~ b4 ~ a4 ~@3 d5 ~ d5 ~",
  G: "d4 ~ d4 ~@5 c#4 ~ c#4 ~ d4 ~ d4 ~",
})).s("gm_dulcimer").gain(0.45).pan(0.3)

// chords · electric guitar clean · "mute guit"
const electric_guitar_clean = note(`<
  ~@4 A@2 B C D E B F@2 G H@2 I@2 J@4 B C D E B K L M N@8 ~@4 B C D E B F@2 G O@2 P@2 Q@2 R@2 S@8 ~@16 N@40 T@4 U@6
>`.pickRestart({
  A: "[~@16 c#4@8 ~@4 [b3,d4] ~@3, ~@15 [a2,e3,a3]@9 ~@8]/2", B: "[b3,d4]@3 ~", C: "[f#3,a3]@2 ~@10 [b3,d4] ~@3",
  D: "[b3,d4]@12 ~@2 [f#3,b3] ~", E: "~@2 [f#3,b3]@2 [e3,a3]@5 ~@3 [b3,d4] ~@3",
  F: "[[f#3,a3]@10 ~@5 a4 b4@6 [e4,g#4]@5 ~ [e4,f#4]@3 ~, ~@7 e4@4 ~@5]/2", G: "[b3,e4]@11 ~ [b3,d4] ~@3",
  H: "[~@8 [f#3,a3] ~@5 [b3,d4]@2, [b3,d4]@7 ~]/2", // F#m Bm
  I: "[b3@14 b3@4 f#3@2 [e3,a3]@5 ~@3 [b3,d4]@4, d4@7 ~, ~@14 f#3 ~@3 b3@10 ~@4]/2", // A5 Bm
  J: "[~@16 [f#3,a3]@10 ~@5 a4 b4@6 [e4,g#4]@5 ~ [e4,f#4]@3 ~ [b3,e4]@12 [b3,d4]@4, d4@15 ~, b3@3 ~, ~@15 e4@4 ~@13]/4", // F#m E Esus2 E5 Bm
  K: "[f#3,a3]@10 ~@5 a4, ~@7 e4", L: "e4@2 b3 e4 d4@2 a3 d4", M: "c#4@4 a3@2 c#4@2 ~ b3@3 c#4@2 b3@2",
  N: "[~@63 a3, e3@12 b3@5 e3 g#3 e3@6 b3 c#4@2 b3 c#4@3 e3@12 b3@5 e3 g#3 e3@6 b3 c#4@2 b3 c#4 b3@2, ~ b3@2 b3@3 b3 f#3@2 a#3@2 f#3@9 c#4@2 g#3@11 b3 e4@12 a#3@9 a3 a2@8, ~@2 e4@12 a#3@9 a3 a2@11 b3 c#4@12 c#3@16, ~@4 c#4@12 c#3@14 b3 a3@7 b3 f#3@2 a#3@2 f#3@9 c#4@2 g#3@10]/8",
  O: "[d4@6 ~@2 [f#3,a3] ~@5 b3@2, b3@28 d4 ~@3]/2", // F#m
  P: "[b3@14 b3@4 f#3@2 [e3,a3]@5 ~@3 b3@4, d4@12 ~@2 f#3 ~@3 b3@10 d4 ~@3]/2", // A5
  Q: "[d4@11 ~@5 [f#3,a3]@10 ~@4 e4@2, b3]/2", // F#m
  R: "[~@4 d4@2 a3 d4 c#4@2 a3 c#4 ~@2 c#4 b3, e4@3 e4@13, ~@4 b3@21 b3@5 ~@2]/2",
  S: "[~ b3@2 ~@60 a3, e3@14 a#3@9 a3 a2@11 b3 c#4@12 c#3@9 b3 c#4@2 b3 c#4 b3@2, ~@3 b3@8 f#3@9 c#4@2 g#3@11 b3 e4@12 a#3@9 a3 a2@8, ~@4 c#4@12 c#3@9 b3 c#4@2 b3 c#4@3 e3@12 b3@5 e3 g#3 e3@13, ~@7 f#3@2 a#3@3 b3@5 e3 g#3 e3@11 b3 a3@7 b3 f#3@2 a#3@2 f#3@9 c#4@2 g#3@10]/8",
  T: "[~@31 a3, e3@12 b3@5 e3 g#3 e3@6 b3 c#4@2 b3 c#4 b3@2, ~ b3@2 b3@3 b3 f#3@2 a#3@2 f#3@9 c#4@2 g#3@10, ~@2 e4@12 a#3@9 a3 a2@8, ~ c#4@3 c#3@4]/4",
  U: "[~@31 a3@16 ~, e3@12 b3@5 e3 g#3 e3@11 b3@16 ~@2, ~ b3@2 b3@3 b3 f#3@2 a#3@2 f#3@9 c#4@2 g#3@16 ~@10, ~@2 e4@12 a#3@9 a3 a2@16 ~@8, ~@4 c#4@12 c#3@9 b3 c#4@2 b3 c#4@16 ~@3]/6",
})).s("gm_electric_guitar_clean").gain(0.36)

// other · pad halo · "brightness"
const pad_halo = note("<~@22 A B A B A B C D ~@12 A B A B A ~@3 A B A B A ~ C D ~@74>".pickRestart({
  A: "~@3 a4", B: "a5@3 ~", C: "[e4,e5]@8 d5@7 ~", D: "~@8 b4@7 ~, a4@15 ~",
})).s("gm_pad_halo").gain(0.17).pan(0.1)

// chords · woodblock · "block"
const woodblock = note(`<
  ~@5 A B C D E F G H I J K L M N O P Q B C D E F G H I ~@8 J K L M B C D E F G H I J K L M N O H R ~@8 J K L M J K L M
  J K L M J K L M ~@50
>`.pickRestart({
  A: "g4!16", B: "g4!10 [a3,g4]!4 g4 [a3,g4]", C: "g4!8 [b3,g4]!2 [a3,g4] g4 [b3,g4]!2 [a3,g4] g4",
  D: "g4!6 [a3,g4] g4 [b3,g4]!2 g4 [b3,g4] g4 [b3,g4]!3", E: "g4!10 [a3,g4]!2 [b3,g4] [a3,g4] g4 [a3,g4]",
  F: "g4!10 [b3,g4]!4 g4 [b3,g4]", G: "g4!8 [c4,g4] [b3,g4] g4 [b3,g4] [c4,g4] [b3,g4]!3",
  H: "[b3,g4] g4!5 [a3,g4] g4 [a3,g4]!2 g4!2 [a3,g4] g4 [a3,g4] g4", // Em A7
  I: "[a3,g4] g4!2 [a3,g4] g4!2 [a3,g4] g4!2 [a3,g4] g4!2 [a3,g4] g4!3", J: "g4!2 [a3,g4]!2 g4!2 [a3,g4] g4!9",
  K: "g4!8 [b3,g4]!2 g4 [b3,g4] g4 [b3,g4]!3", L: "[b3,g4] g4 [b3,g4]!3 g4!3 [b3,g4]!2 g4 [b3,g4] g4!4",
  M: "g4!8 [a3,g4]!4 [b3,g4] [a3,g4]!3", N: "g4!6 [a3,g4] g4 [b3,g4]!3 g4 [a3,g4] [b3,g4] [a3,g4] g4",
  O: "g4!6 [a3,g4] g4 [b3,g4]!2 [a3,g4]!2 [b3,g4] [a3,g4]!2 g4", P: "g4!5 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~",
  Q: "a3 ~ a3!2 ~@2 a3 ~ a3!2 ~ a3 ~ a3!2 ~",
  R: "[a3,g4] g4!2 [a3,g4] g4 ~ a3 g4!2 [a3,g4] g4!2 [a3,g4] g4!3, ~@5 g4@2 ~@9", // A7
})).s("gm_woodblock").gain(0.04).pan(0.9)

// other · synth strings 2 · "string"
const synth_strings_2 = note("<~@72 A B ~@2 C D ~@2 C D ~@50>".pickRestart({
  A: "[g2,g3]", B: "[e2,e3]", C: "[g2,g3,b3]", D: "[e2,e3]@15 ~",
})).s("gm_synth_strings_2").gain(0.3).pan(0.6)

// chords · church organ · "organ"
const church_organ = note(`<
  ~@30 A B C D A B C D E F G@2 ~@16 A B C D A B C D E F G@2 E F G@2 E F G@2 E F G@2 A B C D A B C D A B C D A B C D A B
  C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@2
>`.pickRestart({
  A: "[e3,g#3,b3] ~ [e3,g#3,b3]!7 ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~", // E
  B: "[f#3,a#3,c#4] ~ [f#3,a#3,c#4]!7 ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~ [f#3,a#3,c#4] ~", // F#
  C: "[c#3,e3,g#3] ~ [c#3,e3,g#3]!7 ~ [c#3,e3,g#3] ~ [c#3,e3,g#3] ~ [c#3,e3,g#3] ~", // C#m
  D: "[a2,c#3,e3] ~ [a2,c#3,e3]!7 ~ [a2,c#3,e3] ~ [a2,c#3,e3] ~ [a2,c#3,e3] ~", // A
  E: "[a4,c#5,e5] ~ [a4,c#5,e5]!7 ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~", // A
  F: "[g4,b4,d5] ~ [g4,b4,d5]!7 ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // G
  G: "[e4,a4,c#5] ~ [e4,a4,c#5]!7 ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5] ~", // A
})).s("gm_church_organ").gain(0.28).pan(0.3)

// other · timpani
const timpani = note("<~@70 A B ~ C D E F G H I J@2 ~@50>".pickRestart({
  A: "~@4 b2 [b2,c3] c3 b2 [b2,c3]!2 c3 [b2,c3] b2 [b2,c3]!2 b2", B: "[g2,a2]@3 ~",
  C: "~@4 e3 ~ [e3,f3] e3 [e3,f3]!3 ~ f3 e3!2 [e3,f3]", D: "[g2,a2]@11 ~@3 [e3,f3] f3", E: "[g2,a2]@8 ~@6 [e3,f3]!2",
  F: "[a2,b2]@3 ~", G: "~@8 e3 f3 e3 f3 e3 [e3,f3]!2 e3", H: "[g2,a2]@9 ~@5 f3 [e3,f3]", I: "[g2,a2]@8 ~@6 f3 [e3,f3]",
  J: "[[a2,b2]@12 ~@13 f3 ~ f3 e3 [e3,f3]!2 e3, e3@12 e3 ~@3, f3 ~@31]/2", // Asus2 Fmaj7
})).s("gm_timpani").gain(0.3)

// other · timpani · soft notes
const timpani_soft = note("<~@71 [~ f2@11 ~@4] ~ [~@3 f3 ~ f3 ~@5 e3 ~@4] ~@4 [~@11 f3@2 e3 ~@2] ~@53>")
  .s("gm_timpani").gain(0.15)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@7 B A@7 B A@10 B C A B A B A B A B D A@27 D@2 A@2 D@4 A E@7 A B A B A B A B A B A B A B F B E@2 A B E@2 A B E@2
  A B E@2 A B E@2 A B E@2 A B E@2 A B E@2 A B ~@2
>`.pickRestart({
  A: "x ~@2 x ~@6 x ~@5", B: "x ~@2 x ~@4 x ~ x ~@5", C: "x ~@2 x ~@3 x ~@8", D: "x ~@4 x ~@2", E: "x ~@2 x!2 ~@3",
  F: "~@3 x ~@6 x ~@5",
})).gain(0.59)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A@27 B A@8 ~ C A@26 ~@2 A@2 ~@4 C D@7 A@16 D@2 A@2 D@2 A@2 D@2 A@2 D@2 A@2 D@2 A@2 D@2 A@2 D@2 A@2 D@2 A@2 ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~ x!4", C: "~@3 x", D: "~@3 x ~@8 x ~@3",
})).gain(0.52)

// drums · low tom
const low_tom = s("lt").struct("<~@69 A B ~@2 A B ~@2 A B ~@2 A ~@50>".pickRestart({
  A: "~@7 x", B: "x",
})).gain(0.59)

// drums · hihat
const hihat = s("hh").struct("<~@2 A@4 B C A@21 D A@20 E A@44 F E A@33 ~@2>".pickRestart({
  A: "x!8", B: "x!7 ~", C: "~@2 x ~ x ~ x ~ x ~ x ~ x ~ x!2", D: "x!6 ~@2", E: "~ x!7",
  F: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2",
})).gain(0.2)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2 A@4 B C A@21 D A@8 ~@2 A@26 ~@2 A@2 ~@12 A@13 E A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2
  A@2 ~@2
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~@4", C: "~@3 x ~ x ~ x ~ x ~ x ~ x ~@2",
  D: "~ x ~ x ~ x ~ x ~ x ~@6", E: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2",
})).gain(0.07)

// drums · open hat
const open_hat = s("oh").struct("<~@6 [~@3 x] ~@125>").gain(0.59)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@3 A ~@4 B A ~ A ~@3 A B A ~ A ~@4 B A ~ A ~@3 A ~@3 A C A ~ A ~@5 A ~ A ~@4 B A ~ A ~@3 A ~@3 D A@2 ~ D@2 A ~
  C A@2 ~ A ~@3 A ~@2 B A ~@2 B A ~@2 B A ~@3 E@2 ~@2 E@2 ~@2 E@2 ~@2 E@2 A ~ E@2 ~@2 E@2 F ~ C E ~ B C E G ~@3
>`.pickRestart({
  A: "x", B: "~@3 x", C: "x ~@2 x", D: "x ~@6 x", E: "~@3 x ~@8 x ~@3", F: "~@3 x ~@12", G: "~ x ~@2",
})).gain(0.46)

// drums · cowbell
const cowbell = s("cb").struct("<~@79 [~@3 x ~@8 x ~@3]!3 ~@50>").gain(0.59)

stack(
  whistle, bass, dulcimer, electric_guitar_clean, pad_halo, woodblock, synth_strings_2, church_organ, timpani,
  timpani_soft, kick, snare, low_tom, hihat, hihat_soft, open_hat, crash, cowbell
)

More by Duran Duran