Strudelify

Benvenuti in paradiso

Antonello Venditti

KeyD majorTempo95 bpm
0:00/0:00
// Benvenuti in paradiso — Venditti Antonello
// 95 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@4 A@2 B@2 C D E F A@2 B@2 C D E F A@2 B@2 C D E G B H I@2 J K L M I@2 J K L G B H N@3 O@2 N P ~ A@2 B@2 C D E F A@2
  B@2 C D E G B H I@2 J K L M I@2 J K L G B H N@3 Q@2 N P ~@7 L G B H I@2 J K L M I@2 J K L G B H R
>`.pickRestart({
  A: "d2 ~ d2 ~ d2 ~@2 d2 ~ d2 ~@2 d2 ~@3", B: "g2 ~ g2 ~ g2 ~@2 g2 ~ g2 ~@2 g2 ~@3",
  C: "b2 ~ b2 ~ b2 ~@2 b2 ~ b2 ~@2 b2 ~@3", D: "c3 ~ c3 ~ c3 ~@2 c3 ~ c3 ~@2 c3 ~@3",
  E: "e2 ~ e2 ~ e2 ~@2 e2 ~ e2 ~@2 e2 ~@3", F: "g2 ~ g2 ~ g2 ~@2 a2 ~ a2 ~@2 a2 ~@3",
  G: "f#2 ~ f#2 ~ f#2 ~@2 f#2 ~ f#2 ~@2 f#2 ~@3", H: "a2 ~ a2 ~ a2 ~@2 a2 ~ a2 ~@2 a2@2 ~@2",
  I: "d2 ~ d2 ~ d2 ~@2 d2 ~ d2 ~@2 d2 d2@2 ~", J: "d2 ~ d2 ~ d2 ~@2 d2 ~ d2 ~@2 d2@3 ~",
  K: "d2 ~ d2 ~ d2 ~@2 d2 ~ d2 ~@2 d2@4", L: "e2 ~ e2 ~ e2 ~@2 e2 ~ e2 ~@2 e2!2 ~@2",
  M: "g2 ~ g2 ~ g2 ~@2 a2 ~ a2 ~@2 g2 a2@2 ~", N: "a2 ~ a2@2 ~@6 a2@6",
  O: "[a2 ~ a2@2 ~@4 g3 ~ f#3 ~ d3!2 e3 a2@2 a2 a2@3 ~@5 a2@5 ~]/2", P: "d3 ~@7",
  Q: "[a2 ~ a2@2 ~@4 g3 ~ f#3 ~ d3!2 e3 a2@2 a2 a2@2 ~@6 a2@5 ~]/2", R: "d2@3 ~@13",
})).s("gm_acoustic_bass").gain(0.42)

// bass · electric bass finger · "AC/SL.BASS"
const bass_2 = note("<A B@43 ~@6 B@34 ~@6 B@7 C ~@4 B@14 ~>".pickRestart({
  A: "~@2 a3 ~ b3 ~ b3 ~ f#3 ~ f#3 a3 ~ a3 d4!2", B: "d4!2 a3 ~ b3 ~ b3 ~ f#3 ~ f#3 a3 ~ a3 d4!2",
  C: "d4!2 a3 ~ b3 ~ b3 ~ f#3 ~ f#3 a3 ~ a3 ~@2",
})).s("gm_electric_bass_finger").gain(0.39)

// chords · slap bass 1 · "AC/SL.BASS"
const slap_bass_1 = note("<~@44 A B A C A B ~@34 A B A C A B ~@27>".pickRestart({
  A: "[e5,a5] e5 ~ [e5,a5] ~ a5@3 [e5,a5] ~@2 [e5,a5] ~@2 [e5,a5] ~, ~@5 e5 ~@10", // A5
  B: "[d5,a5] d5 ~ [d5,a5] ~ a5@3 [d5,a5] ~@2 [d5,a5] ~@2 [d5,a5] ~, ~@5 d5 ~@10", // D5
  C: "[d5,a5] d5 ~ d5@2 a5@3 [d5,a5] ~@2 [d5,a5] ~@2 [d5,a5] ~, ~@5 d5 ~@10", // D5
})).s("gm_slap_bass_1").gain(0.64)

// chords · slap bass 1 · "AC/SL.BASS" · soft notes
const slap_bass_1_soft = note("<~@44 A B A C A B ~@34 A B A C A B ~@27>".pickRestart({
  A: "~@2 e5 ~@3 e5!2 ~ e5!2 ~@2 e5 ~ e5", B: "~@2 d5 ~@3 d5!2 ~ d5!2 ~@2 d5 ~ d5",
  C: "~@2 d5 ~@4 d5 ~ d5!2 ~@2 d5 ~ d5",
})).s("gm_slap_bass_1").gain(0.32)

// other · tenor sax · "AC/SL.BASS"
const tenor_sax = note("<~@98 A B C@2 ~@15>".pickRestart({
  A: "g4 d5!2 d5@4 g4", B: "a4@2 d5 ~ d5@2 d5@7 ~ a4@2",
  C: "[b4@2 d5@2 d5@2 d5@4 f#5@3 ~ f#5@4 g5 f#5 ~@12, ~@10 f5 ~@3 f5 ~@17]/2",
})).s("gm_tenor_sax").gain(0.64)

// chords · piano · "PNO/BRASS"
const piano = note(`<
  ~@4 A@2 B@2 C@3 D A@2 B@2 C@3 D A@2 B@2 C@3 E F G H@4 I J H@4 I K F G ~@8 A@2 B@2 C@3 D A@2 B@2 C@3 E F G H@4 I J H@4
  I K F G ~@14 I K F G H@4 I J H@4 I K F L ~
>`.pickRestart({
  A: "[[f#3,a3,d4]@3 [g3,a3,d4]@4 [f#3,a3,d4]@9]/2", B: "[f#3@6 g3@7 a3 ~ a3@17, [a3,d4]@7 [g3,d4]@9]/2",
  C: "[[f#3,a3,d4]@3 [g3,a3,d4]@4 ~@4 [g4,g5] [f#4,f#5] [d4,d5,g5] [a3,a4,f#5] d5 a4 ~@2 g5 f#5 ~ a4 g4, ~@7 [f#3,a3,d4]@6 ~@2 g3@9, ~@15 g4@2 g4@6 ~, ~@32 [e3,b3,d4]@15 ~, ~@6 d5!2]/3", // D Gsus2 G F# G5 D E7
  D: "b4 d5 b4 [a3,c#4,d4]@5, [a3,b3,d4]@3 c#5@3 ~@2", E: "a4@2 d5@11 ~@3, [f#3,a3,c#4,d4]@15 ~",
  F: "[g3,a3,b3,d4]@15 ~", G: "[a3,c#4,d4]",
  H: "[d4@11 ~ e4 f#4 ~@2 [g3,f#4]@16, f#3@15 b3@17, a3@10 ~ a3@2 ~ d4@18]/2", I: "[e3,b3,d4]@15 ~",
  J: "[a3,b3,d4]@3 [a3,c#4,d4]@5", K: "[f#3,a3,c#4,d4]@15 ~", L: "[a3,c#4]",
})).s("gm_piano").gain(0.64)

// chords · brass section · "PNO/BRASS"
const brass_section = note("<~@44 A B C D@2 B ~@34 A B C D@2 B ~@26 E>".pickRestart({
  A: "[a4,c#5,e5,a5]@15 ~", B: "[b4,d5,g5] [a4,d5,f#5]", C: "[a4,c#5,e5], a5@7 ~",
  D: "[[b4,d5,g5]@8 [g4,g5] ~ f#4 ~ [d4,d5] d4 [e4,e5] ~ [c#5,e5,a5]@16, ~@8 a4@7 [a3,a4]@17, ~@8 d5@4 ~ d5@2 ~@17, ~@4 f#5 f#5@3 ~@8]/2", // G D E A
  E: "[d4,f#4,d5,a5]@3 ~@13", // D
})).s("gm_brass_section").gain(0.56)

// drums · kick
const kick = s("bd").struct("<A@30 B@14 C@6 A@20 B@14 C@6 A@8 B@17 A D>".pickRestart({
  A: "x!2 ~ x ~@4", B: "x!2 ~ x ~ x ~@2", C: "x!2 ~@3 x ~@2", D: "x",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct("<A@29 B A@13 C D@6 A@19 B A@13 C D@6 A@7 E A@3 C A@13 B F>".pickRestart({
  A: "~@4 x ~@2 x ~ x ~@2 x ~@2 x", B: "~@4 x ~@2 x!6 ~ x!2", C: "~@4 x ~@2 x ~ x ~@2 x!4", D: "~ x ~ x",
  E: "~@4 x ~@2 x!3 ~@2 x ~@2 x", F: "x",
})).gain(0.38)

// drums · hihat
const hihat = s("hh").struct(`<
  A@30 B@6 C B@3 C B@3 C B C B@3 A@20 B@6 C B@3 C B@3 C B C B@3 A@7 D C B@9 C B@3 C B@2 A ~
>`.pickRestart({
  A: "x!2 ~@2 x ~@3 x ~@3 x ~@3", B: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", C: "~ x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2",
  D: "x!3 ~ x ~@7 x ~@3",
})).gain(0.29)

// drums · open hat
const open_hat = s("oh").struct("<[~ x ~ x ~ x ~ x]!116 ~>").gain(0.38)

// drums · crash
const crash = s("cr").struct("<~@36 A ~@3 A ~@3 A ~ A ~@29 A ~@3 A ~@3 A ~ A ~@10 B A ~@9 A ~@3 A ~@3 A>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.43)

// drums · tambourine
const tambourine = s("tb").struct(`<
  [x!6 ~ x!2 ~@2 x!3 ~@2]!44
  ~@6
  [x!6 ~ x!2 ~@2 x!3 ~@2]!34
  ~@6
  [x!6 ~ x!2 ~@2 x!3 ~@2]!26
  ~
>`).gain(0.38)

// drums · bongos
const bongos = s("bongo:18").struct("<~@97 [~ x] ~@18 x>").gain(1.25)

// drums · ht
const ht = s("ht").struct("<[~@3 x]!44 ~@6 [~@3 x]!34 ~@6 [~@3 x]!7 [~@5 x ~@6 x ~@3] [~@3 x]!18 ~>").gain(0.19)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct(`<
  ~@4
  [x ~ x!5 ~ x ~ x!5 ~]!40
  ~@8
  [x ~ x!5 ~ x ~ x!5 ~]!32
  ~@14
  [x ~ x!5 ~ x ~ x!5 ~]!18
  ~
>`).gain(1.82)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@97 [~@7 x ~@8] ~@19>").gain(2.42)

// drums · shaker
const shaker = s("sh").struct("<~@97 [~ x ~@2] ~@19>").gain(0.48)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@97 [~ x ~ x ~@12] ~@19>").gain(0.62)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct("<~@97 x ~@19>").gain(0.62)

stack(
  bass, bass_2, slap_bass_1, slap_bass_1_soft, tenor_sax, piano, brass_section, kick, snare, hihat, open_hat, crash,
  tambourine, bongos, ht, agogo_bells, cabasa, shaker, woodblocks, woodblocks_2
)

More by Antonello Venditti