Strudelify

Iruben me

Zucchero

KeyA minorTempo72 bpm
0:00/0:00
// Iruben me — Zucchero
// 72 bpm, 4/4, key A minor. 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 83 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/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 · overdriven guitar
const overdriven_guitar = note("<~@70 A@3 B C D E F@2 G@2 ~@2>".pickRestart({
  A: "[~@15 a5@6 ~@2 c5 ~@3 e5 c6@7 a5 g5 a5 g5@2 g5@3 ~ [d5,d#5,e5,f5,f#5] ~ [e5,f5] d5, ~@15 f#5 ~@6 d5@2 ~@24]/3", // Fmaj7
  B: "d5@5 [f#4,g4,g#4,a4,a#4,b4,c5,c#5] [c4,c#4,d4,d#4,e4,f4] [d#4,e4,f4,f#4,g4,g#4,a4] b4 c5 d5 [c5,d5] c5 b4@3", // Csus2
  C: "c5 d5 a4@5 [d#4,e4,f4,f#4,g4,g#4] [c4,c#4,d4] ~ e4 a4 e4 g4 e4@2", D: "~ c4 a3@12 g3 a3",
  E: "g3 a3 a3@6 g3@3 a3 c4 [d4,e4] [g4,a4] c5", F: "[e5@3 d5 e5@9 g5 ~ g5@3 e5 g5@8 f5@3 e5@2]/2", G: "[e5@23 ~@9]/2",
})).s("gm_overdriven_guitar").gain(0.13)

// bass · fretless bass
const bass = note(`<
  ~@18 A B A B A B A B C D E F C D E F C@2 B C B C B A G C H I B J K I L C D E F C D E F C D E F C D E F C D E F C D E F
  C D E F ~ M@3
>`.pickRestart({
  A: "a1 g1", B: "d1", C: "a1", D: "g1", E: "f#1", F: "f1", G: "f#1@5 g1 a1 b1 e2 d2 b1 e2@4 ~", H: "d1@14 e1 g1",
  I: "a1@13 e1@3", J: "a1@13 g1 e1@2", K: "d1@13 e1 c2 b1", L: "d1@15 ~", M: "[~@3 a1@8 ~]/3",
})).s("gm_fretless_bass").gain(0.41)

// chords · pad warm
const pad_warm = note(`<
  A B A B A B A B C@2 D E C@2 D E F@2 G H G H G H G H I@2 H J I@2 H J K@2 L M L M L G N M L M L M L M L M O L J M O L J
  M O L J M O L J M O L J M O L J M O L J ~ P@3
>`.pickRestart({
  A: "[a2,e3,a3,c4] [g2,d3,g3,b3]", B: "[d2,d3,f#3,a3]", C: "[[a2,a3] [g2,g3], [e3,c4]]/2", D: "[f#2,d3,f#3,a3]",
  E: "[f2,f3,a3,c4]", F: "[[a2,e3,a3,c4]@7 [e2,e3,g3,b3]]/2", G: "[e3,a3,c4] [d3,g3,b3]", H: "[d3,f#3,a3]",
  I: "[a3 g3, [e3,c4]]/2", J: "[f3,a3,c4]", K: "[[e3,a3,c4]@7 [e3,g3,b3]]/2", L: "[f#3,a3,d4]", M: "[e3,a3,c4]",
  N: "[f#3,a3,d4] [e3,b3,e4]", O: "[e3,g3,c4]", P: "[~@12 [a3,c4,e4]@35 ~]/3",
})).s("gm_pad_warm").gain(0.16)

// other · distortion guitar
const distortion_guitar = note("<~@43 A B C D E F G H I ~@31>".pickRestart({
  A: "~@13 a4 ~@2, ~@6 e4 ~", B: "a4@12 g4@3 ~", C: "~@13 a4@3, ~@3 e4", D: "~@5 e4@3, b4", E: "~@6 e4@5 c5@5",
  F: "~@4 d5@8 b4@3 [c5,d5]", // Csus2
  G: "b4 ~ [f4,f#4,g4,g#4,a4,a#4] [d#4,e4] [c4,d4] [e4,g4] [g4,a4,c5] [e4,a4] ~@4 d5@3 c5, ~@7 d5@5 ~@4", // Emaj7 Csus2 Em Am7 A5
  H: "d5@9 c5@3 ~ c5 [e4,a4,b4] [c4,d4]", I: "c5 a4@4 g#4 [e4,f4,f#4,g4] [c4,c#4,d4,d#4] ~@8",
})).s("gm_distortion_guitar").gain(0.17)

// chords · banjo
const banjo = note("<~@36 A@5 B C ~@8 A@3 ~ A@4 ~@24>".pickRestart({
  A: "[a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,c5,e5] ~@3", // Am
  B: "[a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [g4,d5,e5] ~@3 [g4,d5,e5] ~@3", // Am Em7
  C: "[a4,c5,e5] ~@3 [a4,c5,e5] ~@3 [a4,d5,e5] ~@3 [a4,d5,e5] ~@3", // Am Asus4
})).s("gm_banjo").gain(0.1).pan(0.3)

// other · pad metallic
const pad_metallic = note("<~@12 A@4 ~@39 B@2 C@2 B@2 D@2 ~@15 E@2 F@3>".pickRestart({
  A: "[~@3 e4 d4@6 ~@6]/2", B: "[~@7 d4@16 ~@9]/2", C: "[~@7 d4@12 ~@13]/2", D: "[~@7 d4@11 g3@6 ~@8]/2",
  E: "[d4,a4]/2", F: "[~@3 [g3,f#5]@8 ~]/3",
})).s("gm_pad_metallic").gain(0.35).pan(0.4)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  ~@18 A B A B A C D E F G H I F G H I J@2 K F K F K L M F K F K F K F K F G H N F G H I F G H I O P Q R O P Q R O P Q R
  O P Q S@2 ~@3
>`.pickRestart({
  A: "[a2,e3,e4] [g2,d3,d4]", B: "[a2,d3,d4]", C: "~ f#3, [a2,d3,d4]", D: "[a2,e3,e4] [g2,d3,d4], a4",
  E: "~@4 f#3@11 ~, [a2,d3,d4]", F: "[a2,e3]", G: "[g2,e3]", H: "[f#2,d3]", I: "[f2,c3]", J: "[a2,e3]/2", K: "[d3,f#3]",
  L: "[a2,e3] [g2,d3]", M: "[d3,f#3] [b2,e3,a3]", N: "[c3,f3]", O: "[a2,e3,a3,e4,a4]", P: "[g2,e3,g3,e4,g4]",
  Q: "[f#2,d3,f#3,d4,f#4]", R: "[f2,c3,f3,a3,c4]", S: "[[f2,c3,c4] ~, [f3,a3]]/2",
})).s("gm_distortion_guitar").gain(0.11).pan(0.7)

// other · flute
const flute = note("<~@37 [~@2 b3 a3] [f#3@3 ~@5] [~@2 g3 a3] [f#3@5 ~@11] ~@2 [~@8 g3@4 a3@3 ~] ~@39>")
  .s("gm_flute").gain(0.13).pan(0.3)

// other · accordion
const accordion = note("<~@30 A@2 B@2 ~@49>".pickRestart({
  A: "[~@7 e5 d5@3 c5@3 d5 a4@8 ~@9]/2", B: "[~@7 e5 d5@3 c5@3 d5 a4@7 ~@10]/2",
})).s("gm_accordion").gain(0.17).pan(0.4)

// other · koto
const koto = note("<~@16 [~@11 c3 d#3 c3!2 a2] ~@17 [~@11 c3 d#3 c3!2 a2] ~@48>").s("gm_koto").gain(0.07).pan(0.3)

// other · electric guitar muted
const electric_guitar_muted = note("<~@17 A B C ~ D E F ~@11 G H ~@46>".pickRestart({
  A: "~@14 e3 g3", B: "a3 c4 a3@4 ~@10", C: "~@12 e4 g4 e4@2", D: "~@12 a3@3 c4", E: "a3@3 ~@5", F: "~@12 g4 e4 d4@2",
  G: "~@14 d4 [a3,c4]", H: "c4@5 ~@11",
})).s("gm_electric_guitar_muted").gain(0.16).pan(0.4)

// drums · kick
const kick = s("bd").struct("<A B@16 C D@17 E D@24 F@2 ~ G@3 ~ G H G@8 F@2 ~ I ~@2>".pickRestart({
  A: "~@6 x!5 ~@5", B: "x!3 ~@3 x!5 ~@5", C: "x!3 ~@3 x!5 ~@4 x", D: "x ~@2 x!2 ~@3", E: "x ~@5 x!3 ~@7", F: "x",
  G: "x!2", H: "x ~@6 x!2 ~@7", I: "~@3 x",
})).gain(0.21)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<[~@11 x ~@4] [~@3 x ~@7 x ~@4]!17 ~@65>").gain(0.14)

// drums · snare
const snare = s("sd").struct("<A@17 B A@17 ~ A@25 ~@2 C@7 B C@3 ~ C@3 ~@5>".pickRestart({
  A: "~@12 x!4", B: "~@3 x", C: "~ x ~ x",
})).gain(0.21)

// drums · low tom
const low_tom = s("lt").struct("<~@62 A ~ B ~ C ~@3 D ~@3 E ~@2 F ~@5>".pickRestart({
  A: "x ~@7 x!8", B: "~@3 x", C: "~@11 x ~@2 x!2", D: "~@12 x ~@2 x", E: "~@8 x ~@4 x!3", F: "~@15 x",
})).gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<~@63 A B A@3 C A B A C@2 D A C E ~@5>".pickRestart({
  A: "~ x!7", B: "x!6 ~ x", C: "x!8", D: "x!7 ~", E: "x!2 ~ x!2 ~ x!2",
})).gain(0.14)

// drums · mid tom
const mid_tom = s("mt").struct("<~@17 A ~@17 A ~@24 B C D ~ E ~ F ~@3 G ~@3 H ~@2 I ~@5>".pickRestart({
  A: "~@3 x", B: "~@7 x!2 ~ x ~@5", C: "~@11 x!2 ~@2 x", D: "~@4 x!2 ~@2 x!4 ~@4", E: "~@9 x!3 ~@4",
  F: "x!2 ~@7 x!2 ~@2 x ~@2", G: "~@3 x!2 ~ x!2 ~ x!3 ~ x!2 ~", H: "~@3 x ~@2 x ~@4 x ~ x ~@2", I: "~@8 x!2 ~ x ~@3 x",
})).gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@60 A B ~@4 C ~@7 D ~@2 C ~@5>".pickRestart({
  A: "~ x ~@2", B: "~@8 x!2 ~@6", C: "~ x", D: "~@9 x ~@6",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct("<~@17 A B ~@16 C B ~@6 B ~@19 B ~ B ~ B ~ B ~ B ~@3 B ~ D B ~ A ~@2>".pickRestart({
  A: "~@3 x", B: "x", C: "~@2 x!2", D: "~ x ~@2",
})).gain(0.28)

// drums · ride bell
const ride_bell = s("rd").struct("<[x!2 ~@14] ~@82>").gain(0.21)

// drums · bongos
const bongos = s("bongo:4").struct("<~@4 [~@3 x] ~@3 [~@3 x] ~@7 [~@3 x] ~@66>").gain(0.73)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 A ~@3 A ~@7 A@2 ~@4 A ~@3 A ~@7 A@2 ~@47>".pickRestart({
  A: "x!4 ~@4",
})).gain(2.1)

stack(
  overdriven_guitar, bass, pad_warm, distortion_guitar, banjo, pad_metallic, distortion_guitar_2, flute, accordion,
  koto, electric_guitar_muted, kick, kick_soft, snare, low_tom, hihat, mid_tom, high_tom, crash, ride_bell, bongos,
  cabasa
)

More by Zucchero