Strudelify
Crunchy Granola Suite cover art

Song Sung Blue: Neil Diamond Originals

Crunchy Granola Suite

Neil Diamond

KeyA majorTempo170 bpm
0:00/0:00
// Crunchy Granola Suite — Neil Diamond
// 170 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 3/4 at bar 67, 4/4 at bar 68, 3/4 at bar 125, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 4 "Strings 1" string ensemble 1 (copy of ch 5 "Strings 2" string ensemble 1)
// note: Full arrangement: all 192 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(170/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, A@4 for four bars: edit a riff to change every repeat.

// bass · slap bass 1 · "Bass"
const bass = note(`<
  ~@8 A B A B A C D E F G F H F G F I J K J L J L M N O@2 P@3 Q R S R T R S R T R S R T R S R T U V U V W X M X M X Y
  Z@3 AA AB M@6 AC AD@2 AE M AE M AE AF P@4 Q R S R T R S R T AG AH AI R AJ AK AL AG AH AM R AJ AK AL U V U V AN X M X M
  X Y Z@3 AA AB M@6 AC AD@2 AE M AE M AE P@4 Q R S R T R S R T AG AH AI R AJ AK AL AG AH AM R AJ AK AL U V U V AN X M X
  M X M@2 P@2 AO@2 AP AQ AR@5
>`.pickRestart({
  A: "e1@5 ~ e1 ~ e1@5 ~ e1 ~", B: "e1@2 ~@2 e1 ~ a1@3 ~ a1@3 ~ a1@2", C: "e1@3 ~ e1 ~ a1@2 ~@2 a1@3 ~ a1@2",
  D: "e1@3 ~ e1@3 ~ e1@6 ~@2", E: "e1@5 ~ e1 ~ e1@3 ~ e1@3 ~", F: "d1@5 ~ d1 ~ d1@6 ~@2",
  G: "d1 ~ d1@3 ~ d1@4 g1@2 a1@4", H: "d1 ~ d1@3 ~ d1@3 ~ d1@5 ~", I: "d1@4 ~@2 d1@3 ~ d1@3 ~ d1@2",
  J: "a1@5 ~ a1 ~ a1@6 ~@2", K: "a1 ~ a1@3 ~ a1@4 d2@2 e2@4", L: "a1 ~ a1@3 ~ a1@3 ~ a1@2 d2@4",
  M: "a1@5 ~ a1 ~ a1@5 ~ a1 ~", N: "~@2 a1@3 ~ a1@3 ~ a1 ~ a1@3 ~", O: "a1@7 ~ a1@6 ~@2",
  P: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", Q: "a1@3 ~@13", R: "a1@2 c#2@2 e2 ~ a2@2 ~@2 a2@3 ~ a2@2",
  S: "~@2 a2@3 ~ a2@2 g2@2 e2@2 g2@2 a2 ~", T: "~@2 a2@3 ~ a2@2 g2@4 ~@4", U: "a1@4 ~@2 a1@5 ~ a1@4",
  V: "~@2 a1@4 ~@2 a1@3 ~ a1@3 ~", W: "a1@4 ~@2 a1 ~ a1@4 ~@2 a1 ~", X: "a1@3 ~ a1 ~ d2@3 ~ d2@3 ~ d2@2",
  Y: "a1@3 ~ a1@3 ~ a1@7 ~", Z: "[a1 ~ a1 ~ a1 ~ a1@3 ~ f#1@2 g1@2 a1@27 ~@5 d2@2]/3",
  AA: "~@2 d2@3 ~ d2@2 a1@4 ~@2 d2@2", AB: "~ d2 a1@2 ~ f#1 g1 a1", AC: "d2@2 c#2@2 b1@2 a1@6 ~@2 a1 ~",
  AD: "[a1@4 ~@2 a1 ~ a1@2 f#1@2 g1@2 a1@6 ~@2 a1 ~ a1@5 ~ a1 ~]/2", AE: "a1@5 ~ a1 ~ a1 ~ a1@6",
  AF: "a1@4 a1@3 ~ a1 ~ a1 ~ a1 ~ a1 ~", AG: "a1@4 e2@2 d2@2 c#2@2 a1@3 ~ g1 ~", AH: "g1@5 ~ g1 ~ g1@3 ~ g1@3 ~",
  AI: "f#1@5 ~ d1 ~ d2 ~ f#1 ~ g1@2 a1@2", AJ: "~@2 a2@3 ~ a2@2 g2@2 e2 ~ g2@2 a2 ~",
  AK: "a1@2 c#2@2 e2 ~ a2@3 ~ a2@3 ~ a2@2", AL: "~@2 a2@2 ~@2 a2@2 g2@3 ~@5", AM: "d2@5 ~ d1 ~ d2 ~ f#1 ~ g1@2 a1@2",
  AN: "a1@4 ~@2 a1 ~ a1@5 ~ a1 ~", AO: "a1@3 ~ a1@3 ~ a1@3 ~ a1@3 ~", AP: "a1@3 ~@9 a1@4", AQ: "~@9 a1@5 ~@2",
  AR: "[~ a1@4 ~@5 a1@52 a1@9 ~@9]/5",
})).s("gm_slap_bass_1").gain(0.59)

// chords · brass section · "Brass"
const brass_section = note(`<
  ~@38 A B A C A B A C D E D F D E D F G H G H I ~@31 A B A C D E D F ~@3 A B A C ~@3 D E D F G H G H I ~@30 A B A C D E
  D F ~@3 A B A C ~@3 D E D F G H G H I ~@11 J K L@5
>`.pickRestart({
  A: "a4@2 c#5@2 e5 ~ a5@2 ~@2 a5@3 ~ a5@2", B: "~@2 a5@3 ~ a5@2 g5@2 e5@2 g5@2 b5 ~", C: "~@2 a5@3 ~ a5@2 g5@4 ~@4",
  D: "a4@2 c#5@2 [e5,b5] ~ [a5,c#6]@2 ~@2 [a5,c#6]@3 ~ [a5,c#6]@2, e5 ~ a5 ~@13", // E5 A
  E: "~@2 [a5,c#6]@3 ~ [a5,c#6]@2 [g5,b5]@2 e5@2 [g5,b5]@2 d6@2, ~@10 a5 ~@3 b5 ~", // A G
  F: "~@2 [a5,c#6]@3 ~ [a5,c#6]@2 [g5,b5]@4 ~@4", G: "[a4,e5]@5 ~ [g4,d5]@4 ~@2 [a4,e5]@4",
  H: "~@2 [g4,d5]@4 ~@2 [a4,e5]@4 [g4,d5] ~@3", I: "[a3,e4,a5,e6,a6] ~@3, [a4,e5] ~@7",
  J: "[a3,a5,e6,a6] ~@2 [a3,a5,e6,a6]", K: "~@9 [a3,a5,e6,a6]@6 ~",
  L: "[~ [a3,a5,e6,a6]@5 ~@4 [a3,a5,e6,a6]@58 ~@12]/5", // A5
})).s("gm_brass_section").gain(0.36).pan(0.2)

// chords · church organ · "Organ"
const church_organ = note("<A@4 B@4 C@8 D@8 E@8 F@6 ~@135 G H I@2 J@2 K@6 L ~@6>".pickRestart({
  A: "[e4@30 ~ [f4,f5]@17 [d4,a4]@16, e2@15 ~, b4@40 ~@8 d5 ~@15]/4", B: "[[e2,e4,b4]@63 ~]/4",
  C: "[[e4,b4]@22 [e4,a4]@3 ~ [e4,a4]@3 ~ a4@2 b4@22 [e4,a4]@2 ~@2 [e4,a4]@3 ~ a4@2 b4@22 [e4,a4]@3 ~ [e4,a4]@3 ~ [e4,a4]@2 [e4,b4]@32, e2@29 ~@3, ~@30 e4@23 ~@9 e4@23 ~@43]/8", // E5 A5 E5
  D: "[~@103 a4@24 ~, [d2,a3], d4@63 ~]/8", E: "[a2,e4]/8",
  F: "[a3@16 ~@32 g5@16 b5@19 ~@13, e4@83 ~@13, ~@16 b4@67 ~@13, ~@31 d5@51 ~@14]/6", G: "[a4,e5,a5]@5 ~@11",
  H: "~@6 [a4,d5] ~@3 [a4,d5] ~@5", I: "[e5@21 ~ [a4,d5] ~@3 d5 ~@5]/2", J: "[e5@21 ~ [a4,d5] ~@3 [a4,d5]@3 ~ d5 ~]/2",
  K: "[~@3 g5 b5@2, e4, a4@27 ~@5 d5@63 ~, ~@16 b4@77 ~@3, ~@48 a5 ~@47]/6", L: "[a4,e5]@5 ~@11",
})).s("gm_church_organ").gain(0.33)

// chords · church organ · "Organ" · soft notes
const church_organ_soft = note("<~@3 A ~@170 B C@4 ~@13>".pickRestart({
  A: "~ d5@7", B: "~@7 d5, ~@14 a4 ~", C: "[a4@21 ~@5 a4@2 ~@2 a4@23 ~@9 a4 ~, ~@15 d5 ~@16]/4",
})).s("gm_church_organ").gain(0.2)

// other · string ensemble 1 · "Strings 2"
const string_ensemble_1 = note("<A@8 ~@7 B@3 C@2 D@2 E@4 F@2 G@2 H@2 I J K L M N ~@141 O@6 ~@7>".pickRestart({
  A: "b6/8", B: "[~@15 a6@22 g6@4 f#6@2 d6@4 ~]/3", C: "[a5@20 ~ g5@4 ~ f#5@2 d5@4]/2",
  D: "[a4@18 ~@2 a4@2 f#5@4 g5 ~ b5@3 ~]/2",
  E: "[~ g5 ~ d5 ~@4 g4 f#4@2 d4 ~@7 a4@2 d5@4 e5@2 g5@2 ~@2 e5@21 ~@4 a5 ~ b5 ~ c#6 ~ a5 ~, a5@2 f#5@2 ~@4 a4@2 ~@5 a3@6 ~@43]/4",
  F: "[e5@21 ~ e5@4 a5 ~ b5 ~ c#6 ~]/2", G: "[e6@18 ~@2 e5@2 e6@2 ~@2 c#6 ~ b5@2 a5@2]/2", H: "[e5@29 ~@3]/2",
  I: "e5@2 e4 ~", J: "b5@2 b4 ~", K: "d6@2 d5 ~", L: "g6@8 g5@3 ~@5", M: "b6@4 b5@3 ~", N: "b6@3 ~@13",
  O: "[~@3 g5 b5@2, e4@89 ~@7, ~ b4@5, ~ d5@2]/6",
})).s("gm_string_ensemble_1").gain(0.45)

// chords · overdriven guitar · "Overdrive"
const overdriven_guitar = note(`<
  ~@38 A B A C A B A C D E F G F E F G H I H J K ~@31 A B A C D E F G ~@3 A B A C ~@3 D E F G H I H J K ~@30 A B A C D E
  F G ~@3 A B A C ~@3 D E F G H I H J K ~@11 L M N@5
>`.pickRestart({
  A: "a3@2 c#4@2 e4 ~ a4@2 ~@2 a4@3 ~ a4@2", B: "~@2 a4@3 ~ a4@2 g4@2 e4@2 g4@2 b4 ~", C: "~@2 a4@3 ~ a4@2 g4@4 ~@4",
  D: "[a3,e4]@2 [c#4,a4]@2 [e4,b4] ~ [a4,c#5]@2 ~@2 [a4,c#5]@3 ~ [a4,c#5]@2", // A5 F#m E5 A
  E: "~@2 [a4,c#5]@3 ~ [a4,c#5]@2 [g4,b4]@2 e4@2 [g4,b4]@2 [b4,d5]@2, ~@10 a4 ~@5", // A G Bm
  F: "[a3,e4]@2 [c#4,a4]@2 [e4,b4] ~ [a4,c#5]@3 ~ [a4,c#5]@3 ~ [a4,c#5]@2", // A5 F#m E5 A
  G: "~@2 [a4,c#5]@3 ~ [a4,c#5]@2 [g4,b4]@4 ~@4", H: "[a3,e4]@5 ~ [g3,d4]@4 ~@2 [a3,e4]@4",
  I: "~@2 [g3,d4]@4 ~@2 [a3,e4]@4 [g3,d4] ~@3", J: "~@2 [g3,d4]@4 ~@2 [a3,e4]@3 ~ [g3,d4]@2 ~@2",
  K: "[a2,e3,a4,e5,a5] ~@3, [a3,e4] ~@7", L: "[a2,a4,e5,a5] ~@2 [a2,a4,e5,a5]", M: "~@9 [a2,a4,e5,a5]@6 ~",
  N: "[~ [a2,a4,e5,a5]@4 ~@5 [a2,a4,e5,a5]@58 ~@12]/5", // A5
})).s("gm_overdriven_guitar").gain(0.25).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@16 A B A B A B A B A B A B A B A B A C D@3 E A B A F A B A G A B A B A B A F H I H ~ E ~@29 J@2 K L K M K L K N K L
  K L K O N K L O L K O N P Q R J ~@29 S T U V U W U V U X U V U V U Y X U V Y V U Y X Z AA AB S ~@7 S AC C D AD AB AE
  AF ~@2 AG ~
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x!2 ~ x!2 ~@2 x", C: "x ~ x!2", D: "x!4", E: "x", F: "x!2 ~ x!2 ~@3", G: "x!2 ~ x!2 ~ x!2",
  H: "x ~@2 x ~@2 x ~", I: "~ x ~@2 x ~ x ~", J: "~@3 x", K: "~ x!2 ~@3 x!2", L: "~ x!2 ~@2 x!2 ~", M: "~ x!2 ~@3 x ~",
  N: "~ x!2 ~ x!3 ~", O: "~ x!2 ~@2 x!3", P: "~ x ~@2 x ~@2 x", Q: "~ x!3", R: "~ x ~@2 x ~@3", S: "~ x",
  T: "~@4 x ~@2 x", U: "x ~@3 x!2 ~ x", V: "x ~@2 x!2 ~@2 x", W: "x ~@3 x ~@2 x", X: "x ~ x!3 ~@2 x",
  Y: "x ~@2 x!3 ~ x", Z: "~@2 x ~@2 x ~@2", AA: "x ~ x ~ x ~@2 x", AB: "~ x ~@2", AC: "x!2", AD: "x!3 ~",
  AE: "~ x ~@7 x ~@6", AF: "~ x ~@14", AG: "~@3 x ~@12",
})).gain(0.72)

// drums · rim
const rim = s("rim").struct(`<
  ~@24 A B A B A B A B A@4 ~@22 C D@7 E F@2 G F H F H F H F I ~@38 J F@7 K D@2 L D M D M D M D ~@38 D@9 N ~@9
>`.pickRestart({
  A: "~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~ x!3", C: "~@3 x", D: "~ x ~ x", E: "~@2 x!2 ~@4", F: "x!2", G: "x ~@4 x!3",
  H: "x ~@2 x!2 ~ x!2", I: "x", J: "~ x", K: "x!2 ~@4 x ~", L: "~@3 x!4 ~", M: "~ x!2 ~ x!3 ~", N: "~ x ~@2",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@35 A B C D@3 E D@3 F D@3 G D@4 H I H J ~@11 K ~@7 L ~@3 M@3 ~ N B@2 O ~ M@3 P M@3 Q M@6 Q M@6 R S T S ~@8 U ~@3 C
  ~@7 V ~ W D@3 K A B@2 X W D@3 Y D@3 Z D@6 Z D@6 AA AB AC AB ~@10 AD AE AF K AG AH ~@2 J ~
>`.pickRestart({
  A: "~@7 x", B: "x!8", C: "x", D: "~ x ~ x", E: "~@4 x ~@3 x ~ x ~ x!3 ~", F: "~@2 x ~ x!4", G: "~@2 x ~@3 x!2",
  H: "x ~@2 x ~@2 x ~", I: "~ x ~@2 x ~ x ~", J: "~ x ~@6", K: "~ x ~@2", L: "~@5 x ~@2", M: "x!2", N: "~ x!7",
  O: "x!7 ~", P: "x ~@3 x ~ x ~ x!3 ~@5", Q: "x ~ x!4 ~@2", R: "x ~ x!5 ~", S: "~ x ~@2 x ~@2 x", T: "~ x!3",
  U: "~@3 x!3 ~@2", V: "~@3 x ~@4", W: "~@3 x", X: "x!5 ~@3", Y: "x ~ x ~ x!3 ~@5 x ~@3", Z: "x!4 ~@2 x ~",
  AA: "x!5 ~@2 x", AB: "~@2 x ~@2 x ~@2", AC: "x ~ x ~ x ~@2 x", AD: "~@2 x!2", AE: "x!4", AF: "x!3 ~",
  AG: "~ x ~@7 x ~@6", AH: "~ x ~@14",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@34 A B ~@5 C ~@36 D@3 ~@2 E F G ~@7 H ~@41 I J K ~@3 L B ~@7 M ~@41
>`.pickRestart({
  A: "~@5 x!3", B: "x!7 ~", C: "~@9 x ~ x ~@4", D: "x!2", E: "~@6 x!2", F: "x!8", G: "x", H: "~@5 x ~ x ~@8",
  I: "~@3 x", J: "~ x ~ x", K: "~ x ~@2", L: "~@4 x!4", M: "~ x ~ x ~@12",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@13 A B C ~@20 D E ~@20 E ~@26 F@3 G ~@26 A ~@26 H F@2 I ~@26 J ~@16 K L ~
>`.pickRestart({
  A: "~@3 x", B: "~@2 x ~ x ~@2 x", C: "~ x!4 ~ x ~", D: "~@2 x!6", E: "x", F: "x!8", G: "x!6 ~@2", H: "~@6 x!2",
  I: "x!4 ~@4", J: "~ x", K: "~@2 x ~ x ~@2 x ~@2 x!2 ~ x!2 ~", L: "x!2 ~@14",
})).gain(0.72)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@35 A B ~@46 C D ~@56 E F ~@46 G ~@2>".pickRestart({
  A: "~@5 x!3", B: "x!2 ~@6", C: "~@6 x!2", D: "x!8", E: "~@4 x!4", F: "x!6 ~@2", G: "~@3 x ~@2 x ~@2 x ~@6",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@7 A@9 B C@7 D@10 C E ~@22 D@25 F ~@31 G D@24 H I ~@30 J D@9 I ~@9>".pickRestart({
  A: "x!4", B: "~ x ~ x!3 ~ x", C: "x!2 ~ x!3 ~ x", D: "x!8", E: "~ x ~ x", F: "x!6 ~@2", G: "~@6 x!2", H: "x!3 ~ x!4",
  I: "x!4 ~@4", J: "~@4 x!4",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@13 A ~@19 B C ~@22 D ~@19 E ~@37 F ~@19 G ~@35 H I ~@14 J K A ~@2>".pickRestart({
  A: "x", B: "~ x!3", C: "x ~ x ~ x!4", D: "~@2 x!2 ~@2 x ~", E: "~@4 x!2 ~@2", F: "x!2 ~@2 x ~@3", G: "~@2 x!2 ~@4",
  H: "~@6 x!2", I: "~ x ~@2", J: "~@6 x!10", K: "x ~ x!6 ~ x!4 ~ x!2",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@16 [~ x ~ x]!8 ~@10 [~ x ~ x] ~@105 [~@3 x ~@4] ~@51>").gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@12 A ~@10 B ~@33 C ~@19 D ~@37 E ~@19 F ~@36 G ~@19>".pickRestart({
  A: "~ x ~@2", B: "~@5 x!3", C: "~@4 x!2 ~@2", D: "~@3 x ~@4", E: "~@2 x!2 ~@4", F: "~ x ~@6", G: "x!2 ~@6",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A ~@21 A ~@2 B A ~@2 B A ~@2 C A ~@2 C D E D ~@32 C ~@3 F ~@3 F ~@6 F ~@2 G ~@2 G F H I J ~@31 G ~@2 C G ~@2 C G
  ~@5 C G ~@2 B ~@2 K L M N B ~@15 O ~@2 P ~
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "~@3 x", D: "x ~@2 x ~@2 x ~", E: "~ x ~@2 x ~ x ~", F: "x ~@2 x", G: "~ x",
  H: "~ x ~@2 x ~@2 x", I: "~ x!3", J: "~ x ~@2 x ~@3", K: "~ x ~ x", L: "~@4 x ~@2 x", M: "~@2 x ~@2 x ~@2",
  N: "x ~ x ~ x ~@2 x", O: "~ x ~@14", P: "~@3 x ~@12",
})).gain(0.8)

// drums · ride
const ride = s("rd").struct(`<
  ~@38 A B C D A B C B A B C B A B C E ~@36 F G H I F G F J F G F G F G J F G K G F K J ~@34 L C M N L C M C O C M C M C
  M O C M P M C P Q ~@23
>`.pickRestart({
  A: "~@2 x!3 ~ x!2", B: "x ~ x!6", C: "x ~ x!3 ~ x!2", D: "x!2 ~ x ~@4", E: "x ~ x!4 ~@2", F: "x!3 ~ x!3 ~",
  G: "x!7 ~", H: "x!3 ~ x!4", I: "~ x ~@6", J: "x!6 ~@2", K: "x!4 ~@2 x ~", L: "~@6 x!2", M: "x!5 ~ x!2",
  N: "x ~ x!4 ~ x", O: "x!4 ~@2 x!2", P: "x!2 ~@2 x ~ x!2", Q: "x!4 ~@4",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@58 A B C D E F G H I J K L M@7 N O@6 ~@32 P Q R S C Q I T O F@2 U V@7 W X@5 Y ~@30 Z AA L AB AC AD AC O AE AA AF ~@9
>`.pickRestart({
  A: "~@3 x!2 ~@3", B: "x ~@2 x ~ x ~ x", C: "x ~@2 x!2 ~@3", D: "~@2 x!2 ~ x ~ x", E: "x ~ x ~@2 x!2 ~",
  F: "~@3 x ~ x ~ x", G: "x!3 ~", H: "x", I: "x!2 ~ x", J: "~@5 x ~ x", K: "~ x ~@3 x ~ x", L: "~ x ~ x!2 ~@2 x",
  M: "~@3 x ~@3 x", N: "~@3 x ~@4", O: "x!2", P: "~ x!2 ~@3 x ~", Q: "~ x ~ x ~ x!2 ~", R: "~ x!2 ~@5",
  S: "x!2 ~ x ~ x!2 ~", T: "~@3 x", U: "~ x!2 ~@2 x ~@2", V: "~ x ~@3 x ~@2", W: "~ x ~@4 x ~", X: "~ x ~ x",
  Y: "~ x ~@2", Z: "~@7 x", AA: "x ~@3 x ~@2 x", AB: "x ~@5 x!2", AC: "~ x ~ x!2 ~ x ~", AD: "~ x!2 ~@4 x",
  AE: "~@2 x!2", AF: "x!3 ~@5",
})).gain(0.8)

// … 4 more lines

More by Neil Diamond