Strudelify

Diamonds Are a Girl's Best Friends

Marilyn Monroe

KeyF majorTempo122 bpm
0:00/0:00
// Diamonds Are a Girl's Best Friends — Marilyn Monroe
// 122 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(122/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 · "FINGERDBAS"
const bass = note(`<
  ~@9 A@5 B@4 C A@2 D C A E F E F G A G A@4 B@4 C A@2 D C A E F E F G A G A@4 B@4 C A@2 D C A E F E F E F E F E F E F E
  F E F E F A H ~@3
>`.pickRestart({
  A: "f1 ~ f2 ~ f1 ~ f2 ~ f1 ~ f2 ~ f1 ~ f2 ~", B: "g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 ~ g1 ~ g2 ~",
  C: "c1 ~ c2 ~ c1 ~ c2 ~ c1 ~ c2 ~ c1 ~ c2 ~", D: "f1 ~ f2 ~ db1 ~ db2 ~ d1 ~ d2 ~ g1 ~ g2 ~",
  E: "f1 ~ f2 ~ f1 ~ f2 ~ d1 ~ d2 ~ d1 ~ d2 ~", F: "g1 ~ g2 ~ g1 ~ g2 ~ c1 ~ c2 ~ c1 ~ c2 ~",
  G: "f1 ~ f2 ~ f1 ~ f2 ~ gb1 ~ gb2 ~ gb1 ~ gb2 ~", H: "f1 ~@15",
})).s("gm_electric_bass_finger").gain(0.5)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A@3 B@2 C D E F G@5 H I@3 J K L M N O@2 P Q R S T@2 U@3 V@6 K W M N X@2 Y Q Z S T@2 AA@4 AB AC@3 N K AD AE N AF@2 Y AG
  AH AG Y AI P Q AJ AI Y AK AJ AI AJ AL AJ AM@2 ~@3
>`.pickRestart({
  A: "[[a3,c4,f4]@39 ~ [bb3,db4,gb4]@7 ~]/3", B: "[[a3,c4,f4]@23 ~ [bb3,db4]@6 ~@2, ~@3 gb4]/2", C: "[a3,c4,f4]@15 ~",
  D: "[bb3,db4,e4,g4]@7 ~", E: "c4@12 db4@3 ~, [a3,f4]@15 ~",
  F: "[f3,bb3,d4]@3 ~ [g3,bb3,d4,f4] ~ [c4,e4] ~, ~@12 [g3,bb3] ~@3", G: "[[a3,c4,f4]@37 ~ [ab3,b3,d4,f4] ~]/5",
  H: "[g3,bb3,d4,e4]@3 ~", I: "[[bb3,d4,g4]@47 ~]/3", J: "[bb3,c4,e4,g4]@7 ~",
  K: "[c4,f4,a4]@4 ~@2 [b3,d4,f4,ab4] ~ [c4,f4,a4]@7 ~", // F Bdim F
  L: "[d4,f4,bb4]@3 ~ [c4,f4,a4]@3 ~ [d4,f4,bb4]@2 ~@2 [db4,f4,bb4]@3 ~", // Bb F Bb Bbm
  M: "[c4,f4,a4]@3 ~ [db4,e4,g4,a4]@3 ~ [d4,f4,a4]@3 ~ [b3,d4,f4,g4]@2 ~@2", N: "[bb3,c4,e4,g4]@13 ~@3",
  O: "[[c4,f4,a4]@23 ~ [c4,d4,gb4,a4]@5 ~@3]/2", P: "[d4,f4,g4,bb4]@7 ~ [c4,e4,g4,bb4]@7 ~",
  Q: "c4@7 ~ d4@7 ~, [f4,a4]@15 ~", R: "[d4,f4,g4,bb4]@8 [c4,e4,g4,bb4]@5 ~@3", S: "[a3,c4,f4]@7 ~ [bb3,db4,gb4]@7 ~",
  T: "[[a3,c4,f4]@23 ~ [bb3,db4,gb4]@7 ~]/2", U: "[a3,c4,f4]/3",
  V: "[f4@12 [ab3,b3,d4]@4 [g3,bb3,e4]@13 ~@3 [bb3,d4]@46 ~@2 [bb3,c4,e4]@13 ~@3, [a3,c4] ~, ~ f4@3 ~@4, ~@16 d4@4 ~@12 g4@61 ~@3]/6", // Abdim Edim Bb C7 Am
  W: "[d4,f4,bb4]@4 [c4,f4,a4]@3 ~ [d4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~", X: "[[a3,c4,f4]@22 ~@2 [c4,d4,gb4,a4]@5 ~@3]/2",
  Y: "[d4,f4,g4,bb4]@6 ~@2 [c4,e4,g4,bb4]@7 ~", Z: "[d4,f4,g4,bb4]@7 ~ [c4,e4,g4,bb4]@5 ~@3",
  AA: "[[a3,c4,f4]@58 ~@2 [ab3,b3,d4,f4]@3 ~]/4", AB: "[g3,d4,e4]@13 ~@3, bb3", AC: "[[d4,g4]@15 ~, bb3 ~@2]/3",
  AD: "[d4,f4,bb4]@3 ~ [c4,f4,a4]@3 ~ [d4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~, ~@4 eb4 ~@11", // Bb F Bb Bbm
  AE: "[c4,f4,a4]@3 ~ [db4,e4,g4,a4]@3 ~ [d4,f4,a4]@3 ~ [b3,d4,f4]@2 ~@2, ~@12 g4 ~@3", // F A7 Dm Bdim
  AF: "[[c4,f4,a4]@11 ~ [c4,d4,gb4,a4]@3 ~]/2", AG: "c4@7 ~ d4@6 ~@2, [f4,a4]@15 ~",
  AH: "[d4,f4]@7 ~ [c4,e4]@7 ~, [g4,bb4]@15 ~", AI: "c4@7 ~ d4@6 ~@2, [f4,a4]@7 ~",
  AJ: "[d4,f4,g4,bb4]@3 ~ [c4,e4,g4,bb4]@3 ~", AK: "[c4,a4]@8 [d4,a4]@7 ~, f4@7 ~", AL: "c4@7 ~ d4@5 ~@3, [f4,a4]@7 ~",
  AM: "[[c4,f4,a4]@9 ~@7]/2", // F
})).s("gm_string_ensemble_1").gain(0.16)

// other · brass section · "BRASS"
const brass_section = note(`<
  ~@9 A@2 ~@15 B C D E F G ~@15 B ~ H I J K ~@15 B ~ L ~ B ~ M ~ N ~ O ~ P ~ N ~ P ~@4
>`.pickRestart({
  A: "[[d5,g5,bb5] ~ [c5,f5,a5]@22 ~@8]/2", B: "~@2 [c5,c6]!2 ~ [c5,c6] [d5,d6] ~ [f5,f6]!2 [d5,d6] ~@5",
  C: "~@13 c5@3", D: "[a4,c5] ~@3 [a4,c5,f5]@2 ~@2 [bb4,db5,eb5,gb5]@2 ~@2 [eb5,gb5,bb5,db6]@2 ~@2, f5@3 ~@13",
  E: "[d5,f5,a5,c6]@5 ~ [d5,f5,a5,c6] ~ [a4,c5,f5]@3 ~ c5@2 ~ c5", // Dm7 F
  F: "[a4,c5,d5,f5]@2 [a4,c5,d5,f5] ~ [bb4,db5,eb5,gb5] ~ [eb5,gb5,bb5,db6] ~", G: "[d5,f5,a5,c6] ~ [c5,d5,f5,a5]@14",
  H: "[a4,c5]@3 ~ [a4,c5,f5]@2 ~@2 [bb4,db5,eb5,gb5]@2 ~@2 [eb5,gb5,bb5,db6]@2 ~@2, f5 ~@15", // Am F Ebm7
  I: "[d5,f5,a5,c6]@5 ~ [d5,f5,a5] ~ [a4,c5,d5,f5]@4 c5@2 ~ c5", // Dm7 Dm Dm7
  J: "[a4,c5,d5,f5]@4 [a4,c5,d5,f5]@3 ~ [bb4,db5,eb5,gb5]@2 ~@2 [eb5,gb5,bb5,db6]@2 ~@2", // Dm7 Ebm7
  K: "[d5,e5,f5,a5,c6] ~ [c5,d5,f5,a5]@12 ~@2", L: "~@2 [c5,c6]!2 ~ [c5,c6] [d5,d6] ~ f6!2 [d5,d6] ~@5, ~@4 f5 ~@3",
  M: "~@2 [c5,c6]!2 ~ [c5,c6] [d5,d6] ~ [f5,f6]!2 [d5,d6] ~ [f5,f6] ~@3", // C D F D F
  N: "~@2 [c5,c6]!2 ~ [c5,c6] [d5,d6] ~ [f5,f6]!2 [d5,d6] ~ [g5,g6] ~ [f5,f6] ~", // C D F D G F
  O: "~@2 [c5,c6]!2 ~ [c5,c6] [d5,d6] ~ [f5,f6]!2 [d5,d6] ~ [f5,f6]!2 [d5,d6] ~", // C D F D F D
  P: "~@2 [c5,c6]!2 ~ [c5,c6] [d5,d6] ~@3 [c5,c6]!2 ~ [c5,c6] [d5,d6] ~", // C D C D
})).s("gm_brass_section").gain(0.21)

// chords · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  A@6 B A C D@4 E F@4 G H I J K D L M N M O D P D@3 Q F@4 K H I J K D L M N M P D P D@3 E F@4 K H I R K D L M N M N M N
  M N M N M S M N M N M D T@3 ~
>`.pickRestart({
  A: "c3!16", B: "bb2!16", C: "bb2!8 c3!8", D: "[c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~",
  E: "[c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [c5,f5,a5] ~@2 [c5,f5,a5] [d5,f5,ab5,b5]!3 ~", // F Ddim
  F: "[d5,g5,bb5] ~@2 [d5,g5,bb5]!4 ~ [d5,g5,bb5] ~@2 [d5,g5,bb5]!4 ~", // Gm
  G: "[e5,g5,bb5,c6] ~@2 [e5,g5,bb5,c6]!4 ~ [e5,g5,bb5,c6] ~@2 [e5,g5,bb5,c6]!4 ~", // C7
  H: "[c5,f5,a5] ~@2 [c5,f5,a5]!3 [d5,f5,ab5] ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~", // F Ddim F
  I: "[d5,f5,bb5] ~@2 [d5,f5,bb5] [c5,f5,a5]!3 ~ [d5,f5,bb5] ~@2 [d5,f5,bb5] [db5,f5,bb5]!3 ~", // Bb F Bb Bbm
  J: "[c5,f5,a5] ~@2 [c5,f5,a5] [db5,e5,a5]!3 ~ [d5,f5,a5] ~@2 [d5,f5,a5] [d5,g5,b5]!3 ~", // F A Dm G
  K: "[e5,g5,c6] ~@2 [e5,g5,c6]!4 ~ [e5,g5,c6] ~@2 [e5,g5,c6]!4 ~", // C
  L: "[c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [d5,gb5,a5] ~@2 [d5,gb5,a5]!4 ~", // F D
  M: "[d5,g5,bb5] ~@2 [d5,g5,bb5]!4 ~ [e5,g5,c6] ~@2 [e5,g5,c6]!4 ~", // Gm C
  N: "[c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [d5,f5,a5] ~@2 [d5,f5,a5]!4 ~", // F Dm
  O: "[c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [db5,gb5] ~@2 [db5,gb5,bb5]!4 ~", // F Gb5 Gb
  P: "[c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [db5,gb5] ~@2 [db5,gb5] [db5,gb5,bb5]!3 ~", // F Gb5 Gb
  Q: "[c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [c5,f5,a5] ~@2 [c5,f5,a5] [d5,f5,ab5]!3 ~", // F Ddim
  R: "[c5,f5,a5] ~@2 [c5,f5,a5] [e5,a5] [db5,e5,a5]!2 ~ [d5,f5,a5] ~@2 [d5,f5,a5] [d5,g5,b5]!3 ~", // F A5 A Dm G
  S: "[c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [d5,f5,a5] ~@2 [d5,f5,a5]!2 [c-1,d5,f5,a5] [d5,f5,a5] ~", // F Dm Dm7 Dm
  T: "[[c5,f5,a5]@43 ~@5]/3", // F
})).s("gm_pizzicato_strings").gain(0.25).pan(0.3)

// chords · pizzicato strings · "PIZZICATO"
const pizzicato_strings_2 = note(`<
  ~@9 A B@3 C D E@3 F G H I J K L M N O P Q R Q B@2 S T E@3 U V H I J K L M N O W Q R Q B@2 C D E@3 U V H X J K L M N O
  N O N O N O N O Y O N O N O K Z@4
>`.pickRestart({
  A: "~@3 [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!2", // F
  B: "[c5,f5,a5]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!2", // F
  C: "[c5,f5,a5]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [c5,f5,a5] ~@2 [c5,f5,a5] [d5,f5,ab5,b5]", // F Ddim
  D: "[d5,f5,ab5,b5]!2 ~ [d5,g5,bb5] ~@2 [d5,g5,bb5]!4 ~ [d5,g5,bb5] ~@2 [d5,g5,bb5]!2", // Ddim Gm
  E: "[d5,g5,bb5]!2 ~ [d5,g5,bb5] ~@2 [d5,g5,bb5]!4 ~ [d5,g5,bb5] ~@2 [d5,g5,bb5]!2", // Gm
  F: "[d5,g5,bb5]!2 ~ [e5,g5,bb5,c6] ~@2 [e5,g5,bb5,c6]!4 ~ [e5,g5,bb5,c6] ~@2 [e5,g5,bb5,c6]!2", // Gm C7
  G: "[e5,g5,bb5,c6]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!3 [d5,f5,ab5] ~ [c5,f5,a5] ~@2 [c5,f5,a5]!2", // C7 F Ddim F
  H: "[c5,f5,a5]!2 ~ [d5,f5,bb5] ~@2 [d5,f5,bb5] [c5,f5,a5]!3 ~ [d5,f5,bb5] ~@2 [d5,f5,bb5] [db5,f5,bb5]", // F Bb F Bb Bbm
  I: "[db5,f5,bb5]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5] [db5,e5,a5]!3 ~ [d5,f5,a5] ~@2 [d5,f5,a5] [d5,g5,b5]", // Bbm F A Dm G
  J: "[d5,g5,b5]!2 ~ [e5,g5,c6] ~@2 [e5,g5,c6]!4 ~ [e5,g5,c6] ~@2 [e5,g5,c6]!2", // G C
  K: "[e5,g5,c6]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!2", // C F
  L: "[c5,f5,a5]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [d5,gb5,a5] ~@2 [d5,gb5,a5]!2", // F D
  M: "[d5,gb5,a5]!2 ~ [d5,g5,bb5] ~@2 [d5,g5,bb5]!4 ~ [e5,g5,c6] ~@2 [e5,g5,c6]!2", // D Gm C
  N: "[e5,g5,c6]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [d5,f5,a5] ~@2 [d5,f5,a5]!2", // C F Dm
  O: "[d5,f5,a5]!2 ~ [d5,g5,bb5] ~@2 [d5,g5,bb5]!4 ~ [e5,g5,c6] ~@2 [e5,g5,c6]!2", // Dm Gm C
  P: "[e5,g5,c6]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [db5,gb5] ~@2 [db5,gb5,bb5]!2", // C F Gb5 Gb
  Q: "[db5,gb5,bb5]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!2", // Gb F
  R: "[c5,f5,a5]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [db5,gb5] ~@2 [db5,gb5] [db5,gb5,bb5]", // F Gb5 Gb
  S: "[c5,f5,a5]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [c5,f5,a5] ~@2 [c5,f5,a5] [d5,f5,ab5]", // F Ddim
  T: "[d5,f5,ab5]!2 ~ [d5,g5,bb5] ~@2 [d5,g5,bb5]!4 ~ [d5,g5,bb5] ~@2 [d5,g5,bb5]!2", // Ddim Gm
  U: "[d5,g5,bb5]!2 ~ [e5,g5,c6] ~@2 [e5,g5,c6]!4 ~ [e5,g5,c6] ~@2 [e5,g5,c6]!2", // Gm C
  V: "[e5,g5,c6]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!3 [d5,f5,ab5] ~ [c5,f5,a5] ~@2 [c5,f5,a5]!2", // C F Ddim F
  W: "[e5,g5,c6]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [db5,gb5] ~@2 [db5,gb5] [db5,gb5,bb5]", // C F Gb5 Gb
  X: "[db5,f5,bb5]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5] [e5,a5] [db5,e5,a5]!2 ~ [d5,f5,a5] ~@2 [d5,f5,a5] [d5,g5,b5]", // Bbm F A5 A Dm G
  Y: "[e5,g5,c6]!2 ~ [c5,f5,a5] ~@2 [c5,f5,a5]!4 ~ [d5,f5,a5] ~@2 [d5,f5,a5] [c-1,d5,f5,a5]", // C F Dm Dm7
  Z: "[[c5,f5,a5]!2 ~ [c5,f5,a5]@46 ~@15]/4", // F
})).s("gm_pizzicato_strings").gain(0.15).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@9 [x!4]!76 x ~@3>").gain(0.51)

// drums · snare
const snare = s("sd").struct("<~@9 [~ x ~ x]!76 ~@4>").gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<~@9 [x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~]!76 x ~@3>").gain(0.36)

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

// drums · bongos
const bongos = s("bongo:4").struct("<~@9 [x!2 ~@6 x!2 ~@6]!76 [x!2 ~@14] ~@3>").gain(0.81)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@9 [~ x ~@3 x ~@2]!73 [~ x ~@6]!2 [~ x ~@3 x ~@2] [~ x ~@6] ~@3>").gain(0.81)

// drums · congas
const congas = s("conga:18").struct("<[~@2 x!2 ~@6 x!2 ~@4]!9 ~@80>").gain(1.15)

// drums · congas
const congas_2 = s("conga:33").struct("<[~@4 x!2 ~@6 x!2 ~@2]!9 ~@80>").gain(1.15)

// drums · ht
const ht = s("ht").struct("<~@28 A B C D ~@17 E F G H ~@36>".pickRestart({
  A: "~@4 x!3 ~", B: "~ x!3 ~ x ~@2 x ~@7", C: "~@3 x!3 ~ x ~ x ~@2 x!4", D: "x ~@4 x!3 ~@2 x ~@5",
  E: "~@6 x!4 ~ x ~@2 x ~", F: "~ x ~@7 x!2 ~@5", G: "~@5 x ~ x ~@5 x!2 ~", H: "~ x!5 ~ x ~@8",
})).gain(0.36)

// drums · ht · soft notes
const ht_soft = s("ht").struct("<~@28 [~@6 x!2 ~@8] ~ [~@11 x ~@4] ~@19 [~ x] [~ x ~ x] ~@37>").gain(0.2)

// drums · mt
const mt = s("mt").struct("<~@29 A ~ B ~@18 C D E ~@36>".pickRestart({
  A: "~@10 x ~@2 x ~@2", B: "~ x ~@4 x ~", C: "~@3 x ~@2 x ~@7 x!2", D: "x!2 ~@6", E: "~@9 x!2 ~@5",
})).gain(0.46)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@51 [~@3 x] ~@37>").gain(1.31)

// drums · triangle
const triangle = s("triangles:35").struct(`<
  ~@8 A ~@22 B ~@11 C ~@3 D ~@4 E ~@17 A ~@3 A ~ F ~ A ~ G ~@3 H ~@4
>`.pickRestart({
  A: "~@12 x!2 ~@2", B: "~@8 x!2 ~ x ~@4", C: "~@2 x ~@2 x ~@10", D: "~@5 x!2 ~@9", E: "~@12 x!4", F: "~@7 x",
  G: "~@5 x ~@2", H: "~@12 x!3 ~",
})).gain(3.12)

stack(
  bass, string_ensemble_1, brass_section, pizzicato_strings, pizzicato_strings_2, kick, snare, hihat, crash, bongos,
  bongos_2, congas, congas_2, ht, ht_soft, mt, agogo_bells, triangle
)