Strudelify

Ali d'oro

Zucchero

KeyA minorTempo74 bpm
0:00/0:00
// Ali d'oro — Zucchero
// 74 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// 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(74/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
const bass = note(`<
  ~@26 A B A B A C D E A B C D A B C D A F A F A C G H I J K L M N O A B C D A B C D A F A F A C G H A F A F A C G P@3
>`.pickRestart({
  A: "a1 ~ a1@14", B: "e1 ~ e1@14", C: "g1 ~ g1@14", D: "d1 ~ d1@14", E: "d1 ~ d1@6 d1 ~ f#1@2 g1@2 g#1@2",
  F: "e1 ~ e1@12 g1 g#1", G: "d1 ~ d1@13 a1", H: "d1 ~ d1@6 d1@2 e1@2 g1@2 a1@2", I: "a#1 ~ a#1@13 f1",
  J: "g#1 ~ g#1@12 f1 g#1", K: "f#1 ~ f#1@12 g#1 a1", L: "a#1 ~ a#1@14", M: "f#1 ~ f#1@6 f#1@6 a#1@2",
  N: "c#2 ~ c#2@13 e1", O: "f1 ~ f1@5 f1!2 ~ f1@6", P: "[d2 ~ d1@6 d1@2 d1@2 e1@2 ~ f#1@2 g1@27 ~@4]/3",
})).s("gm_electric_bass_finger").gain(0.49)

// bass · lead 1 square
const bass_2 = note("<~@6 A B C D A B C D A B C E A B C D A B C E ~@57>".pickRestart({
  A: "a1", B: "e1", C: "g1", D: "d1", E: "d1@7 ~",
})).s("gm_lead_1_square").gain(0.56)

// other · violin
const violin = note("<~@34 A B C D E B C F ~@15 A B C D E B C F ~@18>".pickRestart({
  A: "~@4 d4@3 a3", B: "g3@7 ~@9", C: "~@4 d4@2 a3 ~", D: "~@2 f#4@7 ~@3 g4@4", E: "e4@2 ~@6 d4@5 ~ a3@2",
  F: "~@2 d4@7 ~@3 d4@4",
})).s("gm_violin").gain(0.31).pan(0.2)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@6 A B C D A B C D A B C D A B C D A B C D ~@57>".pickRestart({
  A: "c5@13 ~@3", B: "g4@13 ~@3", C: "b4@13 ~@3", D: "f#4@12 g4@3 ~",
})).s("gm_lead_2_sawtooth").gain(0.48)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@6 B C D E B C D E B C D F B C D E B C D F G@5 H@8 I@8 J@3 K@8 L@7 M@5 N@8 O@5
>`.pickRestart({
  A: "[a1,a2]/6", B: "a2", C: "e2", D: "g2", E: "d2", F: "d2@7 ~",
  G: "[[a2,a3,c4] [e2,g3,b3] [a2,a3,c4] [e2,g3,b3] [a2,a3,c4], e4]/5", // Am Em Am Em Am
  H: "[[g2,g3,b3] [d2,f#3]@2 [a2,c4] e2 g2 [d2,f#3] [a2,c4,e4], d4@3 e4@2 d4@2 ~, ~ a3@3 [g3,b3]@2 a3@2]/8", // G D Am D Am G
  I: "[e2 g2 [d2,f#3] [a2,c4] [e2,g3,b3] [a2,a3,c4] [e2,g3,b3] [a2,a3,c4], [g3,b3] a3 ~@2, ~ d4@2 e4@5]/8", // D Am Em Am Em Am G
  J: "[[g2,g3,b3] [d2,f#3,a3]@2, d4]/3", // G D
  K: "[[a#2,a#3,c#4] [g#2,g#3,c4] [f#2,f#3,d#4] [a#2,c#4,f4] [f#2,f#3,d#4] [c#3,g#3,c#4] [f2,c5] [a2,e4], a#4@3 [a3,c4], f4@2 a#3@3 f4@2 ~]/8", // A#m G# D#m A#m D#m C#5 F5 A5 …
  L: "[e2 g2 [d2,f#3] [a2,c4] e2 g2 [d2,f#3,a3], [g3,b3]@2 a3@2 [g3,b3]@2 ~, ~ d4@2 e4@2 d4@2]/7", // D Am D G
  M: "[[a2,c4] [e2,g3,b3] [a2,a3,c4] [e2,g3,b3] [a2,a3,c4], e4]/5", // Am Em Am Em Am
  N: "[[g2,g3,b3] [d2,f#3]@2 [a2,c4] [e2,g3,b3] [a2,a3,c4] [e2,g3,b3] [a2,a3,c4], d4@3 e4@5, ~ a3@3 ~@4]/8", // G D Am Em Am Em Am
  O: "[[g2,g3,b3]@16 [d2,f#3,a3]@33 [g3,b3]@28 ~@3, d4@77 ~@3, ~@49 g2@25 ~@6]/5", // G D G
})).s("gm_string_ensemble_1").gain(0.31)

// chords · piano
const piano = note("<~@57 A B C D E F G H ~@8 I J ~ K L M N O@3>".pickRestart({
  A: "c6 b5 a5 e5 d5 c5 b4 g4 a4@5 ~ g4 a4, ~@2 a5 ~@5",
  B: "b4@2 e5 b4@2 e5 [b4,g5]@2 ~ [b4,g5]@3 [b4,g5]@3 [b4,g5], a#4 ~@15", // Em
  C: "d5 b5 d5 c5 a5 c5 a4 g5 b4@2 g5 b4@2 g5 a4 g4", D: "f#4 d5@2 f#4 g4 a4 f#5 g4 a4 f#5 g4@2 f#5 ~@3",
  E: "~ a4 c5 d5 [d5,d#5] [c5,d5] a4 [d5,d#5] [c5,d5] a4 c5 d5 [d5,d#5] [c5,d5] a4 c5, ~@4 a5@2 ~ a5@3 ~@2 a5@2 ~@2", // D#maj7 Csus2 D#maj7 Csus2 D#maj7 Csus2
  F: "[d#5,e5] g5 e5 [d#5,e5] g5 e5 [d#5,e5] g5 [e5,d#6,e6] g6 e6 [d#6,e6] g6 e6 ~@2", // Emaj7
  G: "~@5 [e5,c6,e6]!3 [d5,b5,d6] [a5,b5] [e5,g5] g5 ~ e5 [d5,g5] e5", // C G Asus2 Em G5
  H: "a4@2 f#5 g5 e5 [g4,f#5] d5 f#5 d5 e5 c5 e5 [d4,d5] b4 [c4,c5] ~, f#5 ~@2 g4@2 ~ f#4@2 ~ e4@2 ~@5", // Gmaj7 D C
  I: "~@9 c5 d5 [d#5,e5,f5] ~ g5 a5 c6, ~@11 g5@2 ~@3", J: "b5@2 a5 g5 [a#5,b5] g5 e5 e5@2 g5@2 ~@5, a#5 ~@15",
  K: "~@4 c6 [d#6,e6] d6 [c6,a6] d#6 [c6,a6] a5 [c6,a6] ~ [d6,d#6] [a5,c6] c6, ~@5 a6@2 ~@9", L: "~@12 d5 e5 g5 ~",
  M: "g5@2 ~@3 g5 [a#5,b5] [c6,e6] [a#5,d6] [a5,a#5] [d5,g5] c5 [a#4,g5] b4 d5 g5", N: "~@12 f#5 ~@3",
  O: "[~@3 d5 ~@8 f#5@2 ~ f#5@2 g5@27 ~@4]/3",
})).s("gm_piano").gain(0.49)

// chords · piano · soft notes
const piano_soft = note("<~@60 A ~ B C ~@14 D E F@3>".pickRestart({
  A: "~@11 a4@2 g4 a4 f#5", B: "~@14 [d#6,e6] g6", C: "e6 ~@15", D: "~@11 g5 ~ g5 ~ d5",
  E: "~@3 [d5,g5] ~ d5@2 [c5,f#5] ~ f#5@2 e5 a4@2 ~@2, ~@5 g5 ~@3 c5 ~@2 c5 ~@3", // G5 Cdim
  F: "[~@3 g5 ~ d5@2 [c5,f#5] ~ f#5@2 e5 [a4,c5]@2 ~ [a4,c5]@2 [b4,d5]@27 ~@4, ~@5 g5 ~@3 c5 ~@38]/3", // Cdim Am Bm
})).s("gm_piano").gain(0.24)

// chords · piano
const piano_2 = note(`<
  ~@26 A B A B C D E F G ~ H@2 I J@2 K L M N O P Q R@2 S T U V W X@2 Y Z AA AB Y Z AA AB AC AD AC AD C AE AF AG A B A B
  A AH AI@2 AJ@2
>`.pickRestart({
  A: "[a2,e3,a3,c4]", B: "[e2,e3,g3,b3]", C: "c4@7 c4, [a2,a3,e4]", D: "d4@3 d4@3 g3@2, [g2,b3], g3@3 ~",
  E: "[f#3,a3,d4]@12 [f#3,a3,d4]@3 f#3, d2", F: "[f#3,a3,d4] ~@2 g4, d2, ~ [f#3,a3,d4]@3",
  G: "~ c5@2 ~ c5@2 ~ c5@9, b4@3 b4@3 b4@10", H: "[b5@3 d5@2 ~ [d5,a5]@6 [d5,a5]@12 ~@2 e5@3 [g4,a4,d5]@3]/2",
  I: "~@7 e4, b4 e4 c5 b4 e4 c5 b4@2, ~ c5@2 b4@2 e4@2 c5@2 b4@2 e4@2 c5@3",
  J: "[~@11 a4@2 ~@2 b4@2 ~ b4@2 ~ b4@2 ~ b4@2 ~ b4@2 ~ b4@2, ~@10 g4@4 a4@3 a4@3 a4@3 a4@3 a4@3 a4@3]/2",
  K: "~@9 a4@3 a4@4, ~@3 d4@13, ~@3 e4@5", L: "[c4,e4,a4] e4@4 ~ a4@2, a2, ~ c4@7, ~ a4@5 ~@2, ~@5 e4@3",
  M: "[e2,b3]@5 ~ b3@2, [e4,g4], ~@5 e2@3", N: "~@3 a3, [a2,c4,e4,a4], ~@5 e3@3",
  O: "~@3 e3 ~@2 e3@2, [e2,g3,e4], b3@5 b3@3, ~@2 e3 ~", P: "c4@10 c4@3 ~ c4@2, [a2,e4], a3@13 a3@3",
  Q: "d4@3 d4 ~@3 d4, [g2,b3], g3@3 g3, ~@4 d4@3 ~", // G
  R: "[d2@10 ~@2 [f#3,a3,d4]@2 ~ [a3,d4] [a3,d4]@2 [f#3,a3,d4]@2 [f#3,a3,d4]@2 ~ d4@2 ~@5 a4@2, [f#3,a3,d4]@12 ~@2 f#3@4 ~@4 f#3@5 e4@2 f#4@3, ~@5 d2@3 d2@8, ~@23 a3@9, ~@25 d4@7]/2", // D D5 D
  S: "~@7 c#4, [a#2,f4,a#4], c#4@7 ~, ~@3 a#3@4 ~, ~ d#4", // A#5
  T: "f4@2 ~@6 f4@3 ~ f4@2 f4@2, g#2, c4@11 c4@5, g#3@3 g#3@5, ~ f4@3 ~@4",
  U: "d#4@6 d#4@2 d#4@2 ~@3 c#4@3, [f#2,f#3,a#3], ~@5 d#4@3", V: "f4 ~@5 f4@2, a#2, c#4!2, a#3@3 a#3@5, ~ f4@5 ~@2",
  W: "a#3@3 ~@3 d#4@2, [f#2,f#3], d#4@3 ~, ~@3 a#3@5, ~ c#4", // F#
  X: "[[g#3,c#4,f4]@6 ~@6 c#4@4 [a3,c4,f4]@3 c4@3 c4@2 [a3,c4,f4] [a3,c4,f4]@2 [a3,c4,f4]@3 [a3,c4,f4]@2, c#2 f2, ~@6 g#3@12 ~ [a3,f4]@5 ~@8, ~@3 f4@5 ~@8, ~@3 c#4@2 a#3@3 ~@8]/2", // C# F Dm
  Y: "[a1,a2,e3,a3,c4]", Z: "[e1,e2,e3,g3,b3]", AA: "[g1,g2,d3,g3,b3]", AB: "[d1,d2,d3,f#3,a3]", AC: "[a2,a3,c4,e4]",
  AD: "[e2,g3,b3,e4]", AE: "d4@2 ~@5 b3, [g2,g3], b3@7 b3@7 ~@2, ~@2 d4@3 d4@3",
  AF: "[f#3,a3,d4]@2 a3@3 a3 [f#3,a3,d4]@2, d2, ~ [f#3,d4]@2 ~", // D
  AG: "[f#3,a3,d4]@4 [f#3,a3,d4]@2 ~ [a3,d4]@5 [f#3,a3,d4]@4, d2, ~@3 f#3@3 ~@2", AH: "[g2,g3,b3,d4]",
  AI: "[d2,f#3,a3,d4]", AJ: "[~ [g2,g3,b3,d4]@27 ~@4]/2",
})).s("gm_piano").gain(0.49)

// other · distortion guitar
const distortion_guitar = note("<~@6 [e2!5 ~@7 e2!4]!74 [e2!5 ~@7 e2!2 ~ e2] [e2 ~@15] ~>")
  .s("gm_distortion_guitar").gain(0.4)

// other · lead 1 square
const lead_1_square = note("<~@57 [a4 ~ a4 ~@4 a4 ~ g4 a4 ~@3 g4 a4]!23 [a4 ~ a4 ~@4 a4 ~ g4 a4 ~@5] ~@2>")
  .s("gm_lead_1_square").gain(0.4).pan(1)

// other · electric guitar jazz
const electric_guitar_jazz = note("<~@4 [~@4 c4 ~ g4@4 ~ d#4 ~@2 c4 a3, ~@13 d4@2 ~] [a3@7 ~@9] ~@77>")
  .s("gm_electric_guitar_jazz").gain(0.31)

// other · piano
const piano_3 = note("<~@34 A B@2 C A B@2 C ~@15 A B@2 C A B@2 C ~@18>".pickRestart({
  A: "~ c5", B: "b4/2", C: "a4",
})).s("gm_piano").gain(0.05)

// drums · kick
const kick = s("bd").struct("<~@6 [x!2 ~@2 x!2 ~@2]!75 [~ x ~@14] ~>").gain(0.64)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@6 [~@6 x!2 ~@8]!75 ~@2>").gain(0.32)

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

// drums · hihat
const hihat = s("hh").struct("<~@6 [x!8]!74 [x ~ x ~ x ~ x ~ x ~ x ~ x ~@2 x] ~@2>").gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@64 [~@15 x] ~@18>").gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@64 [~@2 x ~@2 x ~@2 x ~@2 x!2 ~ x ~] ~@15 [~@2 x ~@2 x ~@2 x ~@2 x!2 ~@2 x] ~@2>")
  .gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@14 A ~@7 A ~@3 A ~@7 A ~@7 A ~@7 A ~@6 A ~@7 A ~@7 A ~@6 A B ~>".pickRestart({
  A: "x", B: "~ x ~@14",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@50 A B@6 ~@8 A B@7 A B@6 C ~@2>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x ~ x ~ x ~ x ~ x ~ x ~ x ~@2 x",
})).gain(0.4)

// drums · congas
const congas = s("conga:18").struct("<~@9 A B@16 ~@8 B@8 ~@11 A B@11 ~@18>".pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@3 x ~@2",
})).gain(1.02)

// drums · congas
const congas_2 = s("conga:33").struct("<~@9 A B@16 ~@8 B@8 ~@11 A B@11 ~@18>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@4 x!2 ~@6 x!2 ~@2",
})).gain(1.02)

stack(
  bass, bass_2, violin, lead_2_sawtooth, string_ensemble_1, piano, piano_soft, piano_2, distortion_guitar,
  lead_1_square, electric_guitar_jazz, piano_3, kick, kick_soft, snare, hihat, low_tom, mid_tom, crash, ride, congas,
  congas_2
)

More by Zucchero