Strudelify

Per nome

Battisti

KeyF majorTempo86 bpm
0:00/0:00
// Per nome — Battisti
// 86 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(86/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(`<
  ~@3 A@2 B@2 C D E F G@2 H@2 I J K ~ L M N@2 O P Q R S T ~ U V@2 W@2 X@2 Y Z AA@2 AB@2 ~ AC@2 AD AE AF@2 AG@2 L M AH M
  AI D AJ AK AL@2 AM@2 U AA@2 AN@4 AO@2 AP@2 AQ@2 ~ AR@2 ~@32
>`.pickRestart({
  A: "[~@6 f5@2 e5@2 e5@2 c5@2 a4 c5@3 c5@2 ~@12]/2", B: "[~@6 a4@2 a4@2 bb4 bb4@3 c5 c5@3 c5@2 ~@12]/2",
  C: "~@6 c5@2 c5 d5 e5@4 e5@2", D: "e5 f5 ~@6", E: "~@3 f5 f5@2 a4@2", F: "g4 ~@3",
  G: "[~@6 g5@2 f5@2 f5@2 bb4@2 bb4 d5@3 d5@2 ~@12]/2", H: "[~@6 bb4@2 bb4@2 c5@2 c5@2 d5 d5@3 d5@2 ~@12]/2",
  I: "~@6 d5@2 d5@3 e5@2 f5@3", J: "f5@2 g5@2 ~@2 d5@2 d5@2 e5 e5@3 f5@2", K: "f5 g5 ~@6",
  L: "~@6 f5@2 e5@2 e5 c5@3 a4@2", M: "c5!2 ~@6", N: "[~@4 c5@2 a4 d5@2 d5 ~@6]/2", O: "~@8 gb5@3 gb5@2 gb5@3",
  P: "g5@2 g5@2 ~@2 g5!2 g5@3 g5@2 g5@3", Q: "f5@2 f5@2 ~@4 g5@3 g5@2 g5@3", R: "f5 c5 ~@6", S: "~@3 f5 e5!2 c5!2",
  T: "a4 c5!4 ~@3", U: "~@3 [bb4,g5]",
  V: "[[bb4,g5] [a4,f5]@3 [a4,f5]@2 [bb4,g5] [bb4,g5]@2 [a4,f5]@3 [a4,f5]@2 [bb4,g5] [bb4,g5]@3 [a4,f5]@2 ~@11 [bb4,g5]]/2", // Eb Dm Eb Dm Eb Dm Eb
  W: "[[bb4,g5] [a4,f5]@3 [a4,f5]@2 [bb4,g5] [bb4,g5]@2 [a4,f5]@3 [a4,f5]@2 [bb4,g5] [bb4,g5]@3 [a4,f5]@2 ~@10 [bb4,g5]@2]/2", // Eb Dm Eb Dm Eb Dm Eb
  X: "[[bb4,g5] [a4,f5]@3 [a4,f5]@2 [bb4,g5] [bb4,g5]@2 [a4,f5]@3 [a4,f5]@2 [bb4,g5] [bb4,g5]@3 [a4,f5] ~@11 a4@2]/2", // Eb Dm Eb Dm Eb Dm
  Y: "a4 g4 g4@3 a4!2 g4 ~@4 g4@2 a4@2", Z: "a4 g4 ~@5 [c5,a5]",
  AA: "[[c5,a5]@2 [bb4,g5] [bb4,g5]@3 [c5,a5] [c5,a5]@2 [bb4,g5]@2 [bb4,g5]!2 [c5,a5]@2 [c5,a5]@2 [bb4,g5] ~@12 [c5,a5]@2]/2", // F Eb F Eb F Eb F
  AB: "[[c5,a5] [bb4,g5] [bb4,g5]@3 [c5,a5]@3 [c5,a5] [bb4,g5] [bb4,g5]@4 [c5,a5] [c5,a5]@2 [bb4,g5] ~@14]/2", // F Eb F Eb F Eb
  AC: "[~@3 c5 c5@2 a4 d5@2 ~@7]/2", AD: "~@4 gb5@2 gb5@2 gb5@3 gb5@2 gb5@3", AE: "g5 g5@2 g5!2 g5@2 g5",
  AF: "[f5@2 f5@2 ~@2 f5@2 g5@4 g5@2 g5 f5@3 c5@2 ~@12]/2", AG: "[~@6 f5@2 e5 e5@3 c5@2 a4 c5@3 c5@2 ~@12]/2",
  AH: "~@4 a4!4 ~@3 a4 bb4@2 c5@2", AI: "~@4 c5@2 c5@2 c5@3 d5@2 e5@3", AJ: "~@8 f5@3 f5@2 a4@3", AK: "g4!2 ~@6",
  AL: "[~@6 g5@2 f5@2 f5 f5@3 bb4 d5@2 d5 ~@14]/2", AM: "[~@6 bb4@2 bb4@2 c5 c5@3 d5 d5@3 d5@2 ~@12]/2",
  AN: "[[c5,a5] [bb4,g5] [bb4,g5]@3 [c5,a5]@3 [c5,a5] [bb4,g5] [bb4,g5]@4 [c5,a5] [c5,a5]@2 [bb4,g5] ~@12 [bb4,g5] [bb4,g5]@2 [a4,f5]@3 [a4,f5]@2 [bb4,g5] [bb4,g5]@2 [a4,f5] [a4,f5]@4 [bb4,g5] [bb4,g5]@2 [a4,f5] ~@12 a4@2]/4", // F Eb F Eb F Eb Dm Eb …
  AO: "[a4 g4 g4@3 a4!2 g4 ~@4 g4@2 a4 a4@2 g4 ~@13 [c5,a5]]/2", // F
  AP: "[[c5,a5] [bb4,g5]@3 [bb4,g5]@2 [c5,a5] [c5,a5]@2 [bb4,g5] [bb4,g5]@4 [c5,a5] [c5,a5]@2 [bb4,g5] ~@12 [c5,a5]@2]/2", // F Eb F Eb F Eb F
  AQ: "[[c5,a5] [bb4,g5] [bb4,g5]@3 [c5,a5] [c5,a5]@3 [bb4,g5]@3 [bb4,g5]@2 [c5,a5] [c5,a5]@2 [bb4,g5] ~@14]/2", // F Eb F Eb F Eb
  AR: "[~@3 c5 c5@2 a4 d5@3 ~@6]/2",
})).s("gm_piano").gain(0.64)

// chords · epiano2 · "Piano"
const epiano2 = note(`<
  A@8 B C D E F@6 A@2 B G@2 H I J A@2 K L M N O N P Q R S T U V U W@2 X@2 Y Z AA AB AC@2 AD AE AF@2 AG AH AI@7 AJ@2 AK@8
  AL AM AN AO@7 AP@4 AQ@3 AR@7 AS@8 AT@5
>`.pickRestart({
  A: "[[a3,c4,f4]@4 g4 a4@2 [c4,f4,g4]@3 g4 a4@5, ~@4 [c4,f4]@3 ~@3 [c4,f4]@6]/2", B: "~ [a3,c4,f4]@3 ~ [c4,f4,a4]@3",
  C: "~ [g4,a4,c5]@5 a4@2", D: "[d4,bb4] a4 g4@2 d4@2 [bb3,g4]@10", E: "[d4,bb4] a4 g4@2 d4@2 [bb4,d5]@10",
  F: "[[bb3,d4,g4]@4 a4 bb4@2 [d4,g4,a4]@3 a4 bb4@5, ~@4 [d4,g4]@3 ~@3 [d4,g4]@6]/2", // Gm Dsus4 G5
  G: "[~ [c4,f4,a4,c5]@3 ~ [c4,g4,c5] a4 [d4,gb4,a4,d5]@9]/2", H: "~ [gb4,a4,d5]@3 [a4,d5,gb5]@2 [a4,d5,gb5,a5]@2",
  I: "[g4,d5,g5] bb4 d5 [bb4,d5,g5]@5", J: "[d5,f5] f4 bb4 [d5,f5]@2 [bb4,d5,g5]@3", K: "~ [c4,e4]@3 ~ [d4,f4]@3, c5",
  L: "~ [e4,g4]@3 ~ [d4,f4]@3, c5", M: "~@2 [c4,e4]@6 ~@2 c4 d4 e4@2 [bb3,g4]@2, c5",
  N: "[bb3,g4] a3@3 ~ [a3,c4]@2 g4, c4 ~, ~ f4@6 ~", O: "[bb3,g4] f4@4 [f4,a4]@2 g4, c4 ~, ~ a3@3 ~@4",
  P: "[bb3,g4]@2 a3@6 ~ g4 a4@4 g4@2, c4@8 ~ c5@6 ~, ~ f4@6 ~", Q: "[bb3,g4] f4@4 [c4,f4,a4]@3, c4 ~, ~ a3@3 ~@4",
  R: "~@2 [c4,f4,a4,c5]@6 ~@2 a4 bb4 c5 bb4 a4@2, ~@5 f4@3", S: "a4 g4@3 ~ a4 g4@2, [bb3,d4]@4 ~ [bb3,d4]@3",
  T: "a4 g4@4 d4 f4 a4, [bb3,d4]@4 ~ bb3@3", U: "a4 g4@3 ~@3 a4, [bb3,d4]@4 ~ [bb3,d4]@3",
  V: "a4 g4@2 d4@2 e4 f4 g4, [bb3,d4]@3 bb3@5", // Bb
  W: "[a4@2 g4@6 d4 e4 f4@4 [a3,c4]@6 [a3,c4]@4 ~@2 g4@2 a4@2 c5@2, [bb3,d4]@4 bb3@3 f4@5 ~ f4@3]/2", // Am Bb
  X: "[[f4,a4,c5,f5]@8 ~@2 [g4,a4,c5]@4 ~ [d4,gb4,a4,d5]@5 [a3,d4,gb4]@10 [e4,g4]@2]/2", // F Am7 D Em
  Y: "[gb4,a4] [d4,gb4,a4,d5]@2 [gb4,a4,d5,gb5]", Z: "[g4,bb4,d5,g5]@5 [g4,bb4,d5,g5]@3",
  AA: "[f4,bb4,d5,g5]@5 [g4,bb4,d5,g5]@3", AB: "[f4,a4,c5,f5]@6 g4@3 a4 g4@4 f4@2, ~@3 c5@5",
  AC: "[[c4,f4,a4]@12 a4@2 [c4,e4,g4,c5]@12 d5 e5 d5@4, ~@13 [g4,c5]@3]/2", AD: "[g4,c5,e5]@6 [e4,c5] a4",
  AE: "[c4,g4,a4,c5]@3 [c4,f4]", AF: "[[c4,f4,a4]@10 [f4,a4]@2 [g4,bb4]@2 [c4,g4,a4,c5]@12 a4 bb4 a4@4, ~@13 f4@3]/2",
  AG: "[c4,f4,a4,c5]@8 [c4,c5]@3 [d4,d5]@2 [e4,e5]@3", AH: "[e4,e5] [f4,f5]@7, [a4,c5]",
  AI: "[~@2 g4 a4@9 a4@4 [bb3,d4,g4]@12 [bb3,g4]@2 a4@2 [d4,g4,bb4]@16 [d4,g4,bb4,d5]@4 g4@4 a4@4 bb4@8 c5@4 d5@4 [bb4,f5]@4 [g4,bb4,d5,g5]@4 [g4,g5]@4 [a4,d5,f5,a5]@4 [bb4,d5,g5,bb5]@4 [d5,g5,bb5,d6]@12 [bb4,d5,g5]@4, ~ [c4,f4]@5 c4@50, ~@3 f4@16 f4@9, ~@26 bb3@9 ~@21, ~@13 d4@4 [d4,g4,bb4]@2 ~@9]/7", // Gm Eb Gm Bb5 Gm G Dm Gm …
  AJ: "[g5 f5@3 ~@3 [bb3,g4] [bb3,g4] [a3,f4]@2 a3@2 c5 d5 e5, [a4,c5]@4 ~ c4@11, ~@5 f4@4 ~@2 f4@5, ~@13 a4@3]/2", // Eb Dm Am
  AK: "[g5 f5@3 ~@3 [bb3,g4] [bb3,g4] [a3,f4]@2 [a3,f4,a4]@2 c5 e5 [bb4,g5] g5 f5@3 ~ [a4,c5] [d5,f5] [e5,g5] [a4,c5,f5,a5]@4 [bb4,d5,f5,bb5]@2 [c5,f5,a5,c6]@2 [bb4,d5,g5,bb5]@4 ~ a4 g4@2 a4 g4@2 ~@2 g4 a4@2 a4 g4@2 ~@2 g4 a4@2 a4 g4@2 [bb3,d4]@2 d5 g5 a5, [a4,c5]@4 ~ c4@59, ~@5 f4@4 ~@4 f4@51, ~@13 a4@3 [a4,c5]@4 ~@17 [bb3,d4]@3 [bb3,d4]@4 ~ [bb3,d4]@3 [bb3,d4]@4 ~ [bb3,d4]@3 [bb3,d4]@3 g4 ~@4]/8", // Eb Dm Eb Am Dm Em F Bb …
  AL: "[bb4,d5,g5,bb5]@2 [bb4,d5,g5,bb5] [c5,g5,c6]", AM: "[bb4,d5,g5,bb5]@3 [f4,bb4,d5,f5]", AN: "[f4,bb4,d5,f5]",
  AO: "[c4@5 c5 a4 [d4,gb4,d5]@7 gb4@3 g4 gb4 d4 ~ [gb4,a4,d5]@3 [g4,bb4,d5,g5]@4 g5@3 f5 [g4,bb4,d5,g5]@4 g5@3 f5 ~@9 a4@2 f5 e5@2 c5 a4, f4@40 f4@9 f4@3 f4@4, a4@4 ~ c4@44 c4@7, ~@5 g4@2 ~@7 [a3,d4]@5 [a3,gb4,a4]@2 ~@20 c5@9 ~@6, ~@20 d4@3 ~@5 [g4,bb4,d5]@4 ~@4 [g4,bb4,d5]@4 [a4,f5]@8 ~@4 a4@3 ~]/7", // D Gm D5 D Gm Dm
  AP: "[~@2 [c4,f4]@10 c4@6 [e4,bb4]@4 f5@2 e5@4 c5@2 a4@2 ~@2 [c4,g4,a4]@4 [g4,a4]@10 ~@6 a4@2 a4@3 bb4@3 c5@2, c5@11 ~@3 e4@2 c5@10 ~@6, ~ bb4@3 ~@2 f4@22 ~@4, ~@6 bb4@2 ~ c4@5 c4@3 ~@2 c4@9 [c4,f4]@4]/4", // F5 Edim Am7 Gsus2 F5
  AQ: "[a4@4 a3@4 bb3@4 ~@10 c5@2 c5@3 d5@3 e5@2 e5@2 ~@6 d4@4 e4@4, f4 f4, c5@11 ~ a4@4 [a4,c5]@8, c4 c4@2 c4, ~@17 f5@7]/3", // Am
  AR: "[~@6 f5@2 f5@4 a5@4 ~@4 g4@4 a4@4 ~@4 [bb3,d4]@6 g5@2 f5@4 ~@2 bb4@2 ~@4 g4@4 a4@4 bb4@10 bb4@2 bb4@3 c5@3 d5@2 ~@4 g4@4 a4@4 bb4@8 [e4,g4,bb4,e5]@4 [bb4,d5,f5]@4 [g4,bb4,d5,g5]@4, c4, a3@3 ~ [a4,c5]@4 g5@11 [bb4,d5]@3 d5@2 d5@11 ~@5 d5@8 ~@8, ~ f4@51 f4@4, ~@10 [bb3,d4]@4 bb4@5 g4@7 [bb3,d4]@8 ~@2 [d4,g4]@4 ~@2 [bb3,d4]@8 ~@6]/7", // Bb Edim Bb Gm Am Bb G5 Bb
  AS: "[[a4,c5,f5]@20 ~@5 g4 a4 c5 d5 e5 f5 g5 g5@2 ~@9 a3 e4@4 ~@2 g4@2 ~@4 a4 g4 a4 c5 f5 g5 a5 bb5 g5@2 ~@6 [g4,c5]@6 a4@2 ~@2 g4@2 f4@4 [a4,c5,f5]@3 [g4,g5]@2 [a4,a5]@3 [g4,bb4,d5,g5]@32, f4@6 f4@7 f4@8 ~ f4@10, ~@32 [a4,c5]@8 ~@3 c4@5 c4@24 c4@8 c4@48, ~@17 f5@9 ~@6 [a4,c5]@4 ~@4 a3@4 ~@20, ~@24 a3@4 ~@5 f5@9 ~@22]/8", // F C5 F G A Gm Am
  AT: "[f4@3 g4 ~@3 [c4,f4,g4]@3 g4 a4@5 [a3,c4]@4 g4 a4@2 [c4,f4,g4]@3 g4 a4@5 a3@8, f5@4 ~, c5 ~@4, a4@2 a4@2 ~ f4@5 ~@10, ~@3 [c4,f4]@4 ~@3 c4@6 ~@4 [c4,f4]@3 ~@3 [c4,f4]@14]/5", // Csus4 Am Csus4 F5
})).s("gm_epiano2").gain(0.18)

// bass · electric bass finger · "Basso"
const bass = note(`<
  A@10 B@8 A@4 C@2 D E A@2 F@3 A@6 B@6 A@2 C@2 D E A@2 F@3 A@5 B@6 A@6 B@6 A@2 C@2 D E A@2 F@2 A@6 B@6 A@6 B@2 A@4 G
>`.pickRestart({
  A: "f2@3 f3 e3@2 c3@2", B: "g2@3 g3 f3@2 d3@2", C: "d2@3 d3 c3@2 a2@2", D: "bb2@3 g2 f2@2 d2@2",
  E: "bb1@3 g2 f2@2 d2@2", F: "c2@3 c3 bb2@2 g2@2", G: "f2 f1",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · string ensemble 1 · "Orch."
const string_ensemble_1 = note("<~@63 A B ~@9 C D ~@5 E@2 F@2 G@2 H@2 I@2 J@2 K@4 L@8 M@6 N>".pickRestart({
  A: "~ [g4,g5] [a4,d5,f5,a5] [bb4,d5,g5,bb5]", B: "[d5,g5,bb5,d6]@3 ~", C: "~@5 d5 g5 a5", D: "[bb4,d5,g5,bb5] ~",
  E: "[g4,bb4,d5,g5]@4 g5@3 f5, ~ [g4,bb4,d5]", // Gm
  F: "[~@9 [c4,f4,a4]@2 f5 e5@2 c5 a4, [f4,a4,f5]@2 ~ f4, ~ c5@9 ~@2 a4@3 ~]/2", // F
  G: "[~ [c4,f4,bb4]@3 ~@2 [c4,f4,bb4]@2 ~ [c4,e4,bb4]@2 f5 e5@2 c5 a4, c5@11 ~@3 [c4,e4]@2]/2", // Fsus4 C7 C
  H: "[~@2 [c4,g4,a4]@4 [c4,g4,a4]@10 ~@6 a4@2 a4@3 bb4@3 c5@2, c5@5 ~ [c4,f4]@2]/2", // Am7 F5
  I: "[[c4,f4,a4]@4 a3@4 bb3@4 ~@10 c5@2 c5@3 d5@3 e5@2, c5@11 ~@5, ~@3 c4@3 [f4,a4]@2]/2", // F
  J: "[e5 ~ c4@2 d4@2 ~@5 f5 f5@2 a5@2, [a4,c5]@8 [a3,c4]@3 ~@5, ~ f5@10 ~@5, ~@6 e4@3 f4@3 [a4,c5]@4]/2", // Am
  K: "[~@4 g4@4 a4@4 ~@4 [bb3,d4]@6 g5@2 f5@4 ~@2 bb4@2 ~@8 a4@4 bb4@10 bb4@2 bb4@3 c5@3 d5@2, g5@11 bb4@4 ~@3 [bb3,d4]@8 ~@2 [d4,g4]@4, ~@2 [bb3,d4]@6 ~@3 d5@3 d5@2 d5@11 ~@5, ~@6 bb4@5 g4@7 g4@10 ~@4]/4", // Bb G5 Bb
  L: "[~@8 a4@4 bb4@8 [e4,bb4,e5]@4 [f4,bb4,d5,f5]@4 [bb4,d5,g5]@4 [f4,a4,c5,f5]@20 ~@4 f4 ~ a4 c5 d5 e5 f5 g5 g5@2 ~@9 [a3,c4] e4@4 ~@8 a4 ~ a4 c5 f5 g5 a5 bb5 g5@2 ~@6 [c4,c5]@6 a4@2 ~@4 f4@4 [f4,a4,c5,f5]@3 g5@2 [a4,a5]@3, d5@16 ~@4 g4@8 g4@29 g4@25 g4@7 g4@15 g4@10 g4@9 g4@5, ~@2 [bb3,d4,g4]@8 ~@22 [a4,c5]@4 ~@4 [a3,c4]@4 ~@5 f5@9 ~@6, ~@33 f5@9 f4@3 ~@3 [a4,c5]@4 ~@4 [a3,c4]@4 ~@4]/8", // Edim Bb Gm F Am C F A …
  M: "[[bb4,d5,g5]@16 f4@3 ~@4 [c4,f4,g4]@3 ~ a4@5 [a3,c4]@4 ~ a4@2 [c4,f4]@3 ~ a4@5, g4@19 [f4,g4]@4 ~@3 g4@10 ~@3 g4@4 ~@5, ~ f5@2, ~@2 c5 ~@3, ~@16 a4@3 c4 a4@4 ~@2 [c4,f4]@6 ~@4 [c4,f4,g4]@3 ~@3 [c4,f4]@6]/6", // Gm Csus4 Am F5 Fsus2 F5 Csus4 F5
  N: "[a3,c4,f4]", // F
})).s("gm_string_ensemble_1").gain(0.64)

// drums · kick
const kick = s("bd").struct("<[x!4]!111 ~>").gain(0.64)

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

// drums · mid tom
const mid_tom = s("mt").struct("<[~@3 x!2 ~@6 x!2 ~@3]!111 ~>").gain(0.64)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<[~ x ~ x]!111 ~>").gain(7.52)

stack(piano, epiano2, bass, string_ensemble_1, kick, snare, mid_tom, vibraslap)

More by Battisti