Strudelify
Vite parallele cover art

Gommalacca

Vite parallele

Battiato

KeyC majorTempo100 bpm
0:00/0:00
// Vite parallele — Battiato
// 100 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 5 synth choir (copy of ch 14 choir aahs)
// note: Full arrangement: all 81 bars on a 32-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.

// other · piano
const piano = note("<~@30 A B C ~@19 A B C ~@23 D E@2>".pickRestart({
  A: "~@4 a4@4 b4@4 c5@4 d5@4 e5@4 f5@4 g5@3 ~", B: "~ a4 b4 c5 d5 c5 b4 a4",
  C: "~@4 a4@4 b4@4 c5@4 ~@4 b4@4 c5@4 d5@3 ~", D: "~@7 g6", E: "[c7@9 ~@7]/2",
})).s("gm_piano").gain(0.53).pan(0.6)

// bass · electric bass finger
const bass = note(`<
  ~ A B C D E@3 F E G H I J K E@3 L I M I N O P Q@2 R S ~@4 A T J G E F E@2 R S U I ~ I M I N O P ~@3 I E@3 ~@4 I G ~ I
  M I N O A T J G A T E@2 ~@2
>`.pickRestart({
  A: "c2@12 e1@4 f1@15 ~", B: "g1@24 f1@7 ~", C: "e1 f1", D: "e1 d1", E: "c2 d2", F: "c2@8 d2@7 ~", G: "e2 d2",
  H: "c2@3 e2 f2@4", I: "g2 f2", J: "e2 f2", K: "e2@8 d2@7 ~", L: "c2@11 ~ c2 ~@3 c2@7 ~ c2@8", M: "e2",
  N: "e2@6 d2 c2", O: "b1@2 d2 b1", P: "c2@7 ~ c2@7 ~", Q: "d2 e2", R: "g2!2 f2!2", S: "e2!2 d2!2", T: "g2@24 f2@7 ~",
  U: "c2@12 e2@4 f2@15 ~",
})).s("gm_electric_bass_finger").gain(0.64)

// other · electric guitar clean
const electric_guitar_clean = note("<~@19 A B C D E F ~@8 G H ~@11 A B C D E F ~@14 A B C D E F ~@9>".pickRestart({
  A: "g2@12 a2@4 b2@3 ~ c3@3 ~ d3@4 e3@3 ~", B: "e3@15 ~ e3@2 f3@2 e3@4 d3@4 c3@4",
  C: "~@12 a2@3 ~ b2@4 c3@4 d3@4 b2@4", D: "c3@3 g3 f3 e3 d3 c3", E: "g2@12 a2@4 b2@4 c3@4 b2@7 ~", F: "c3@3 ~",
  G: "c3@12 b2@4 c3@7 ~ d3@7 ~", H: "e3@8 d3@7 ~",
})).s("gm_electric_guitar_clean").gain(0.54).pan(0.6)

// other · flute
const flute = note(`<
  ~@4 A B C D E F G H I J K L M N O P Q R S T U ~ V W X@2 ~@5 Y Z AA AB AC@2 AD AE AF AG O P Q R AH T U ~@7 AI AJ AK@2
  AL AM@2 P Q R S T U ~@9
>`.pickRestart({
  A: "~@24 g4 ~@2 g4 ~ g4 ~@2", B: "g4@2 ~ g4 ~ g4 ~@2 g4@2 ~ g4 ~ g4 ~@2 g4@2 ~ g4 ~ g4 ~@2 g4@3 ~ e4@4",
  C: "~@20 d4 ~ d4 ~ d4 ~@2 d4 ~ d4 ~@2", D: "d4@2 ~@2 c4 ~ c4@2 ~@2 g4 ~ g4@8 ~@12",
  E: "~@6 c4 ~@2 c4@2 ~ c4 ~ b3 ~ c4 ~@2 c4@2 ~ b3@2 c4@2 ~@2 c4@2 b3@2", F: "c4@3 ~ c4@2 ~@26", G: "~@29 g4 ~@2",
  H: "g4@2 ~ g4@2 ~ g4 ~@2 g4 ~@2 g4 ~@2 g4 ~@2 g4 ~ g4 ~@2 g4 ~@2 g4 ~ g4 ~ g4 ~",
  I: "~ g4@3 ~ e4@3 ~@17 f4 ~ f4 ~@2 f4 ~", J: "f4 ~@2 f4@2 e4@2 ~ e4@2 ~ g4 ~@2 g4@6 ~ f4@2 ~ f4@3 ~ e4@2 ~@2",
  K: "e4@4 g4@2 ~@2 g4@3 ~@2 e4@2 ~@13 d4 ~ d4 ~", L: "~ d4@2 ~ c4 ~ c4@3 ~@2 g4@2 ~ g4@5 ~ g4@3 ~@9",
  M: "~@8 e4@2 ~ d4 ~ c4 ~@2 c4@5 ~ c4@3 ~@5 d4 ~", N: "~ d4@3 c4@2 ~@2 d4@3 ~ c4@2 ~@2 e4@3 ~ d4@2 c4@8 ~@2",
  O: "~@6 e4 f4", P: "g4@17 ~@3 f4 ~ f4 ~@2 f4 ~ f4 ~@2 f4@2", Q: "~ e4@2 ~ g4@8 ~ g4@2 ~@13 g4@2 ~@2",
  R: "g4 ~ g4 ~ g4 ~@2 g4 ~ g4@2 ~ g4@3 ~@5 f4@2 ~@2 f4@3 ~ e4@3 ~", S: "g4@11 ~ g4@2 ~@14 d4 ~ d4 ~",
  T: "d4@11 ~ d4@2 ~@2 d4@4 c4@3 ~ e4@4 d4@3 ~", U: "d4@4 c4@3 ~@25", V: "~@14 g4 ~",
  W: "g4 ~ g4 ~ g4 ~ g4@2 a4@3 ~ g4@3 ~@5 f4@2 ~@2 f4@3 ~ f4@2 ~@2",
  X: "[f4@4 e4@4 g4@4 e4@3 ~@9 d4 ~ d4 ~@2 d4@2 c4@2 e4@2 ~ d4@2 c4@5 ~@21]/2",
  Y: "g4 ~ g4 ~ g4 ~ g4 ~@2 g4 ~ g4 ~ g4 ~@2 g4@3 f4@3 ~@10",
  Z: "~@11 g4 ~@2 g4 ~ g4 ~@2 g4 ~ g4 ~@2 g4@2 ~ g4 ~ g4 ~@2",
  AA: "g4 ~@2 g4@2 g4 ~@2 g4 ~@2 g4 ~@2 g4 ~@2 g4@2 ~ g4 ~@2 g4@4 ~@5", AB: "~@18 d4 ~@2 d4 ~ d4 ~ d4 ~@2 d4@2 c4@2",
  AC: "[g4@8 ~@12 f4 ~ f4 ~ f4@3 ~ e4@2 ~ g4@2 ~@2 e4@3 ~@23 g4 ~@2]/2",
  AD: "g4@2 g4@2 ~ g4 ~ g4@2 ~ g4 ~@2 g4 ~ g4@3 ~ f4@4 ~@5 f4 ~@3",
  AE: "f4@3 ~ e4@2 ~@2 e4@2 ~@2 e4 ~ e4@3 ~ d4 ~ d4@7 ~@5", AF: "~@20 c4 ~ c4 ~ c4@2 ~@2 c4 ~ c4 ~",
  AG: "~ c4@2 ~ c4 ~ c4 ~@2 c4@2 ~ b3@2 c4@7 ~@11", AH: "g4@11 ~ g4@2 ~@14 d4 ~@3",
  AI: "g4@4 ~@2 g4 ~ g4@3 ~ e4@3 ~@13 g4 ~ g4 ~", AJ: "g4 ~ g4 ~@2 g4 ~ g4 ~@2 g4 ~@2 g4 ~ g4@3 ~ f4@4 ~@9",
  AK: "[~@20 f4 ~ f4 ~ f4@2 ~@2 e4@2 e4@7 ~ e4@2 ~@20 g3@2 ~@2]/2",
  AL: "g4@2 ~@2 g4@2 ~@2 g4@2 ~ g4 ~@2 g4@4 f4@3 ~@7 f4@2 ~@2",
  AM: "[f4@3 ~ e4@3 ~@17 d4@2 ~@2 d4 ~ d4@4 ~ c4@3 ~@26]/2",
})).s("gm_flute").gain(0.56)

// chords · string ensemble 2
const string_ensemble_2 = note("<~ A@8 B@6 C@2 D@8 E@8 F@4 G@7 H@8 I@7 ~@3 J K@8 L@4 M@6>".pickRestart({
  A: "[[c3,g3,c4,e4]@15 [d3,a3,d4,f4]@16 [e3,g3,c4,e4]@16 [d3,a3,d4,f4]@16 ~ c3@15 [d3,a3,d4,f4]@16 [c3,g3,c4,e4]@16 [d3,a3,d4,f4]@16 ~ [c3,c4]@15 [d3,f3,a3,d4]@16 [c3,e3,g3,c4]@16 [d3,f3,a3,d4]@16 ~ c3@15 [d3,f3,a3,d4]@16 [c3,e3,g3,c4]@16 [d3,a3,d4]@16 [e3,g3], ~@63 [g3,c4,e4]@16 ~@48 [e3,g3]@16 ~@48 [e3,g3,c4]@16 ~@32 f3@13 ~@4]/8", // C Dm C Dm C Dm C Dm …
  B: "[[c3,c4]@15 [d3,f3,a3]@16 [e3,g3,c4]@16 [d3,f3,a3]@16 ~ [c3,c4]@15 [d3,f3,a3,d4]@16 [e3,g3,b3,e4]@16 [d3,f3,a3,d4]@16 ~ c3@15 [d3,f3,a3,d4]@16 [c3,e3,g3,c4]@16 [d3,f3,a3,d4]@16 e3, ~@63 [e3,g3]@16 ~@48 [e3,g3,c4]@16 ~@49]/6", // C Dm C Dm C Dm Em Dm …
  C: "[[c3,g3,c4]@15 [d3,f3,a3,d4]@16 [c3,e3,g3,c4]@16 [d3,f3,a3,d4]@16 [e3,g3,c4]]/2", // C5 Dm C Dm C
  D: "[c3@15 [d3,f3,a3,d4]@16 [c3,e3,g3,c4]@30 ~@2 [g2,g3,b3]@16 [f2,f3,a3]@16 [e2,g3,c4,e4]@32 [g2,g3,b3]@16 [f2,f3,a3]@16 [e2,g3,c4,e4]@32 [g2,g3,b3]@16 [f2,f3,a3]@16 [c3,e3,g3,c4]@32 [d2,d3,f3,a3], ~@63 d4@32 ~@32 d4@32 ~@32 d4@32 ~@33]/8", // Dm C G F C G F C …
  E: "[~@15 [e2,e3,g3,b3]@16 [d2,d3,f3,a3]@16 [e2,e3,g3,b3]@16 [g2,g3,b3,d4]@16 [f2,f3,a3,c4]@16 [e2,e3,g3,b3]@16 [d2,d3,f3,a3]@16 [g2,c3,e3,g3]@32 [a3,c4]@16 [g3,b3]@15 ~ [a3,c4]@15 ~ [g3,b3]@15 ~ f4@16 e4@16 ~, ~@159 e4@31 ~ e4@31 ~ [a3,c4]@32 ~]/8", // Em Dm Em G F Em Dm C …
  F: "[[c3,g3,c4,e4]@15 [d3,a3,d4,f4]@16 [e3,g3,c4,e4]@16 [d3,a3,d4,f4]@16 ~ c3@15 [d3,a3,d4,f4]@16 [c3,g3,c4,e4]@16 [d3,a3,d4,f4]@16 ~, ~@63 [g3,c4,e4]@16 ~@49]/4", // C Dm C Dm C Dm C
  G: "[[c3,g3,c4,e4]@15 [d3,a3,d4,f4]@16 [c3,g3,c4,e4]@16 [d3,a3,d4,f4]@16 ~ c3@15 [d3,a3,d4,f4]@16 [c3,g3,c4,e4]@16 [e2,d3,a3,d4,f4]@16 [g2,g3,b3,d4]@16 [f2,f3,a3,c4]@16 [e2,e3,g3,b3]@16 [d2,d3,f3,a3]@16 [c3,g3,c4,e4]@16 [d3,a3,d4,f4]@16 [g3,c4,e4], ~@63 [g3,c4,e4]@16 ~@145]/7", // C Dm C Dm C Dm G F …
  H: "[c3@15 [d3,a3,d4,f4]@16 [c3,g3,c4,e4]@30 ~@2 [g2,g3,b3]@16 [f2,f3,a3]@16 [e2,g3,c4,e4]@32 [g2,g3,b3]@16 [f2,f3,a3]@16 [e2,g3,c4,e4]@32 [g2,g3,b3]@16 [f2,f3,a3]@16 [c3,e3,g3,c4]@32 [a3,c4,e4], ~@63 d4@32 ~@32 d4@32 ~@32 d4@32 ~@33]/8", // Dm C G F C G F C …
  I: "[~@15 [g3,b3]@15 ~ [a3,c4]@15 ~ [g3,b3]@15 ~ f4@16 e4@16 ~ [c3,c4]@15 [d3,a3,d4,f4]@16 [e3,g3,c4,e4]@16 [d3,a3,d4,f4]@16 ~ c3@15 [d3,a3,d4,f4]@16 [c3,g3,c4,e4]@16 [d3,a3,d4,f4]@16 ~, ~@31 e4@31 ~ [a3,c4]@32 [g3,e4]@16 ~@48 [g3,c4,e4]@16 ~@49]/7", // G Am G C Dm C Dm C …
  J: "~@31 [g2,g3,b3,d4]", // G
  K: "[~@15 [f2,f3,a3,c4]@16 [e2,e3,g3,b3]@16 [d2,d3,f3,a3]@16 [c3,g3,c4,d4,g4]@32 [g2,g3,b3]@16 [f2,f3,a3]@16 [e2,g3,c4,e4]@32 [g2,g3,b3]@16 [f2,f3,a3]@16 [e2,g3,c4,e4]@32 [g2,g3,b3]@16 [f2,f3,a3]@16 [g3,e4], ~@95 d4@32 ~@32 d4@32 ~@32 d4@32 ~]/8", // F Em Dm Csus2 G F C G …
  L: "[[c3,c4]@15 [d3,a3,d4,f4]@16 [e3,g3,c4,e4]@16 [d3,a3,d4,f4]@16 ~ c3@15 [d3,a3,d4,f4]@16 [c3,g3,c4,e4]@16 [d3,a3,d4,f4]@16 [g3,e4], ~@63 [g3,c4,e4]@16 ~@49]/4", // C Dm C Dm C Dm C
  M: "[[c3,c4]@15 [d3,a3,d4,f4]@16 [e3,g3,c4,e4]@16 [d3,a3,d4,f4]@16 ~ c3@15 [d3,a3,d4,f4]@16 [c3,g3,c4,e4]@16 [d3,a3,d4,f4]@16 [c3,e3,g3]@62 ~@3, ~@63 [g3,c4,e4]@16 ~@113]/6", // C Dm C Dm C Dm C
})).s("gm_string_ensemble_2").gain(0.33).pan(0.4)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~ A B C D A B C D A B A B C D A B C E ~@6 F G H I ~ J K L A B C D A B C D H I B C E ~@6 J K L A B C D ~@4 H I ~@6 A B
  C D M N O P ~@2
>`.pickRestart({
  A: "~@4 c4@4 e4@3 c4@2 ~@7 d4@3 g4@4 d4@3 ~@2", B: "~@3 c4@4 e4@4 c4@3 ~@6 d4@4 g4@3 d4@3 ~@2",
  C: "~@4 c4@4 e4@4 c4@3 ~@5 d4@3 g4@4 ~ d4@3 ~", D: "~@4 c4@4 e4@4 c4@2 ~@6 d4@4 g4@4 d4@3 ~",
  E: "~@2 c4@2 e4@2 c4 ~@3 c4@2 [e4,g4]@2 c4 ~", F: "~@4 d4@4 e4@4 f4@4 ~@4 e4@3 f4@4 g4@4 ~, d3@16 e3@15 ~",
  G: "~@4 d4@4 e4@3 f4@4 ~@5 e4@4 f4@3 g4@4 ~, d3@15 ~ e3@16", H: "~@4 g4@4 a4@4 g4@3 ~@4 f4@4 g4@4 f4@4 ~, g3 f3",
  I: "~@3 e4@4 f4@4 e4@3 ~@6 d4@3 e4@4 ~ d4@3 ~, e3@15 d3@17", J: "a4@16 d5@4 c5@3 b4@4 g4@4 ~",
  K: "a4@12 e5@4 d5@4 c5@3 ~ c5@4 b4@4", L: "a4@2 b4 c5 b4@2 a4@2", M: "c4@11 ~ b3@2 ~@2 c4@10 ~@2 a3@2 ~@2",
  N: "b3 c4@3 d4@2 ~ g3", O: "c4@10 ~@2 d4@4 [c4,e4]@11 ~ f4@4, ~@6 b3 ~@7 a3 ~",
  P: "[b3,e4]@3 ~ d4@11 ~ c4@16, ~@3 c4@12 g3@15 ~@2", // E5
})).s("gm_string_ensemble_1").gain(0.32)

// other · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@65 A@6 ~@10>".pickRestart({
  A: "[~@30 [b4,d5,g5]@16 f5@16 [g4,e5]@31 ~ [b4,d5,g5]@16 [a4,f5]@14 ~@2 [g4,e5]@32 [b4,g5]@13 ~@3 [a4,a5]@16 ~@2, ~@46 c5@49 ~@15 c5@47 ~ d5@31 ~@3, ~@23 a4@7 ~@66]/6", // G C G Dm C Em A
})).s("gm_string_ensemble_1").gain(0.19)

// chords · violin · A5 C F5 C A5 C F5 C
const violin = note(`<
  ~@30
  [[a3,e4]@7 ~ [g3,e4]@7 ~]!2
  [[c4,f4]@7 ~ [c4,e4]@7 ~]
  ~@19
  [~ [a3,e4]@14 ~@2 [g3,e4]@14 ~]!2
  [~ [c4,f4]@14 ~@2 [c4,e4]@14 ~]
  ~@26
>`).s("gm_violin").gain(0.26).pan(0.6)

// chords · synth strings 1
const synth_strings_1 = note("<~@19 A B A B A C ~@21 A B A B A C ~@7 D E@2 F ~@3 A B A B A ~@10>".pickRestart({
  A: "[g2,g3,b3] [f2,f3,a3], d4", B: "[e2,g3,c4,e4]", C: "[c3,e3,g3,c4]", D: "[c4,e4,g4]@14 ~ [d4,f4,a4]@16 ~",
  E: "[[c4,e4,g4]@15 ~ [d4,f4,a4]@14 ~ [c4,e4,g4]@14 ~@2 [d4,f4,a4]@16 ~]/2", F: "[c4,e4,g4]@15 ~ [d4,f4,a4]@14 ~@2",
})).s("gm_synth_strings_1").gain(0.32).pan(0.6)

// other · fiddle
const fiddle = note("<~@2 A B C ~@51 A B C ~@13 A B C ~ A B C ~@2>".pickRestart({
  A: "~@7 g4", B: "c5@4 d5@4 e5@5 ~@3", C: "e5 d5@2 ~",
})).s("gm_fiddle").gain(0.32)

// other · lead 1 square
const lead_1_square = note("<~@25 [f4@8 d4@8 e4@8 b3@7 ~] [a3 d4 b3 g3] ~@54>").s("gm_lead_1_square").gain(0.5).pan(0.4)

// other · lead 5 charang
const lead_5_charang = note("<~@12 A B C ~@26 A B C ~@37>".pickRestart({
  A: "~@2 e5 c5 e5 g5 b5 g5 e5 g5 b5 g5 e5 b5 d6 c6 a5 f5 c5 a4 c5 f5 a5 f5 c5 f5 a5 f5 c5 a5 c6 e6",
  B: "d6 b5 g5 e5 g5 b5 d6 b5 g5 e5 b5 d6 b5 d6 e6 g6 e6 c6 a5 e5 c5 f5 a5 f5 c5 f5 a5 f5 a5 c6 f5 e6",
  C: "d6 b5 g5 e5 g5 b5 d6 b5 g5 b5 d6 b5 a5 d6 g5 c6 ~@16",
})).s("gm_lead_5_charang").gain(0.09)

// other · lead 5 charang · soft notes
const lead_5_charang_soft = note("<~@11 A B ~ C ~@25 A B ~ C ~@37>".pickRestart({
  A: "~@30 a5 c6", B: "b5 g5 ~@30", C: "~@16 c6 a5 f5 c5 f5 a5 c6 a5 f5 a5 c6 a5 c6 e6 d6 ~",
})).s("gm_lead_5_charang").gain(0.04)

// drums · rim
const rim = s("rim").struct("<[x!2] ~@80>").gain(0.35)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B@2 C D A B@2 E D A B@2 E D A B@2 E F G A B E D A B@2 A B@2 E D A B@2 E H A I ~@2 D A B@2 E D A B@2 E D A B@2 E D
  A B@2 E D A B J E D A B@2 E D B@2 E D B ~@2
>`.pickRestart({
  A: "x ~@14 x", B: "x ~@6 x", C: "x ~@5 x!2", D: "x!2 ~@14", E: "x ~ x ~@3 x!2", F: "x!2 ~@12 x ~", G: "x ~@5 x ~@8 x",
  H: "x!3 ~@13", I: "x", J: "x ~@2 x ~@3 x",
})).gain(0.69)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A B A@3 B A@3 B A@3 B ~@2 A B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@10 ~@2
>`.pickRestart({
  A: "~ x", B: "~ x ~@2 x ~@3",
})).gain(0.62)

// drums · low tom
const low_tom = s("lt").struct("<~ [x!4]!78 ~@2>").gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~ A@29 ~@3 A@21 ~ A@4 ~@4 A@16 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
})).gain(0.55)

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

// drums · tambourine
const tambourine = s("tb").struct("<~ [x!8]!78 ~@2>").gain(0.55)

stack(
  piano, bass, electric_guitar_clean, flute, string_ensemble_2, string_ensemble_1, string_ensemble_1_soft, violin,
  synth_strings_1, fiddle, lead_1_square, lead_5_charang, lead_5_charang_soft, rim, kick, snare, low_tom, hihat,
  mid_tom, tambourine
)

More by Battiato