Strudelify
Roma capoccia cover art

1997 · Roma Capoccia

Roma capoccia

Antonello Venditti

KeyC majorTempo72 bpm
0:00/0:00
// Roma capoccia — Antonello Venditti
// 72 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: Full arrangement: all 74 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/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.

// bass · acoustic bass · "basso"
const bass = note(`<
  A B C B D E F G H I J K D L D E F G H I J K D L M N O P D E F G H I J K Q L R S T U V W X Y Z AA AB AC AD AE AF AG T U
  V W X Y Z AA AH AI ~ AJ AK AJ AK AJ AK AJ AK AL
>`.pickRestart({
  A: "f3@7 c3", B: "f2@12 f2 a2 c3@2", C: "f3@12 f3 c3@3", D: "f3@6 ~ f3 e3@6 e3@2", E: "d3@7 d3 c3@5 c3@3",
  F: "f3@7 f3 e3@3 d3@3 c3@2", G: "a#2@6 a#2@2 a2@7 a2", H: "g2@5 ~ g2@2 c3@4 c3@2 a#2@2", I: "a2@7 a2 d3@5 d3@3",
  J: "c3@7 c3!2 c3@2 c3 ~ c3 ~ c3", K: "f3@11 f3 a2 a#2 c3@2", L: "a#2@11 ~ a#2 a2 g2@2",
  M: "f2 f2@2 f2 f2@4 f2 f2@2 f2 f2@3 ~", N: "f2 f2@2 f2@2 f2@2 f2 f2@2 ~ f2 a2 a#2 c3@2",
  O: "f2 f2@2 f2@3 ~ f2@2 f2 ~ f2@4 ~", P: "f2!2 ~ f2@2 f2@2 f2 ~ f2 ~ f2 a2@2 a#2 c3", Q: "f3@7 f3 e3@6 e3@2",
  R: "f3 f3@2 f3@5 f3!2 ~ f3@2 f3 f2 a#2", S: "f3@2 f3 f3@2 f3 ~ f3 a2@4 d3@4", T: "g3@6 ~ g3 f#3@6 f#3@2",
  U: "e3@7 e3 d3@5 d3@3", V: "g3@7 g3 f#3@3 e3@3 d3@2", W: "c3@6 c3@2 b2@7 b2", X: "a2@5 ~ a2@2 d3@4 d3@2 c3@2",
  Y: "b2@7 b2 e3@5 e3@3", Z: "d3@7 d3!2 d3@2 d3 ~ d3 ~ d3", AA: "g3@11 g3 b2 c3 d3@2", AB: "g3@7 g3 f#3@6 f#3@2",
  AC: "c3@2 ~ c3@2 ~ c3@6 ~@4", AD: "g2 g2@2 g2 g2@4 g2 g2@2 g2 g2@3 ~",
  AE: "g2 g2@2 g2 ~ g2@2 g2 g2@2 ~ g2 b2 c3 d3@2", AF: "g2 g2@2 g2@3 ~ g2 ~ g2 ~ g2@4 ~",
  AG: "g2!2 ~ g2@2 g2@2 g2 ~ g2 ~ g2 b2@2 c3 d3", AH: "g3@6 ~ g3 f#3@6 ~ f#3", AI: "c3@3 ~",
  AJ: "g2@2 ~ g2@3 ~ g2 ~ g2@4 g2 d2 e2", AK: "g2@3 g2 ~ g2@6 g2 b2 c3 d3@2", AL: "g2 ~",
})).s("gm_acoustic_bass").gain(0.46)

// chords · string ensemble 1 · "archi"
const string_ensemble_1 = note(`<
  A@4 B C@2 D E@5 F G C@2 D E@5 F H@4 G C@2 D E@5 F I@2 J K@2 L M@5 N O@4 J K@2 L M@5 N ~ P@6 Q@3
>`.pickRestart({
  A: "[~@3 c4, d4@31 ~ d4@32, ~@8 c4@9 ~@15]/4", B: "[f3,a3] e3, c4@15 ~", C: "[d3 c3 f3 e3, a3@3 ~, ~ c4]/2",
  D: "[d3,a#3] [f#3,a3]", // Gm F#m
  E: "[[d3,a#3]@8 c4@4 d4@3 ~@9 d3@7 ~ c3@7 ~ [d3,a#3]@8 [d3,a#3]@15 ~ a3@8 [e3,g3]@8, g3@15 c4@8 ~@41 c4@16, ~@8 e3@15 ~ f3@48 ~@8, ~@2 a3@3 ~@5]/5", // Gm Em
  F: "a#3@8 c4@4 a#3@3 ~, [d3,f3]@15 ~", G: "[f3,a3] e3, c4",
  H: "[c4@2 b3@2 ~@3 g4 ~@2 b3@2 c4@3 [g3,a#3], f4@7 ~ f4@7 ~, ~@2 c4@3 ~@3]/4", // Gm
  I: "[a3@8 a#3@8 ~@4 f4@4 [g3,e4]@3 ~ [f#3,d4]@4, c4@7 ~, ~@16 a3@8 g#3 ~@2 a3@4 ~]/2", J: "[g3,b3] f#3, d4@15 ~",
  K: "[e3 d3 g3 f#3, b3@3 ~, ~ d4]/2", L: "[e3,c4] [g#3,b3]",
  M: "[[e3,c4]@8 d4@4 e4@3 ~@9 e3@7 ~ d3@7 ~ [e3,c4]@8 [e3,c4]@15 ~ b3@8 [f#3,a3]@8, a3@15 d4@8 ~@41 d4@16, ~@8 f#3@15 ~ g3@48 ~@8, ~@2 b3@3 ~@5]/5", // C F#m
  N: "[e3,g3,c4] ~", O: "[d4@2 c#4@2 ~@3 a4 ~@2 c#4@2 d4@3 [a3,c4], g4@7 ~ g4@7 ~, ~@2 d4@3 ~@3]/4",
  P: "[[d3,b3] [e3,c4] [d3,b3] [e3,c4], g3]/2", Q: "[[d3,b3] [e3,c4] [d3,b3] [e3,c4] [d3,b3] ~, g3@5 ~]/3",
})).s("gm_string_ensemble_1").gain(0.41)

// chords · piano
const piano = note(`<
  A B@3 C D E F G H I J K L C D E F G H I M K L N O P Q C D E F G H I M K L R S T U T V W@2 X Y T Z AA AB AC AD T U T V
  W@2 X Y AE AF@2 AG@2 AH@4 AI@3
>`.pickRestart({
  A: "d4 ~@6 f3, f2, a3 [a3,d4]!3, ~ f3@2 f3@2 f3@2 ~", B: "~@7 f3, f2, [a3,d4]!4, ~ f3@2 f3@2 f3@2 ~",
  C: "~@3 f3 ~@3 g3, f2 e2, [a3,c4,f4]@2 [c3,a3,c4,f4]@2 ~ g3@2 ~, ~ f3@2 ~ [c4,g4]@2 [c3,c4,g4]@2", // F C5
  D: "~@3 f3 ~@3 f3, d2 c2, [c4,f4]!2 [a3,c4,f4]!2, ~ f3@2 ~@2 f3@2 ~", // F5 F
  E: "~@3 f3 ~@3 g3, f2 e2, [a3,c4]!2 [c4,g4]!2, ~ f3@2 ~@2 g3@2 ~", // Am C5
  F: "~@6 f3@2 ~@2 a3@2 a3!2 [a3,d4,a4]@2, a#1 d2, [a#3,d4,f4] [a#2,a#3,d4,f4] ~ [d3,f#4], ~ f3@2 ~ [d4,f#4]@2 d4 ~, ~@13 g4@3", // D5 A# D
  G: "a#3@2 ~@4 a#3@2 ~@2 g3@2 ~ [g3,c4,e4]@2 [a#3,d4], g2 c2, [d4,a#4] [g3,d4,a#4] ~ c3, ~@2 a#3@4 ~@2 [c4,e4]@5 ~@3", // C A# Gm C
  H: "[a3,c4]@2 ~ e3 ~@3 f3, a2@2 [a3,d4] [d3,a3,d4], ~ [a1,a3,c4] d2@2, ~@5 f3@2 ~", // Am D5 Am
  I: "~@3 [d#2,f3] ~@3 f3, [c2,c3]!2, [a3,c4,f4]!2 [a#3,d4]!2, ~ f3@2 ~@2 f3@2 ~", // D#sus2 C F A#
  J: "~@4 a#3@2 f3 ~@4 f3@2 ~ d4@2, f2@13 [f3,a#3]@3, a#2@7 f3@2 a#1@7, d4@7 [a#3,d4]@3 a#2@6, a#3 f3 f4@6", // A#5 A#
  K: "[f1,f3] ~@5 f3@2 ~@6 g3@2, f2 e2, [a3,f4] [a3,c4,f4] [c4,g4]!2, c4 f3@2 ~@2 g3@2 ~", // F Dm F C5
  L: "~@6 f3@2 [f3,a#3]@3 ~@3 f3@2, f4@13 a#2@3, a#1@11 [a#3,c4]@5, [a#3,d4]@4 a#2@7 f3 a#1@4, ~ f3 [a#3,d4]@2 d4@4", // A#5 A#sus2 A#
  M: "~@4 a#3@2 f3 ~@4 f3@2 ~ d4@2, [a#1,a#2]@9 a#1@7, d4@7 [a#3,d4]@6 [f3,a#3]@3, a#3 f4@3, ~@2 f3@4 ~ f3@3 a#2@6", // A# A#5
  N: "[c4,f4] ~ f4 [f3,f4] ~@3 g3, f2@7 ~ f2@8, a3 [a3,c4] [b3,d4,g4]!2, ~ f3@2 ~@2 g3@2 ~", // F5 F Am G
  O: "f3 ~@5 f3@2 d4@3 [d4,a#4]@2 ~ [c4,a4]@2, f2, [a#3,c4,d4,f4]@4 [a#3,c4,d4,f4]@4 c4@5 [d4,a#4]@3, ~ f3@2 ~ [f3,a#3,f4]@4", // Gm F A# Gm A#5
  P: "~@3 f3 ~@3 g3, f2!2, [a3,c4,f4]!2 [b3,d4,g4]!2, ~ f3@2 ~@2 g3@2 ~", // F G
  Q: "~@6 f3 ~@7 c4@2, f2@9 f3 f2@3 a#3@3, [a#3,c4,d4,f4]@4 [f1,a#3,c4,d4,f4]@3 [a#3,c4]@4 f3@5, ~@2 f3@4 ~ [d4,f4]@9, ~@7 f3 f1@8", // A# A#sus2 Dm
  R: "[a3,c4,f4]@3 ~@3 f3@2 ~@2 f3 ~@3 [a#3,d4,f4,a#4]@2, [f1,f2]@4 f1@4 [f1,a#3,d4,f4]@3 [a#3,d4,f4]@2 f2@3, ~@3 [a3,c4,f4]@5 ~@3 f3@5, ~@5 f2@7 f1@4", // F A# F A# F
  S: "[f1,a3,c4,f4]@3 ~@3 f3@2 [a1,g3,c4,e4,g4]@4 [a3,c4,f#4] [a3,c4] [a3,c4,d4,a4]@2, [f2,f3]@5 f2@3 ~@4 d2@4, ~@3 [a3,c4,f4]@5 ~@4 d4@2 ~@2, ~@4 f1@4 ~@5 g4@3", // F Am7 F#dim Am D7 F
  T: "~@3 d4 ~@3 d4, [g2,g3] [f#2,f#3], [g4,b4]!2 [a4,d5]!2, ~ d4@2 ~@2 d4@2 ~", // G F# G D5
  U: "~@6 d4@2 ~@2 d4@2 [d4,g4]!2 [d4,g4,b4]@2, [e2,e3] [d2,d3], [g4,b4]@2 [g4,b4]@2 [g4,b4]@2 b4 ~, ~@2 d4@4 ~@7 c5@3", // G5 G E D G
  V: "~@3 c4 ~@3 b3, c3@4 ~ b3@2 ~, [e4,g4] [c2,e4,g4] [b1,b2]@2, ~ c4@2 ~ [d4,e4,g#4]@2 [d4,e4,g#4]@2", // Em C B E7
  W: "[c4 ~@5 c4@2 ~@2 d4@2 ~ [d4,f#4]@2 ~ b3 ~@5 b3@2 ~@6 b3@2, [a1,a2]@8 d2@8 [b1,b2]@7 ~ e2@8, [e4,a4]@4 [e3,e4,a4]@4 [d3,f#4,a4]@5 a4 ~ [c2,c3,c4,e4,a4]@2 ~ b3@4 ~@2 [e3,e4,g4]@4 [e3,e4,g4]@4, ~ c4@2 ~@3 d3@2 [d4,f#4]@2 [d4,f#4]@2 ~ b3@2 ~]/2", // D A B A5 D Am Em D
  X: "~@6 g3@2 g3 ~@5 g3@2, [d2,d3]!2, [b3,d4,g4]!2 [c4,e4]!2, ~ g3@2 ~@2 g3@2 ~", // D G C
  Y: "[c4,e4]@4 ~@4 [c4,e4]@2 g3 ~@3 [g3,e4]@2, [c2,c3]@3 c2, g3@6 g3@4 ~ [g3,e4]@2 c3@3, ~@4 [c4,e4]@4 ~@3 c4@5", // C
  Z: "[g3,c4,e4]@3 [g3,c4,e4]@3 [c2,g3,c4,e4]@3 ~@7, c3@9 ~@7, c2@3 ~@5", // C
  AA: "[d4,g4] ~ g4 [g3,g4] ~@3 a3, g2@7 ~ g2@8, b3 [b3,d4] [c#4,e4,a4]!2, ~ g3@2 ~@2 a3@2 ~", // G5 G Bm A
  AB: "g3 ~@5 g3@2 e4@3 [e4,c5]@2 ~ [d4,b4]@2, g2, [c4,d4,e4,g4]@4 [c4,d4,e4,g4]@4 d4@5 [e4,c5]@3, ~ g3@2 ~ [g3,c4,g4]@4", // C G C C5
  AC: "~@3 g3 ~@3 a3, g2!2, [b3,d4,g4]!2 [c#4,e4,a4]!2, ~ g3@2 ~@2 a3@2 ~", // G A
  AD: "~@6 g3 ~@7 d4@2, g2@9 g3 g2@3 c4@3, [c4,d4,e4,g4]@4 [g1,c4,d4,e4,g4]@3 [c4,d4]@4 g3@5, ~@2 g3@4 ~ [e4,g4]@9, ~@7 g3 g1@8", // C Csus2 Em
  AE: "g4 ~@2 g3 ~@3 a3, g2 f#2, [b3,d4] [b3,d4,g4] [d4,a4]!2, ~ g3@2 ~@2 a3@2 ~", AF: "[c2,c3,g3,c4,e4]/2",
  AG: "[~@6 [b3,d4,g4]@2 [c4,e4]@3 ~@5 [b3,d4,g4]@4 ~@2 g3@2 e4@2 ~ [e4,g4]@2 [g3,c4,e4,g4]@3, g2 [g2,g3] g2@2, [b3,d4,g4]@6 ~@5 [c4,e4]@5 g3@6 ~@4 g3 c5@5, ~@2 g3@6 ~@5 g1@11 g1@8, ~@20 [b3,d4,g4]@4 c4@5 ~@3]/2", // G C G Em C G C G
  AH: "[~@6 [b3,d4,g4]@2 [c4,e4]@3 ~@5 [b3,d4,g4]@4 ~@2 g3@2 e4@2 ~ [e4,g4]@2 [g3,c4,e4,g4]@3, [g1,g2] [g2,g3] g2@2, [b3,d4,g4]@6 ~@5 [c4,e4]@5 g3@6 ~@4 g3 c5@5, ~@2 g3@6 ~@5 g1@11 g1@8, ~@20 [b3,d4,g4]@4 c4@5 ~@3]/2", // G C G Em C G C G
  AI: "[~@6 [b3,d4,g4]@2 [c4,e4]@3 ~@5 [b3,d4,g4]@4 ~@2 g3@2 e4@2 ~ [e4,g4]@2 [g3,c4,e4,g4]@3 [g1,b3,d4,g4]@16, [g1,g2] [g2,g3] g2@4, [b3,d4,g4]@6 ~@5 [c4,e4]@5 g3@6 ~@4 g3 c5@5 ~@16, ~@2 g3@6 ~@5 g1@11 g1@8 ~@16, ~@20 [b3,d4,g4]@4 c4@5 ~@19]/3", // G C G Em C G C G
})).s("gm_piano").gain(0.46)

// drums · kick
const kick = s("bd").struct("<~@14 A@6 ~@2 A B C@4 A@6 ~@2 A B C@2 A@7 B A D C@4 A@7 B A E ~ C@8 E>".pickRestart({
  A: "x!2", B: "x ~@6 x!2 ~ x ~@5", C: "x!2 ~ x ~@4 x!2 ~ x ~@4", D: "x ~@2 x ~@2 x ~@9", E: "x",
})).gain(0.41)

// drums · rim
const rim = s("rim").struct("<~@4 A@7 B ~@53 A C A C A C A C ~>".pickRestart({
  A: "~ x ~ x", B: "x", C: "~ x ~@2",
})).gain(0.46)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@11 A B C B@7 D B E B@3 F B@7 D B G B H B@7 I B J B@3 F B@7 I B ~ K ~ L ~ L ~ L ~ L ~
>`.pickRestart({
  A: "~@12 x!2 ~@2", B: "~ x ~ x", C: "~@4 x ~@7 x!2 ~@2", D: "x ~@11 x!2 ~@2", E: "~@4 x ~@5 x!6",
  F: "~@4 x ~@7 x ~ x!2", G: "~@4 x ~@4 x ~ x!2 ~ x!2", H: "~@4 x ~ x!2 ~@4 x ~@3", I: "x ~@3 x!2 ~@6 x ~ x!2",
  J: "~@9 x ~@4 x!2", K: "~@14 x!2", L: "~@12 x ~ x!2",
})).gain(0.46)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B A B A B A C D E D E D E D E A C D F G@4 D E D E D E A C D F H@2 D E D E D E A C D I G@4 D E D E D E A C D ~@2
  G@8 J
>`.pickRestart({
  A: "x ~ x ~@4 x!2 ~ x ~@5", B: "x ~ x ~@4 x!2 ~ x!2 ~@4", C: "x ~ x ~@2 x!4 ~ x!2 ~@4",
  D: "x ~ x!3 ~ x ~ x!3 ~ x ~ x ~", E: "x ~ x!3 ~ x ~ x!2 ~ x ~@2 x ~", F: "x ~ x!3 ~ x ~ x!2 ~@2 x ~@3",
  G: "x!2 ~ x ~ x!5 ~ x ~ x!3", H: "~ x ~ x ~ x!3 ~ x ~ x ~ x!3", I: "~ x ~@2 x ~@2 x ~@8", J: "x",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@49 A ~@14 A ~ A ~ A ~ A ~ A ~>".pickRestart({
  A: "~@12 x!2 ~@2",
})).gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@49 [~@11 x ~@4] ~@14 [~@9 x ~ x ~@4] ~@9>").gain(0.41)

// drums · crash
const crash = s("cr").struct("<~@23 A ~@4 A ~@8 A ~@2 A ~@13 A ~@8 A ~ A ~ A ~ A ~ A ~ A>".pickRestart({
  A: "x",
})).gain(0.46)

// drums · ride
const ride = s("rd").struct(`<
  A@4 B ~@7 C D E F E F E F E G E G H@4 E F E F E F E G E G H@2 E F E F E F E G E ~ H@4 E F E F E F E G E ~@2 H@8 ~
>`.pickRestart({
  A: "~ x ~ x", B: "x", C: "x ~ x!3 ~ x ~ x!3 ~ x ~ x ~", D: "x ~ x!3 ~ x ~ x!2 ~ x ~@2 x ~", E: "x!2 ~ x",
  F: "x ~@2 x", G: "x!2 ~@2", H: "x!8",
})).gain(0.36)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<A@4 B@8 ~@8 B@2 ~@12 B@2 ~@10 B@2 ~@12 B@2 ~@12>".pickRestart({
  A: "x!8", B: "~ x ~ x",
})).gain(0.52)

// drums · woodblocks · soft notes
const woodblocks_soft = s("woodblock:5").struct("<[~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!4 ~@70>").gain(0.3)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct("<[~ x ~ x]!4 ~@9 [x!2 ~@2] ~@60>").gain(0.52)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@40 [x!16]!9 [~@15 x] [x!16]!13 ~@2 [x!16]!8 ~>").gain(0.88)

stack(
  bass, string_ensemble_1, piano, kick, rim, low_tom, hihat, mid_tom, high_tom, crash, ride, woodblocks,
  woodblocks_soft, woodblocks_2, jingle_bells
)

More by Antonello Venditti