Strudelify
Blu cover art

1998 · Blue Sugar

Blu

Zucchero

KeyA majorTempo78 bpm
0:00/0:00
// Blu — Zucchero
// 78 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 83 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/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 · fretless bass
const bass = note(`<
  ~@2 A B C B C D C E A E A F ~@8 G H I J K L M N@2 O D C D C D C F ~@5 P Q ~ G H I J K L M R K L M S@2 ~ T O E O D G H
  I J K L M U V W X Y V W X Y Z
>`.pickRestart({
  A: "e1@11 ~@13", B: "~@12 b0!2 ~ b0@3 d1@3 b0@2 ~", C: "e1@5 ~@7", D: "~@12 b0!2 ~ b0@3 d1@5 ~",
  E: "~@12 b0!2 ~ b0@2 ~ d1@5 ~", F: "~@12 b0!2 ~ b0@3 d1@6", G: "a1@3 g#1", H: "f#1@6 ~ b1", I: "c#2@9 c#2@8 ~ c#2@6",
  J: "b1@3 e1", K: "a1@18 g#1@5 ~", L: "f#1@7 b1", M: "c#2@3 c#2@3 c#2@2", N: "[b1@12 ~@3 a1]/2", O: "e1@3 ~@5",
  P: "~@7 e1", Q: "a0 ~@3", R: "b1@17 ~ e1@3 f#1@3", S: "[b1@11 ~@5]/2", T: "~@15 b0 ~@2 d1@5 ~",
  U: "b1@8 ~ b1@8 ~ e2@6", V: "a1@8 ~ a1@9 g#1@6", W: "f#1@8 ~ f#1@2 ~ f#1@9 b1@3", X: "c#2@8 ~ c#2@3 c#2@11 ~",
  Y: "b1@8 ~ b1@3 e2@3 e2@3 e2@4 ~@2", Z: "a1",
})).s("gm_fretless_bass").gain(0.72)

// other · string ensemble 2
const string_ensemble_2 = note("<~@15 A B@2 C ~ D ~@19 A B@2 C ~ D ~@37>".pickRestart({
  A: "d7", B: "[~@4 e7@3 f#7, c#7@29 ~@19]/2", C: "d7@19 ~@5", D: "e6@23 ~",
})).s("gm_string_ensemble_2").gain(0.17)

// chords · pad sweep
const pad_sweep = note(`<
  ~@14 A@2 B@4 C@2 D@3 E@4 F@2 ~@8 A@2 B@4 C@2 D@3 E@4 G H@3 I@2 ~@6 D@3 E@4 G H@3 E@4 G J
>`.pickRestart({
  A: "[d3,d4,b4]/2", B: "[c#5@12 ~@18 b4@5 ~ g#4@6 b4@6, a3, [a2,a4] [d3,f#4], ~ d5@3]/4",
  C: "[[a4,c#5] b4, [e3,e4]]/2", D: "[[a3,e4] [f#3,c#4,a4] [c#3,e4,a4], c#5, a2 ~@3]/3",
  E: "[[b3,b4] [a2,e4] [f#3,f#4] [c#3,e4,a4], e3 ~, ~ c#5@3]/4", F: "[[e3,b4] ~, e4@9 ~@7]/2", G: "[e3,e4,b4]",
  H: "[a3 [f#3,c#4,a4] [c#3,e4,a4], c#5, a2 ~@3, e4 ~@23]/3", I: "[[b3,b4] ~, e3]/2", J: "[a3,c#5], a2@3 ~, e4 ~@7",
})).s("gm_pad_sweep").gain(0.4)

// chords · pad sweep · soft notes
const pad_sweep_soft = note(`<
  ~@14 A@2 B@2 ~@2 C D ~@3 D ~@3 E@2 ~@8 A@2 B@2 ~@2 C D ~@3 D ~@3 D ~@3 D ~@10 D ~@3 D ~@3 D ~@3 D ~
>`.pickRestart({
  A: "f#4/2", B: "e4/2", C: "a2", D: "g#4", E: "[~@21 a3@11 ~@16, g#4 ~]/2",
})).s("gm_pad_sweep").gain(0.23)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note("<~@21 A@8 ~@17 B ~@36>".pickRestart({
  A: "[a5@2 e5 a5@2 e5 d5 c#5 ~@56, d#5]/8", B: "a5@2 e5 a5@2 e5 d5 c#5, d#5 ~@23",
})).s("gm_lead_2_sawtooth").gain(0.26).pan(0.4)

// other · tenor sax
const tenor_sax = note("<~@14 A@2 B@2 C@2 D E ~@17 A@2 B@2 C@2 D E ~@36>".pickRestart({
  A: "[d3@45 e3 d3 ~]/2", B: "[a2@13 a2 b2@2]/2", C: "[d3@15 c#3]/2", D: "a2", E: "e2",
})).s("gm_tenor_sax").gain(0.35)

// other · piano
const piano = note("<~@10 [b4 ~] [e4 ~] ~@71>").s("gm_piano").gain(0.59).pan(0.2)

// other · electric guitar clean
const electric_guitar_clean = note(`<
  ~@2 A@2 B C A@2 B C A@2 B C D ~@16 A@2 B C A@2 B C D ~@20 E ~ F ~ G ~@18
>`.pickRestart({
  A: "e3@2 a3 g#3", B: "d3@2 a3 g#3", C: "c#3@2 a3 g#3", D: "d3@2 ~", E: "~ [e2,e3] ~@2, ~@3 [d5,d6]@2 ~@7",
  F: "[d5,d6]@3 ~", G: "[d5,d6]@5 ~",
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.8)

// other · distortion guitar
const distortion_guitar = note(`<
  A@2 ~@20 B C D E B C D E ~@17 B C D E B C D E B C D F@2 G@2 H I J@2 B C D E B C D E B C D E B C D E K
>`.pickRestart({
  A: "[~@15 [d2,d3]@3 [d#2,d#3]@3 ~@13 [b3,e4]@13 ~, ~@7 [e2,e3]@9, ~@7 b2@8 ~]/2", B: "a2@3 g#2", C: "f#2@7 b2",
  D: "c#3@3 c#3", E: "b2@7 ~", F: "[~@36 [b3,d4] ~@11, b2@15 ~]/2", G: "[~@6 d2 e2@7 ~@2]/2", H: "~@7 d2", I: "e2",
  J: "[~@6 d2 e2@9]/2", K: "a2",
})).s("gm_distortion_guitar").gain(0.35)

// other · electric guitar clean
const electric_guitar_clean_2 = note("<~@2 A@3 B A@3 B A@3 B C ~@16 A@3 B A@3 B C ~@20 D@2 E F G@2 ~@17>".pickRestart({
  A: "e2!2 a2 d3@4 a2", B: "e2!2 g#2 c#3@4 a2", C: "d2@19 ~@5", D: "[d3@9 ~@3 d4@24 ~@3 e3 ~@2 b2@6]/2",
  E: "d3@3 ~ d4@2 e4@2", F: "~@12 b2@2 ~ d3 ~@2 d3@2 ~ e3 ~@2", G: "[e3 ~@2 d3@8 ~ d4@6 e4@12 ~@9 e4@8 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.26).pan(0)

// chords · electric guitar clean
const electric_guitar_clean_3 = note(`<
  ~@2 A B@2 C A D B@2 A C B E ~@3 F@2 ~@3 G@3 H@4 I@2 A B@2 J A B@2 C ~@3 F@2 ~@3 G@3 H@4 K@3 L M@2 ~@6 G@3 H@4 N@4 H@4
  O@2
>`.pickRestart({
  A: "~@6 g#2@3 e4@12 g#2 ~@2", B: "e2@3 e2@3 g#2@3 e4@12 g#2 ~@2",
  C: "e2@3 e2@3 g#2@3 ~@3 [b4,e5]@6 g#4@3 g#2 ~@2, ~@3 e4@4 ~", D: "e2@3 e2@3 g#2@3 b3@3 d5@7 ~@2 g#2 ~@2",
  E: "e2@3 e2@3 g#2@3 ~@6 b4@4 ~@2 g#2 ~@2, ~@3 e4@4 ~", F: "[~@5 a4@3 a4@6 ~@10, ~@3 e4@2 ~@11]/2",
  G: "[~@3 e4@6 e4@3 ~@3 e4@6 ~@6 e4@6 e4@3 ~@3 e4@5 ~@7 e4@5 ~@7 e4@6 e4@3, a4@12 a4@9 e4@6 ~@18 e4@5 ~@7 e4@5 ~@10, ~@8 a4@4 a4@3 ~ a4@4 a4@3 ~]/3",
  H: "[~@3 e4@5 ~@7 e4@6 ~@6 e4@6 e4@3 ~@3 e4@6 ~@6 e4@6 e4@3 ~@3 e4@5 ~@7 e4@5 ~@7 e4@6 e4@3, b4@9 e4@5 ~@7 e4@5 ~@22 a4@12 a4@9 ~@3 a4@12 a4@9 ~@3, ~@12 b4@9 ~@3 a4@12 a4@9 b4@6 ~@18 b4@5 ~@7 e4@5 ~@10]/4",
  I: "[~@3 e4@5 ~@7 e4@6 e4@5 ~@19 g#2 ~@2, b4@9 e4@5 ~@34, ~@4 b4@3 ~@9]/2", J: "e2@3 e2@3 g#2@3 b3@12 g#2 ~@2",
  K: "[~@3 e4@5 ~@7 e4@6 ~@6 e4@6 e4@3 ~@3 e4@5 ~@7 e4@5 ~@7 e4@6 e4@3, b4@9 e4@5 ~@7 e4@5 ~@19 e4@5 ~@7 e4@5 ~@10, ~@4 b4@3 ~ a4@4 a4@3 ~ a4@4 a4@3 ~]/3",
  L: "~ e4@2 e4 ~ e4@2 b4, a4@4 a4@3 ~", M: "[b4@3 e4@5 ~@7 e4@6 e4@5 ~@22, ~@9 e4@5 ~@34, ~@4 b4@3 ~@9]/2",
  N: "[~@3 e4@5 ~@7 e4@6 ~@6 e4@6 e4@3 ~@3 e4@6 ~@6 e4@6 e4@3 ~@3 e4@5 ~@7 e4@5 ~@7 e4@6 e4@3, b4@9 e4@5 ~@7 e4@5 ~@19 e4@6 ~@18 e4@5 ~@7 e4@5 ~@10, ~@4 b4@3 ~ a4@4 a4@3 ~ a4@4 a4@3 ~ a4@4 a4@3 ~]/4",
  O: "[~@3 e4@5 ~@7 e4@6 ~@3 a4@12 ~@12, b4@9 e4@5 ~@7 e4@5 ~@22, ~@4 b4@3 ~@9]/2",
})).s("gm_electric_guitar_clean").gain(0.36)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_4 = note("<~@2 A@12 ~@3 B@2 ~@11 A@9 ~@3 B@2 ~@39>".pickRestart({
  A: "~@22 g2 [f2,f#2]", B: "[~@5 e4@4 ~@7]/2",
})).s("gm_electric_guitar_clean").gain(0.18)

// other · harmonica
const harmonica = note("<~@33 A B ~@3 C D ~@21 E F@2 G H ~@17>".pickRestart({
  A: "~@3 g4 ~@2 e4 ~@6 g4 ~@2 e4 ~@2 g4 ~@2 e4 ~", B: "e4 ~@23", C: "~@15 b4 ~@3 g#4 ~ e4 ~@2, ~@9 a4 ~@2",
  D: "e4 d4 ~@22", E: "~@9 [e4,b4,d5]@3 ~ g4 ~@7 a4 ~@2, ~@6 a4 ~@5",
  F: "[~@3 g4@2 ~ e4 ~@8 a#4 ~@2 a4 ~@2 e4 g4@4 ~ e4 ~@8 d3 ~ e3 a3@2 ~ a3 ~@5, ~@3 a4 ~@44]/2",
  G: "d5@14 a#4 a4@2 ~ a#4@2 ~ a4@2 ~, ~@18 a4 ~@5", H: "~ e4 ~@22, g4 ~@11",
})).s("gm_harmonica").gain(0.72).pan(0.2)

// other · harmonica · soft notes
const harmonica_soft = note(`<
  ~@33
  [~@15 e4 ~@2 e4 ~@2 e4 ~@2]
  [~ d4 ~ b3 ~@20]
  ~@4
  [~@3 b3 ~@20]
  ~@21
  [~@9 g#4@2 ~@3 e4@2 ~@8]
  ~@21
>`).s("gm_harmonica").gain(0.4).pan(0.2)

// other · harpsichord
const harpsichord = note("<~@66 [~ e4 c#4 e4 d4 e4 b3 a3]!16 ~>").s("gm_harpsichord").gain(0.35).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@2 [x!2 ~ x!3 ~ x]!80 x>").gain(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@2 [~@13 x ~@10]!80 ~>").gain(0.23)

// drums · snare
const snare = s("sd").struct("<~@2 [~ x ~ x]!80 ~>").gain(0.52)

// drums · low tom
const low_tom = s("lt").struct("<~@73 [~@13 x ~@5 x ~ x ~@2] ~@3 [~@19 x ~ x ~@2] ~@3 [~@13 x ~@5 x ~ x ~@2] ~>")
  .gain(0.46)

// drums · hihat
const hihat = s("hh").struct("<~@2 A B@3 A B@7 A B@24 A B@7 A B@18 A B@7 A B@7 ~>".pickRestart({
  A: "~ x!7", B: "x!8",
})).gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@21 A ~@24 A ~@26 B ~@3 C ~@3 B ~>".pickRestart({
  A: "~@7 x", B: "~@8 x!2 ~@2", C: "~@12 x!2 ~ x ~@2 x ~@5",
})).gain(0.52)

// drums · crash
const crash = s("cr").struct("<~@2 A ~@3 A ~@7 A ~@7 A ~@16 A ~@3 A ~@3 A ~@11 A ~@5 B A ~@7 A ~@7 A>".pickRestart({
  A: "x", B: "~@16 x!8",
})).gain(0.12)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@65 [~@12 x!6 ~@6] ~@17>").gain(0.06)

// drums · tambourine
const tambourine = s("tb").struct("<~@2 [x!8]!80 x>").gain(0.35)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@2 [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x]!80 ~>").gain(0.12)

stack(
  bass, string_ensemble_2, pad_sweep, pad_sweep_soft, lead_2_sawtooth, tenor_sax, piano, electric_guitar_clean,
  distortion_guitar, electric_guitar_clean_2, electric_guitar_clean_3, electric_guitar_clean_4, harmonica,
  harmonica_soft, harpsichord, kick, kick_soft, snare, low_tom, hihat, mid_tom, crash, crash_soft, tambourine,
  tambourine_soft
)

More by Zucchero