Strudelify

Il tempo di morire

Battisti

KeyC majorTempo110 bpm
0:00/0:00
// Il tempo di morire — Battisti
// 110 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 distortion guitar (copy of ch 1 acoustic guitar steel)
// note: Full arrangement: all 141 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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 · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B A C A C A C A C D@2 E F G H D I J C K L A C A C D@2 E C G H D M N O A C A C A C D@2 P C G H Q M N C A C A C A C
  D@2 P F G H Q M N C A C A C A F D@2 P F G H Q M N C A C A C A F D@2 P C G H Q M N C A C A C A F D@2 P C G H Q M N C A
  C A C A C D@2 P C G H Q M N F D M N C D R S@2 ~
>`.pickRestart({
  A: "[c3,e3,g3,c4]@2 ~@4 [c3,e3,g3,c4]@2 ~@4 [f3,c4]@2 [d#3,g3,c4] ~, ~@3 c3, ~@12 a3 ~@3", // C F5 Cm
  B: "[e3,g3,c4] ~@5 [e3,g3,c4]@2 ~@4 [f3,a3,c4]@2 [e3,g3,c4] ~, c3 ~@3", // C F C
  C: "[c3,e3,g3,c4] ~@5 [e3,g3,c4]@2 ~@4 [f3,a3,c4]@2 [e3,g3,c4] ~", // C F C
  D: "[g2,b3,d4,g4]@2 ~@4 [g2,b3,d4,g4]@2 ~@4 [c4,g4]@2 [a#3,d4,g4] ~, ~@3 g3, ~@12 e4 ~@3", // G C5 Gm
  E: "[c3,e3,g3,b3,c4] ~@5 [c3,e3,g3,c4]@2 ~@4 [f3,c4]@2 [d#3,g3,c4] ~, ~@3 c3, ~@12 a3 ~@3", // Cmaj7 C F5 Cm
  F: "[c3,e3,g3,c4] ~@5 [e3,g3,c4]@2 ~@4 [f3,a3,c4]@2 [e3,g3,c4]@2", // C F C
  G: "[f2,a3,c4,f4]@2 ~@4 [f2,a3,c4,f4]@2 ~@4 [a#3,f4]@2 [g#3,c4,f4] ~, ~@3 f3, ~@12 d4 ~@3", // F A#5 Fm
  H: "[f2,a3,c4,f4] ~@5 [f2,a3,c4,f4]@2 ~@4 [a#3,d4,f4]@2 [a3,c4,f4] ~", // F A# F
  I: "[f2,a3,b3,c4,f4] ~@5 [f2,a3,c4,f4]@2 ~@4 [a#3,f4]@2 [g#3,c4,f4] ~, ~@3 f3, ~@12 d4 ~@3", // F A#5 Fm
  J: "[c3,e3,g3,a3,c4] ~@5 [c3,e3,g3,c4]@2 ~@4 [f3,c4]@2 [d#3,g3,c4] ~, ~@3 c3, ~@12 a3 ~@3", // Am7 C F5 Cm
  K: "[c3,e3,g3,c4]@2 ~@4 [c3,e3,g3,c4]@2 ~@4 [f3,a3,c4]@2 [d#3,g3,c4] ~", // C F Cm
  L: "[c3,e3,g3,c4] ~@5 [e3,g3,c4]@2 ~@4 [f3,a3,c4]@2 [c3,e3,g3,c4] ~", // C F C
  M: "[f2,a3,b3,c4,f4] ~@5 [f2,a3,c4,f4]@2 ~@4 [d4,f4] ~ [g#3,c4,f4] ~, ~@3 f3, ~@6 a#3 ~", // F Dm Fm
  N: "[c3,e3,g3,a3,c4] ~@5 [c3,e3,g3,c4]@2 ~@4 [a3,c4] ~ [d#3,g3,c4] ~, ~@3 c3, ~@6 f3 ~", // Am7 C Am Cm
  O: "[c3,e3,g3,c4] ~@5 [g3,c4]@3 ~@3 [f3,g3,c4] ~ [e3,a3,c4] ~, ~@6 e3 ~@9", // C C5 Fsus2 Am
  P: "[c3,e3,g3,b3,c4] ~@5 [c3,e3,g3,c4]@2 ~@4 [a3,c4] ~ [d#3,g3,c4] ~, ~@3 c3, ~@6 f3 ~", // Cmaj7 C Am Cm
  Q: "[g2,b3,d4,g4]@2 ~@4 [g2,b3,d4,g4]@2 ~@4 [e4,g4] ~ [a#3,d4,g4] ~, ~@3 g3, ~@6 c4 ~", // G Em Gm
  R: "[a3,c4,f4]@11 ~@5, b3 ~@15", S: "[~@16 a3@15 ~, ~@15 [f3,c4]@15 ~@2]/2",
})).s("gm_acoustic_guitar_steel").gain(0.33).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  ~@36 A@4 B A C D E F G H I J A@6 B A C D E F G H I J A@6 B A C D E F G H I J A@2 ~@15 K A@4 B A C D E F G H I J A@6 B
  A C D E F G H I J A@2 I J A@2 I L ~ M@2
>`.pickRestart({
  A: "c1 ~@2 c1 ~@2 f1 e1", B: "c1 ~@2 c1 ~ c1 f1 e1", C: "g1 ~@5 g1@2 ~@4 c2@2 b1@2", D: "g1 ~@2 g1 ~@2 g1 e1",
  E: "c1@2 ~@4 c1@2 ~@2 c1@2 f1@2 e1 ~", F: "c1 ~@5 c1@2 ~@4 f1@2 e1@2", G: "f1 ~@2 f1 ~@2 a#1 a1",
  H: "f1 ~@2 f1 ~@2 f1 f#1", I: "g1@2 ~@4 g1 ~@5 g1@2 f#1@2", J: "f1@3 ~@3 f1@2 ~@4 f1@2 d1@2",
  K: "~@10 g1 ~ g1@2 e1@2", L: "f1 ~", M: "[f1@3 ~]/2",
})).s("gm_electric_bass_finger").gain(0.37)

// chords · rock organ
const rock_organ = note(`<
  ~@4 A@6 B@2 C@2 D@2 E F@3 G@8 H@4 E I C@2 J@4 K@2 B@2 L@2 M@2 N O P@2 Q@6 R@2 L@2 S@2 N T@3 U@8 V@2 W@2 X Y@8 ~ Z@6 X
  AA@8 ~ AB@2 AC@2 AD@2 E AE@3 AF@8 AG@2 AH@2 AI AJ AK@3 AL@3 AM AN@4
>`.pickRestart({
  A: "[e4,g4,c5]/6", B: "[[g4,b4,d5]@31 ~]/2", C: "[[e4,g4,c5]@31 ~]/2", D: "[[f4,a4,c5]@31 ~]/2", E: "[g4,b4,d5]",
  F: "[[f4,a4]@16 [e4,g4]@31 ~, c5@47 ~]/3", G: "[[e4,c5]@96 [b4,d5]@31 ~, g4]/8", H: "[[e4,g4] [f4,a4], c5]/4",
  I: "[f4,a4,c5]", J: "[[e4,g4,c5]@63 ~]/4", K: "[e4,g4,c5]@6 [e4,g4,c5]@9 ~", L: "[g4,c5,e5]/2",
  M: "[[a4,c5,f5]@31 ~]/2", N: "[b4,d5,g5]", O: "[a4,c5,f5]@15 ~", P: "[[g4,c5,e5]@31 ~]/2",
  Q: "[[e4,g4]@63 ~ [g4,e5]@32, c5@95 ~]/6", R: "[b4,d5,g5]/2", S: "[a4,c5,f5]/2",
  T: "[[a4,f5]@16 ~@8 c5@7 ~ c5@15 ~, c5@23 ~@25, ~@16 [g4,e5]@31 ~]/3", U: "[[e4,c5]@3 [b4,d5], g4@127 ~]/8",
  V: "[c5,e5,g5]", W: "[c5,f5,a5]/2", X: "[d5,g5,b5]", Y: "[[f5,a5]@16 g5@31 ~@65 e4@16, c5, ~ e5@6 ~, ~@3 g4@5]/8",
  Z: "[~@4 c5@3 ~ [f5,a5]@4, [b4,d5]@32 e5@31 ~@33, ~@3 g5@5 ~@4, ~@56 c6@39 ~]/6", // F Bm
  AA: "[[f5,a5]@16 g5@31 ~ g4@80, c5, ~ e5@7]/8", AB: "[b4,d5]/2", AC: "[e4,c5]/2", AD: "[f4,a4,c5]/2",
  AE: "[[a4,f5]@16 [g4,e5]@31 ~, c5]/3", AF: "[c5@32 ~@32 e6@16 e5@15 ~ [d5,b5]@32, g5, e5@63 ~@65, ~ c6@2 ~]/8",
  AG: "[e5@22 ~@2 c6@7 ~, c6@3 ~, ~@22 e5@9 ~]/2", AH: "[f5,a5,c6]/2", AI: "[d5,g5,b5]@15 ~", AJ: "[c5,f5,a5]",
  AK: "[e5@32 [b4,d5]@15 ~, g5@47 ~, c5@7 ~]/3", AL: "[[a4,f5]@16 [g4,e5]@31 ~, c5@47 ~]/3", AM: "[b4,d5,g5]@15 ~",
  AN: "[[c5,f5,a5]@55 ~@9]/4", // F
})).s("gm_rock_organ").gain(0.07)

// drums · kick
const kick = s("bd").struct(`<
  ~@36 A@3 B A@3 B A B A B@2 A B A@11 C B@2 A@2 D E A@2 B E A@2 D A@2 F A G A G A ~@15 H A@5 G A F A@3 G A B G C A@10
  B@3 A@2 I G A@2 J A D ~ D K
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@2 x ~ x ~@2", C: "x ~@2 x ~@2 x ~", D: "x", E: "x ~@2 x!2 ~@3", F: "x ~@4 x ~@2",
  G: "x ~@2 x ~@3 x", H: "~@4 x!2 ~@2", I: "x ~ x ~@3 x!2", J: "x ~ x ~@2 x ~@2", K: "~ x",
})).gain(0.46)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@36 A@3 ~ A@3 ~ A ~ A ~@2 A ~@5 A ~ A@3 ~ A@2 ~@2 A@2 ~@2 B C ~@3 A@2 D ~@3 E ~@18 F C A ~ D ~@3 C ~@2 D ~ G ~ C ~ G
  ~@3 C ~ E ~ H ~ C ~@4 I ~@3 E@2 ~@4
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@4 x ~@2 x", C: "~ x", D: "~@7 x", E: "~ x ~@6", F: "~@3 x ~@4", G: "~ x ~@2",
  H: "~ x ~@2 x ~@3", I: "~@3 x!3 ~@2",
})).gain(0.26)

// drums · snare
const snare = s("sd").struct(`<
  ~@36 A@15 ~ A@15 ~ B C B A B ~ A D A C E C B@3 ~@17 F A B ~ B C B G B A B ~ B A B H A B@2 C B I B D B I A@3 B@2 J B@3
  K B ~@3 L
>`.pickRestart({
  A: "~@3 x", B: "~@5 x!2 ~", C: "~@5 x ~@2", D: "~@3 x ~@4", E: "~@3 x ~@2 x ~", F: "x ~@4 x!2 ~", G: "~@7 x",
  H: "~@4 x!2 ~@2", I: "~@5 x ~ x", J: "~@4 x!4", K: "~@3 x!2 ~ x!2", L: "~@6 x!2 ~@8",
})).gain(0.52)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@73 A ~@2 A ~@2 B ~@23 A B ~@2 A ~ A ~ A ~@4 A ~@2 B ~@3 C B ~@3 B ~@2 D ~@9
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@7 x", C: "~@5 x ~ x", D: "~@3 x ~@4",
})).gain(0.26)

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

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@36 A ~@8 B ~ C ~@3 D ~ A ~@13 D ~@9 E ~@63>".pickRestart({
  A: "~@5 x ~@2", B: "~@5 x!2 ~", C: "~ x ~@3 x ~@2", D: "~@3 x ~@3 x", E: "~@7 x",
})).gain(0.26)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@36 A B C@4 D C@5 E@2 C F G H I J K J L F M N E H O M P Q R S T U T V W X E Y Z AA AB AC AD Q ~@16 O AE AF AG G AH O
  AI AJ AA AJ V AK AL AF AM O Y O AN O V O AO K S G AP AQ AF@2 F AJ T J Q AK ~@4
>`.pickRestart({
  A: "x ~@2 x ~@3 x", B: "x ~ x ~@4 x", C: "x ~@2 x ~ x ~ x", D: "~@5 x!2 ~", E: "~@3 x ~ x ~ x", F: "x ~ x!2 ~@4",
  G: "~@3 x!3 ~ x", H: "x ~ x!4 ~ x", I: "~ x!4 ~@3", J: "x ~ x!3 ~@2 x", K: "~@3 x ~@3 x", L: "~@2 x!2 ~ x ~@2",
  M: "~@2 x!2 ~@3 x", N: "x ~@2 x!3 ~ x", O: "~@3 x!2 ~@2 x", P: "x ~@2 x!2 ~@2 x", Q: "x", R: "~@4 x!3 ~",
  S: "x!4 ~@4", T: "~ x!4 ~@2 x", U: "x ~ x!2 ~ x ~@2", V: "x ~@2 x!3 ~@2", W: "~ x!5 ~ x", X: "x!2 ~ x!2 ~@3",
  Y: "x ~ x!3 ~@3", Z: "~ x ~@2 x!2 ~ x", AA: "x!2 ~ x ~@4", AB: "~@4 x!2 ~ x", AC: "~@2 x!2 ~@2 x ~",
  AD: "~ x ~ x!2 ~@2 x", AE: "x!3 ~ x ~@3", AF: "~@2 x!3 ~@2 x", AG: "x!2", AH: "x ~@2 x!2 ~@3", AI: "x!2 ~@2 x!2 ~@2",
  AJ: "~@2 x!3 ~@3", AK: "~@3 x!2 ~@3", AL: "~@2 x!3 ~ x ~", AM: "x!3 ~@5", AN: "x!2 ~ x!3 ~@2", AO: "~ x!2 ~@5",
  AP: "x ~@2 x ~ x ~@2", AQ: "~ x!2 ~ x!2 ~@2",
})).gain(0.26)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@39 A ~@13 B C ~@2 D E F ~ B G B D ~ H ~ H G ~ I ~ B ~ H G ~ H G H G ~@18 H ~ B J ~@2 H ~ C G C J H ~@3 J B H ~ J B
  ~@2 G@2 ~ J ~@3 B ~@4 B ~@4
>`.pickRestart({
  A: "~@9 x ~@6", B: "~ x ~@6", C: "~@7 x", D: "~@5 x ~@2", E: "~@4 x ~@2 x", F: "~@4 x!2 ~@2", G: "~ x", H: "~ x ~@2",
  I: "~ x ~@2 x ~@3", J: "~ x!2 ~@5",
})).gain(0.13)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@36 A ~@2 B ~@3 C ~ A ~ D ~@3 E ~ F ~ A ~ G ~ H ~@3 I ~@3 J ~ F ~ K ~ K ~ B ~ A ~ K ~ G ~ L ~@15 K ~ K ~ A ~ F ~ C ~
  G ~ A G@2 ~ M ~ K ~ K ~ A ~ N ~ A ~ K@2 ~@2 M ~@2 F O A ~@4
>`.pickRestart({
  A: "~@3 x", B: "~@5 x!3", C: "~@2 x!2 ~@2 x!2", D: "~ x!2 ~@3 x ~", E: "~ x!2 ~ x!4", F: "~@5 x!2 ~", G: "~@7 x",
  H: "~@2 x ~@2 x!2 ~", I: "~@4 x ~ x!2", J: "~ x!2 ~ x!3 ~", K: "~@6 x!2", L: "~@2 x!6", M: "~@4 x!4",
  N: "x ~@2 x ~ x ~@2", O: "~ x!6 ~",
})).gain(0.46)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct(`<
  ~@45 A ~ A ~@3 B ~ C ~ A ~@3 D ~@3 A ~@5 E ~@7 E ~@5 D ~@37 E ~ F ~ A ~@6 E ~@3 E ~@4
>`.pickRestart({
  A: "~@5 x ~@2", B: "x ~@2 x ~@4", C: "~@3 x ~@4", D: "~ x ~@6", E: "~@7 x", F: "~@4 x!2 ~@2",
})).gain(0.26)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@36 A@6 B A@8 ~ A@11 ~ A@3 ~@3 C ~ A ~ A ~ A D E D E ~ C ~@17 C ~ C ~ A ~ C ~ C@2 A ~ C ~ A F A D A ~ C ~ A ~ C G A ~
  F C A ~ C@2 ~@2 D ~@4
>`.pickRestart({
  A: "~@3 x", B: "~@3 x ~@3 x", C: "~@5 x!2 ~", D: "~@5 x ~@2", E: "~@3 x ~@2 x ~", F: "~@3 x ~@4", G: "~@7 x",
})).gain(0.52)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@68 A ~@3 B ~@8 B ~@19 B ~@8 B ~@2 B@2 ~ B ~ B ~@3 B ~@7 B ~@10>".pickRestart({
  A: "~@3 x ~@3 x", B: "~@5 x ~@2",
})).gain(0.33)

// drums · high tom
const high_tom = s("ht").struct("<~@115 [~@3 x] ~@7 [~@7 x] ~@4 [~@3 x] ~@12>").gain(0.39)

// drums · crash
const crash = s("cr").struct(`<
  ~@36 A ~@5 A ~ A ~@3 A@2 ~@2 A ~ A ~ A ~ A B A ~ A C A@2 ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A@3 D A ~@15 A ~ A ~ A B A ~ A ~
  A B A@3 ~ A ~ A ~ A ~ A ~ A ~ A ~ A@3 ~ A@2 ~ B A@2 ~ A ~
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~@3 x", D: "~@2 x!6",
})).gain(0.39)

// drums · ride bell
const ride_bell = s("rd").struct("<~@99 [~@3 x] ~@23 [~@3 x] ~@8 x ~@8>").gain(0.39)

stack(
  acoustic_guitar_steel, bass, rock_organ, kick, kick_soft, snare, snare_soft, low_tom, low_tom_soft, hihat, hihat_soft,
  mid_tom, mid_tom_soft, open_hat, open_hat_soft, high_tom, crash, ride_bell
)

More by Battisti