Strudelify

Questo amore

Battisti

KeyA majorTempo100 bpm
0:00/0:00
// Questo amore — Battisti
// 100 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 22, 4/4 at bar 22, 2/4 at bar 35, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 4 "Chit.Bass." named as a bass, played on electric bass finger (its acoustic guitar nylon patch is not one)
// note: Full arrangement: all 135 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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
const piano = note(`<
  A@8 B@2 C@2 A@2 D A@2 E@2 F G H@5 I J K I J L M N O B@2 C@2 A@2 D A@2 E@2 F G O P Q R Q S T U V P Q R Q S T U V W X Y
  A@6 B@2 C@2 A@2 D A@2 E@2 F G O P Q R Q S T U V P Q R Q S T U V Z AA AB@5 AC A@23
>`.pickRestart({
  A: "~@3 [a3,c#4,d4,f#4] ~@2 [a4,c#5,d5,f#5] ~@3 [a3,c#4,d4,f#4]@6", // Dmaj7
  B: "[f#5,d6] [e5,c#6]@2 [a3,c#4,d4,f#4,f#5,d6] [d5,b5]@2 [a4,c#5,d5,f#5,d6] [e5,c#6]@2 [f#5,d6] [a3,c#4,d4,f#4,d5,b5]@6", // D C#m Dmaj7 G Dmaj7 C#m D Dmaj7
  C: "[e5,c#6] [d5,b5]@2 [g#3,b3,c#4,e4,e5,c#6] [d5,a5]@2 [g#4,b4,c#5,e5,c#6] [d5,b5]@2 [e5,c#6] [g#3,b3,c#4,e4,c#5,a5]@6", // C#m G C#m7 D5 C#m7 G C#m C#m7
  D: "~@3 [g#3,b3,c#4,e4] ~@2 [g#4,b4,c#5,e5] ~@3 [g#3,b3,e4]@3 [g3,a#3,d#4]@3", // C#m7 E D#
  E: "~@3 [g#3,b3,c#4,e4] ~@2 [g#4,b4,c#5,e5] ~@3 [g#3,b3,c#4,e4]@6", F: "[b3,d4,g4] [a#3,c#4,f#4]",
  G: "[b3,d4]@2 [b3,d4] [a3,c#4] ~@4", // Bm A
  H: "[~@8 [f#5,d6] [e5,c#6]@2 [a3,c#4,d4,f#4,f#5,d6] [d5,b5]@2 [a4,c#5,d5,f#5,d6] [e5,c#6]@2 [f#5,d6] [a3,c#4,d4,f#4,d5,b5]@6 [f#5,d6] [e5,c#6]@2 [a3,c#4,d4,f#4,f#5,d6] [d5,b5]@2 [a4,c#5,d5,f#5,d6] [e5,c#6]@2 [f#5,d6] [a3,c#4,d4,f#4,d5,b5]@6 [e5,c#6] [d5,b5]@2 [g#3,b3,c#4,e4,e5,c#6] [d5,a5]@2 [g#4,b4,c#5,e5,c#6] [d5,b5]@2 [e5,c#6] [g#3,b3,c#4,e4,c#5,a5]@6 [e5,c#6] [d5,b5]@2 [g#3,b3,c#4,e4,e5,c#6] [d5,a5]@2 [g#4,b4,c#5,e5,c#6] [d5,b5]@2 [e5,c#6] [g#3,b3,c#4,e4,c#5,a5]@6 ~@3 [a3,c#4,d4,f#4] ~@2 [a4,c#5,d5,f#5] ~]/5", // D C#m Dmaj7 G Dmaj7 C#m D Dmaj7 …
  I: "~@2 [a3,c#4,d4,f#4]@6 ~@3 [a3,c#4,d4,f#4] ~@2 [a4,c#5,d5,f#5] ~", // Dmaj7
  J: "~@2 [a3,c#4,d4,f#4]@6 ~@3 [g#3,b3,c#4,e4] ~@2 [g#4,b4,c#5,e5] ~", // Dmaj7 C#m7
  K: "~@2 [g#3,b3,e4]@3 [g3,a#3,d#4]@3 ~@3 [a3,c#4,d4,f#4] ~@2 [a4,c#5,d5,f#5] ~", // E D# Dmaj7
  L: "~@2 [g#3,b3,c#4,e4]@6 ~@3 [g#3,b3,c#4,e4] ~@2 [g#4,b4,c#5,e5] ~", M: "~ [g#3,b3,c#4,e4]@3 [b3,d4,g4]@4",
  N: "[a#3,c#4,f#4]@4 [b3,d4]@2 [b3,d4] [a3,c#4]", O: "~@5 [b3,d4]!2 [a3,c#4]",
  P: "[a3,d4,f#4]@3 [a3,d4,f#4] ~@2 [g#3,d4,f#4]@10", Q: "[g#3,b3,c#4,e4]@3 [g#3,b3,c#4,e4] ~@2 [g#3,b3,c#4,e4]@10",
  R: "[a3,b3,d4,f#4]@3 [a3,b3,d4,f#4] ~@2 [g#3,b3,d4,f#4]@10", // Bm7 G#m7b5
  S: "[g3,b3,c#4,e4]@3 [g3,b3,c#4,e4] ~@2 [f#3,a#3,c#4,e4]@10", // C#m7b5 F#7
  T: "[f#3,a3,b3,d4]@3 [f#3,a3,b3,d4] ~@2 [e3,g#3,b3,d4]@10", U: "[a3,c4,d4,f4]@3 [a3,c4,d4,f4] ~@2 [a3,c4,d4,f4]@10",
  V: "[a3,b3,d4,e4]@3 [a3,b3,d4,e4] ~@2 [g#3,b3,d4,e4]@10", W: "[a3,c4,f#4] [b3,d4,g4]", X: "[c4,e4,a4] [d4,g4,b4]",
  Y: "[e4,a4,c5] [f4,b4,d5]", Z: "[a3,c4,f4,a4]@3 [a3,c4,f4,a4] ~@2 [a3,c4,f4,a4]@4 c4@3 [a3,c4,f4,a4]@3",
  AA: "[g3,b3,e4,g4]@3 [g3,b3,e4,g4] ~@2 [g3,b3,e4,g4]@4 [g3,b3]@3 [g3,b3,e4,g4]@3", // Em G Em
  AB: "[[a3,d4,f4,a4]@3 [a3,d4,f4,a4] ~@2 [d4,f#4,g4]@7 [g#3,d4,f#4] ~@2 [b3,c4,e4,b4]@3 [b3,c4,e4,b4] ~@2 [a3,c4,e4,a4]@4 a3@3 [c4,e4,f4]@3 [a3,d4,f4,a4]@3 [a3,d4,f4,a4] ~@2 [d4,g4,b4,d5]@7 [d4,b4,d5] ~@2 [b3,c4,e4,b4]@3 [b3,c4,e4,b4] ~@2 [a3,c4,e4,a4]@4 a3@3 [c4,a4]@3 [g#3,c#4,e4,g#4]@2 g#3@2 ~@2 [g#3,c#4,e4,g#4]@10, ~@6 g#3 ~@6 g4@25 ~@7 g4@35]/5", // Dm Gmaj7 G#m7b5 Cmaj7 Am Fmaj7 Dm G …
  AC: "[g3,c4,e4,g4]@3 [g3,c4,e4,g4]@3 [g3,c4,e4]@2 [g3,c4,e4]@2 ~@6, ~@3 g4@2 ~@3", // C
})).s("gm_piano").gain(0.21)

// bass · electric bass finger · "Basso"
const bass = note(`<
  A@4 B@6 C@2 B@2 D B@2 C E F G H I J K L I J M I J K N O P B@2 C@2 B@2 D B@2 C E F G P Q R S T U V W X Q Y Z AA AB AC
  AD AE AF AG ~ A@2 B@6 C@2 B@2 D B@2 C E F G P Q R S T U V W X Q Y Z AA AB AC AD AH AI AJ AK AL AM AN AO AP AQ@23
>`.pickRestart({
  A: "b1 f#2 b2@2 f#3 b3 ~@6 b2@2 b1@2", B: "b1 f#2 b2@2 f#3 b3 ~@8 b1@2, ~@3 b2",
  C: "a1 e2 a2@2 e3 a3 ~@8 a1@2, ~@3 a2", D: "a1 e2 a2@2 e3 a3 ~@4 c#3@3 c3@3", E: "a1 e2 a2@2 e3 a3 ~@10",
  F: "[e2,e3] [f#2,e3]", G: "[b2,f#3]@2 [b2,f#3] [a2,e3] ~@4", H: "~@8 b1 f#2 b2@2 f#3 b3 ~@2",
  I: "~@6 b1@2 b1 f#2 b2@2 f#3 b3 ~@2, ~ b2 ~@2", J: "~@6 b1@2 a1 e2 a2@2 e3 a3 ~@2, ~ b2 ~@2",
  K: "~@6 a1@2 a1 e2 a2@2 e3 a3 ~@2, ~ a2 ~@2", L: "~@6 a1@2 b1 f#2 b2@2 f#3 b3 ~@2, ~ a2 ~@2",
  M: "~@2 c#3@3 c3@3 b1 f#2 b2@2 f#3 b3 ~@2", N: "~ [e2,e3]", O: "[f#2,e3]@4 [b2,f#3]@2 [b2,f#3] [a2,e3]",
  P: "~@5 [b2,f#3]!2 [a2,e3]", Q: "b2@3 b2 ~ b2 f#2 f2 e2@2 e2 ~@2 e2 g2 g#2", R: "a2@3 a2 ~ a2 e3!2 a2@3 ~ a2@2 ~ a#2",
  S: "b2@3 b2 ~ a2 b2 a2 e3@3 e3 ~ c#3 b2 a#2", T: "a2@3 a2 ~ a2!3 a2@3 a2 ~ a2 b2 c3",
  U: "c#3@3 c#3 ~ c#3 g2!2 f#2@3 f#2 ~ g#2 a2 a#2", V: "b2@3 b2 ~ b2 f#3!2 b2@3 b2 ~ a#2 b2 c#3",
  W: "d3@3 d3 ~ a2!3 d3@3 d3 ~ d3!3", X: "e3 e3@2 e3@2 e3@2 e3 e2@2 f#2@2 g#2@2 a2@2",
  Y: "a2@3 a2 ~ a2 e3 f#3 a2@3 a2 a2@2 ~ a#2", Z: "b2@3 b2 ~ b2 f#3 d3 e3@3 e3 ~ e3 c#3 b2",
  AA: "a2@3 a2 ~ a2 c#3 e3 f#3 e3@2 d3@2 c#3 b2 c3", AB: "c#3@3 c#3 ~ c#3 g2 e2 f#2@3 f#2 ~ g2 a2 a#2",
  AC: "b2@3 b2 ~ f#2 a2 a#2 b2@3 b2 ~ a#2 b2 c#3", AD: "d3@3 d3 ~ a2 b2 a2 d3@3 d3 ~ b2 d3 d#3",
  AE: "e3 e3@2 e3@2 e3@2 e3 e2@2 b2@2 e3@2 d#3@2", AF: "[d2,d3]", AG: "[d2,d3] ~@3",
  AH: "e3 e3@2 ~@2 e2!3 e2@2 e3@2 e2@2 e3@2", AI: "d3 [d2,a2] e2@2 f2@2 f#2@2 g2@2 g#2@2 a2@2 b2@2",
  AJ: "c3@3 c3 ~ a2 g2 a2 c3@3 c3 ~ c3 b2 c3", AK: "b2 c3 d3 d#3 e3 e2 f#2 g#2",
  AL: "a2@3 a2 ~ a2 e2!2 a2@3 a2 ~ g#2 a2 a#2", AM: "b2@3 [b2,g#3]@2 g#3@3",
  AN: "a2@3 a2 ~ a2 a3!2 a2@3 a2 ~ a#2 b2 c3", AO: "c#3@3 c#3 ~ c#3 g#3!2 c#3@3 c#3 ~ c#3!3",
  AP: "c3@4 c3@2 c3!2 c3@2 ~@6", AQ: "b1 f#2 b2@2 f#3 b3 ~@8 a1@2, ~@3 b2",
})).s("gm_electric_bass_finger").gain(0.64)

// bass · electric bass finger · "Chit.Bass."
const bass_2 = note(`<
  ~@4 A@6 B@2 A@2 B A@2 B C D ~ E F G H I F G I F G H J K ~ A@2 B@2 A@2 B A@2 B C D ~@23 A@6 B@2 A@2 B A@2 B C D ~@22 L
  ~@3 A@23
>`.pickRestart({
  A: "~@3 b2!5 b2@2 d3@2 ~@4", B: "~@3 a2!5 a2@2 c#3@2 ~@4", C: "~@3 a2!5 a2@2 b2@2 c#3@2 d3@2", D: "e3 f#3",
  E: "~@11 b2!5", F: "b2@2 d3@2 ~@7 b2!5", G: "b2@2 d3@2 ~@7 a2!5", H: "a2@2 c#3@2 ~@7 a2!5", I: "a2@2 c#3@2 ~@7 b2!5",
  J: "a2 b2 c#3 d3 e3@4", K: "f#3 ~", L: "b2 a2 g2 f2 e2 f#2 g2 g#2",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · epiano2 · "Sint."
const epiano2 = note(`<
  ~@50 A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~@24 A ~ A ~ A ~ B ~ A ~ A ~ A ~ B ~@10 C D E F G H I H I H I H I H I H I H J ~@2
>`.pickRestart({
  A: "a4 b4 c#5 d5 e5 ~@3", B: "e5 f#5 g#5 a5 b5 ~@3", C: "[b4,d5] [c#5,e5]", D: "[b4,d5,f#5] [c#5,e5,g#5]",
  E: "[b4,d5,f#5,a5] [c#5,e5,g#5,b5]", F: "[b4,d5,f#5,a5,c#6] [c#5,e5,g#5,b5,d6]",
  G: "[b4,d5,f#5,a5,c#6,e6] [c#5,e5,g#5,b5,d6,f#6]", H: "[b4,d5,f#5,a5,c#6,e6,g#6] [a4,c#5,e5,g#5,b5,d6,f#6,a6]",
  I: "[b4,d5,f#5,a5,c#6,e6,g#6] [c#5,e5,g#5,b5,d6,f#6]", J: "[b4,d5,f#5,a5,c#6,e6,g#6] ~",
})).s("gm_epiano2").gain(0.15)

// chords · epiano2 · "Sint." · soft notes · C#m7 Bm7 Amaj7 Bm7 C#m7
const epiano2_soft = note(`<
  ~@132
  [~ [c#5,e5,g#5,b5,d6,f#6]]
  [[b4,d5,f#5,a5,c#6,e6,g#6] [a4,c#5,e5,g#5,b5,d6,f#6,a6]]
  [[b4,d5,f#5,a5,c#6,e6,g#6] [c#5,e5,g#5,b5,d6,f#6]]
>`).s("gm_epiano2").gain(0.06)

// chords · drawbar organ · "Organo"
const drawbar_organ = note("<~@65 A@3 ~@67>".pickRestart({
  A: "[~ [c6,e6]@2 [b5,d6]@2 [a5,c#6]@2 [g5,b5]@2 [f#5,a5]@2 [e5,g5]@2 [d5,f#5]@2 [c5,e5]@2 [b4,d5]@2 [a4,c5]@2 [g4,b4]@2 [f#4,a4]]/3", // C Bm A G F#m Em D C …
})).s("gm_drawbar_organ").gain(0.64)

stack(piano, bass, bass_2, epiano2, epiano2_soft, drawbar_organ)

More by Battisti