Strudelify

Arrivederci a questa sera

Battisti

KeyD majorTempo120 bpm
0:00/0:00
// Arrivederci a questa sera — Battisti
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 130 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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.

// chords · piano · "Canto"
const piano = note(`<
  ~@15 A@2 B@2 C@2 B@2 D@2 E@2 F@2 G ~ A@2 B@2 C@2 B@2 D@2 E@2 F@2 G H@3 ~ H@3 A@2 B@2 C@2 B@2 D@2 E@2 F@2 G I@3 ~@20
  A@2 B@2 C@2 B@2 D@2 E@2 F@2 G H@3 ~ H@3 ~ H@3 ~ H@3 ~ H@3 ~@5
>`.pickRestart({
  A: "[~@2 f#5@2 f#5@2 e5 f#5@2 g5 ~@6]/2", B: "[~@6 a4@2 f#5@4 f#5@2 f#5@4 e5 d5 ~@12]/2",
  C: "[~@3 f#5 f#5@2 e5 f#5@2 g5 ~@6]/2", D: "[~@2 a5@2 a5@2 a5 a5@2 b5@3 ~@4]/2",
  E: "[~@6 a4@2 a5@4 a5@2 a5@4 g5 f#5 ~@12]/2", F: "[~@3 f#5 f#5@2 e5 f#5@2 g5@3 ~@3 g5]/2", G: "f#5 e5 f#5@2 ~@4",
  H: "[[f#5,a5]!7 [f#5,a5]@2 [f#5,a5] [f#5,a5]@2 [f#5,a5]@2 [e5,g5] [f#5,a5]@2 [g5,b5]@3 ~@4]/3", // F#m Em F#m G
  I: "[[a5,d6]!7 [a5,c#6]@2 [a5,c#6] [a5,c#6]@2 [a5,c#6]@2 [g5,b5] [a5,c#6]@2 [b5,d6]@3 ~@4]/3", // D5 A G A Bm
})).s("gm_piano").gain(0.64)

// chords · piano · "Canto" · soft notes
const piano_soft = note("<~@126 A@3 ~>".pickRestart({
  A: "[[f#5,a5]!7 [f#5,a5]@2 [f#5,a5] [f#5,a5]@2 [f#5,a5]@2 [e5,g5] [f#5,a5]@2 [g5,b5]@3 ~@4]/3", // F#m Em F#m G
})).s("gm_piano").gain(0.24)

// chords · piano
const piano_2 = note(`<
  A@12 B@4 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 E@4 F@4 C@2 D@2 C@2 D@2 C@2 D@2 C@2 G@2 ~ H G@2 ~
  I J@2 K@2 J@2 L@2 J@2 K@2 J@2 M N C@2 D@2 C@2 D@2 C@2 D@2 C@2 E@24
>`.pickRestart({
  A: "[[a3,d4,f#4,a4]@2 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4] [a3,d4,f#4,a4]@2 a3 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4] [a3,d4,g4,a4]@2 a3 [b3,d4,g4,a4]@2 [a3,d4,g4,a4]@2 [b3,d4,g4,a4] [a3,d4,g4,a4]@3 [b3,d4,g4,a4]@2 [b3,d4,g4,a4]@2 [b3,d4,g4,a4]@2]/4", // D Bm7 D Bm7 D Bm7 D Bm7 …
  B: "[[a3,d4,f#4,a4]@2 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4] [a3,d4,f#4,a4]@2 a3 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4] [a3,d4,g4,a4]@2 a3 [b3,d4,g4,a4]@2 [a3,d4,g4,a4]@2 [b3,d4,g4,a4] [a3,d4,g4,a4]@3 [b3,d4,g4,a4]@6]/4", // D Bm7 D Bm7 D Bm7 D Bm7 …
  C: "[[g3,b3,d4]@2 [g3,a3,c#4,e4]@2 [g3,b3,d4]@2 [g3,a3,c#4,e4] [g3,b3,d4]@2 g3 [g3,a3,c#4,e4]@2 [g3,b3,d4]@2 [g3,a3,c#4,e4]@2]/2", // G A7 G A7 G A7 G A7
  D: "[[f#3,a3,b3,d4]@2 [f#3,a3,c#4,e4]@2 [f#3,a3,b3,d4]@2 [f#3,a3,c#4,e4] [f#3,a3,b3,d4]@2 f#3 [f#3,a3,c#4,e4]@2 [f#3,a3,b3,d4]@2 [f#3,a3,c#4,e4]@2]/2", // Bm7 F#m7 Bm7 F#m7 Bm7 F#m7 Bm7 F#m7
  E: "[[a3,d4,f#4,a4]@2 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4] [a3,d4,f#4,a4]@2 a3 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4] [a3,d4,g4,a4]@2 a3 [b3,d4,g4,a4]@2 [a3,d4,g4,a4]@2 [b3,d4,g4,a4] [a3,d4,g4,a4]@2 a3 [b3,d4,g4,a4]@2 [a3,d4,g4,a4]@2 [b3,d4,g4,a4]@2]/4", // D Bm7 D Bm7 D Bm7 D Bm7 …
  F: "[[a3,d4,f#4,a4]@2 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4] [a3,d4,f#4,a4]@2 a3 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4] [a3,d4,g4,a4]@2 a3 [b3,d4,g4,a4]@2 [a3,d4,g4,a4]@2 [b3,d4,g4,a4] [a3,d4,g4,a4]@2 a3 [b3,d4,g4,a4]@6]/4", // D Bm7 D Bm7 D Bm7 D Bm7 …
  G: "[[a3,d4,f#4,a4]@2 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4] [a3,d4,f#4,a4]@2 a3 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4]@2]/2", // D Bm7 D Bm7 D Bm7 D Bm7
  H: "~ [e3,a3,c#4,e4]@3 [f#3,b3,d4,f#4]@2 [g3,b3,d4,g4]@2", I: "~ [e3,a3,c#4,e4]@3 [f#3,b3,d4,f#4] ~@3",
  J: "[[a3,d4,g4,a4]@2 [a3,d4,g4,a4]@2 [a3,d4,g4,a4]@2 [a3,d4,g4,a4] [a3,d4,g4,a4]@2 a3 [b3,d4,g4,a4]@2 [a3,d4,g4,a4]@2 [b3,d4,g4,a4]@2]/2", // Dsus4 G Dsus4 G
  K: "[[a3,d4,f#4,a4]@2 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4] [a3,d4,g4,a4]@2 a3 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4]@2]/2", // D Bm7 D Bm7 Dsus4 Bm7 D Bm7
  L: "[[a3,d4,f#4,a4]@2 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4] [a3,d4,f#4,a4]@3 [b3,d4,f#4,a4]@2 [a3,d4,f#4,a4]@2 [b3,d4,f#4,a4]@2]/2", // D Bm7 D Bm7 D Bm7 D Bm7
  M: "[a3,c#4,e4]", N: "[b3,d4,f#4]",
})).s("gm_piano").gain(0.18)

// bass · electric bass finger · "Basso"
const bass = note(`<
  A B C@2 A B C@2 A B C@2 A B D@2 E F A G E F H@2 E F H@2 E F H@2 E F A G E F H@2 E F H@2 I@2 A B J@2 A B K@2 E F A G E
  F H@2 E F H@2 L@2 M@2 N@2 M@2 O@2 P F A G E F H@2 E F A G Q@2 R S E F A G E F H@2 E F H@2 I@2 A B J@2 A B J@2 A B J@2
  A B J@2 A B J@2 A B J@2
>`.pickRestart({
  A: "d2@2 ~@3 e2 f2 f#2", B: "~@5 f#2 f2 e2", C: "[~@5 g2 g#2 a2@2 b2 d3 ~@2 c2@2 c#2]/2",
  D: "[~@5 g2 g#2 a2@2 b2 d3 ~ d2 d3 d#2 d#3]/2", E: "e2@2 ~@3 g2 g#2 a2", F: "~@5 c2@2 c#2", G: "~@5 f#2@2 f2",
  H: "[d2@2 ~@3 e2 f2 f#2@2 a2 a#2 b2@2 f#2@2 f2]/2", I: "[e2@2 ~@3 g2 g#2 a2@2 b2 d3@2 c2 c3 c#2 c#3]/2",
  J: "[~@5 g2 g#2 a2@2 b2 d3@2 ~ c2@2 c#2]/2", K: "[~@5 g2 g#2 a2@2 b2 d3 b2 d2 d3 d#2 d#3]/2",
  L: "[e2@2 ~@3 g2 g#2 a2@2 b2 d3@2 ~ c2@2 c#2]/2", M: "[d2@2 ~@3 e2 f2 f#2@2 a2 a#2 b2@2 a2@2 g#2]/2",
  N: "[[g2,d3,g3,b3]@3 [g2,e3,a3,c#4]@3 g2@2 g2 g2@3 a2@2 a2@2, ~@6 [d3,g3,b3,d4]@3 ~@7]/2", // G A7 G
  O: "[[g2,d3,g3,b3]@6 [g2,e3,a3,c#4]@6 g2@4 ~@2 a1@6 a2@2 ~@2 [a3,b3] [d3,e3,f#3,g3] [a2,b2,c#3] [d2,e2,f#2,g2], ~@6 [d3,g3,b3,d4]@3 ~@7, ~@8 g2@3 ~@5]/2", // G A7 Asus2 Em7 A Em7 G
  P: "[b1,c#2] ~@9 g2@2 g#2@2 a2@2, e2 ~@3", Q: "[e2@2 ~@3 g2 g#2 a2@2 b2 d3@2 ~ a2@2 g2]/2", R: "f#2!6 a2 a#2",
  S: "b2 b3 a2 a3 g2 g3 f#2 f2",
})).s("gm_electric_bass_finger").gain(0.64)

stack(piano, piano_soft, piano_2, bass)

More by Battisti