Strudelify

Una vita viva

Battisti

KeyG majorTempo126 bpm
0:00/0:00
// Una vita viva — Battisti
// 126 bpm, 2/2, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/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 B C D E F G H E I J K L M N O@2 P Q R S T U V W P Q R S T U V@2 X Y Z AA AB AC@2 AD X Y Z AA AB AC@2 AE AF P Q R S T
  U V W P Q R S T U V AG AH AI AJ AK AL AM AL AM AL AN AO AP AQ AR AS AT AU AV AW AP AQ AR AS AT AU AV AW AX AY AZ BA BB
  BC BD BE AX AY AZ BA BB BC BD BE AX AY AZ BA BB BC BD BE AX AY AZ BA BB BC BD BE
>`.pickRestart({
  A: "[g3,c4,e4]!2", B: "[a3,d4,f#4] a3 [a3,d4,f#4]@2", C: "[a3,d4,f#4]!2", D: "[g3,b3,f#4] g3 f#4 e4, ~ [g3,b3]",
  E: "[g3,d4,e4]@4 d4 c4 g3@2, ~ e4", F: "f#4 g4 a4 f#4, [a3,d4]!2", G: "[f#3,a3,d4]", H: "[f#3,a3] [g3,b3]",
  I: "f#4 g4 [d4,a4] d4, [a3,d4] f#4", J: "[d4,f#4,a4,d5]@4 ~ d4 f#4 a4",
  K: "[f#4,a4] [e4,g4] [d4,f#4] [e4,g4], [b3,b4] ~", L: "[a3,d4,f#4] [g3,c4,e4], g4", M: "[f#3,a3,d4]@4 f#3 a3 d4 f#4",
  N: "[d4,a4] d4, [f#3,a3]", O: "[[a3,b3,e4]@24 ~@4 [d4,f#4,a4]@3 ~]/2", P: "[d3,g3,b3,d4]!7 [e3,g3,c4,d4]",
  Q: "[e3,g3,c4,d4]!7 [d3,f#3,a3,d4]", R: "[d3,f#3,a3,d4]!7 [d3,g3,c4]", S: "[d3,g3,b3,d4]!8",
  T: "[d3,g3,b3,d4]!7 [e3,a3,c#4,e4]", U: "[e3,a3,c#4,e4]!7 [e3,a3,c4,e4]", V: "[e3,g3,c4,e4]!8",
  W: "[e3,g3,c4,e4]!4 [e3,g3,c4,d4] ~ [a3,d4,f#4,a4]@2", // C D
  X: "g3 ~ [c4,e4]@2 g3 ~ [c4,e4]@2 g3 ~ [c4,e4]@2 g3 ~ [c4,e4]@2, [c4,e4] ~ [c4,e4] ~ [c4,e4] ~ [c4,e4] ~, ~ g3@2 ~@2 g3@2 ~@2 g3@2 ~@2 g3@2 ~", // C
  Y: "[a3,d4,f#4]!8", Z: "[a3,d4,f#4]!7 [b3,e4,g4]", AA: "[b3,e4,g4]!5 [a3,d4,f#4,g4]!2 [g3,c4,e4,g4]",
  AB: "[g3,c4,e4,g4]!7 [a3,d4,f#4,a4]", AC: "[a3,d4,f#4,a4]!8", AD: "[g3,b3,e4]!8", AE: "[a3,b3,e4,a4]!8",
  AF: "[b3,e4,g#4,b4]!3 ~@3 [d4,f#4,a4]@2", AG: "[e3,g3,c4,e4]!4 [e3,g3,c4,d4] ~ [d4,f#4,a4]@2",
  AH: "[g3,b3,d4]!7 [g3,c4,e4]", AI: "[g3,c4,e4]!7 [f#3,a3,d4]", AJ: "[f#3,a3,d4]!7 [g3,c4,d4]",
  AK: "[g3,c4,d4]!6 [c4,e4,g4]!2", AL: "[c4,e4,g4]!7 [d4,f#4,a4]", AM: "[d4,f#4,a4]!7 [c4,e4,g4]", AN: "[d4,f#4,a4]!8",
  AO: "[a3,d4,f#4,a4]!2 [a3,d4,f#4] ~@3 [a3,d4,f#4,a4]@2, ~@2 a4@3 ~@3", AP: "[b3,e4,g#4,b4]!7 [c#4,e4,a4,b4]",
  AQ: "[c#4,e4,a4,b4]!7 [b3,d#4,f#4,b4]", AR: "[b3,d#4,f#4,b4]!7 [b3,e4,g#4,b4]", AS: "[b3,e4,g#4,b4]!8",
  AT: "[b3,e4,g#4,b4]!7 [a#3,c#4,f#4,a#4]", AU: "[a#3,c#4,f#4,a#4]!7 [a3,c#4,e4,a4]",
  AV: "[a3,c#4,e4,a4]@2 [a3,c#4,e4,a4] [a3,c#4,e4,a4]@2 ~ [a3,c#4,e4,a4]@2 [a3,c#4,e4,a4]@2 [a3,c#4,e4,a4]@2 [a3,c#4,e4,a4]@2 [a3,c#4,e4,a4]@2", // A
  AW: "[a3,c#4,e4,a4]!5 ~ [b3,d#4,f#4,b4]@2", // A B
  AX: "[g#3,c#4,f4,g#4,c#6]@2 [g#3,c#4,f4,g#4]@2 [g#3,c#4,f4,g#4] [g#3,c#4,f4,g#4]@2 ~ [g#3,c#4,f4,g#4]@2 [g#3,c#4,f4,g#4]@2 [g#3,c#4,f4,g#4]@2 [a3,c#4,f#4,a4]@2", // C# F#m
  AY: "[a3,c#4,f#4,a4]!7 [a3,d#4,f#4,a4]", AZ: "[a3,d#4,f#4,a4]!7 [g#3,b3,e4,g#4]",
  BA: "[g#3,b3,e4,g#4]!7 [b3,e4,g#4,b4]", // E
  BB: "[b3,e4,g#4,b4]@2 [b3,e4,g#4,b4]@2 [b3,e4,g#4,b4]@2 [b3,e4,g#4,b4]@2 [b3,e4,g#4,b4]@2 [b3,e4,g#4,b4] [b3,e4,g#4,b4]@2 [a#3,c#4,e4,a#4]@2 ~", // E A#dim
  BC: "[a#3,c#4,e4,a#4] [a#3,c#4,e4,a#4]@2 [a#3,c#4,e4,a#4]@2 [a#3,c#4,e4,a#4]@2 [a#3,c#4,e4,a#4]@2 [a#3,c#4,e4,a#4]@2 [a#3,c#4,e4,a#4]@2 [a3,c#4,e4,a4]@2 ~", // A#dim A
  BD: "[a3,c#4,e4,a4] [a3,c#4,e4,a4]@2 ~ [a3,c#4,e4,a4] [a3,c#4,e4,a4]@2 ~ [a3,c#4,e4,a4] [a3,c#4,e4,a4]@2 ~ [a3,c#4,e4,a4]@2 [a3,d#4,f#4,a4]@2", // A D#dim
  BE: "[a3,d#4,f#4,a4]!7 [g#3,c#4,f4,g#4,b5], ~@3 g#5@2 a5@2 ~", // D#dim C#7
})).s("gm_piano").gain(0.15)

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

// chords · acoustic guitar steel · "Chit."
const acoustic_guitar_steel = note(`<
  ~@17 A B@2 ~ C@2 D E A B@2 ~ C@2 D@2 ~@17 A B@2 ~ C@2 D E A B@2 ~ C@2 D F G H I H J@4 K@2 ~ L M@2 ~ N@2 O P L M@2 ~
  N@2 O P ~@32
>`.pickRestart({
  A: "[g2,d3]", B: "[~@7 [g2,d3]@9]/2", C: "[[e2,b2]@6 [e2,a#2] [a2,e3]@9]/2", D: "a3!8", E: "a3!5 ~ a3@2",
  F: "a3!5 ~@3", G: "[e4,g4,b4]", H: "[e4,g4,c5]", I: "[d4,f#4,a4]", J: "[[c4,e4,g4]@6 ~ [d4,f#4,a4]@7 ~@2]/2",
  K: "[[c4,e4,g4]@6 ~ [d4,f#4,a4]@9]/2", L: "[e2,b2]", M: "[~@7 [e2,b2]@9]/2",
  N: "[[c#3,g#3]@6 [c#3,g#3] [f#3,c#4]@9]/2", O: "c#3!8", P: "c#3!5 ~ [a#2,d#3]@2",
})).s("gm_acoustic_guitar_steel").gain(0.21)

stack(piano, bass, acoustic_guitar_steel)

More by Battisti