Strudelify

Il monolocale

Battisti

KeyE minorTempo120 bpm
0:00/0:00
// Il monolocale — Battisti
// 120 bpm, 2/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 21) are rendered on a constant 2/4 grid of one bar per cycle
// note: Full arrangement: all 259 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · "Chitarra Acustica"
const acoustic_guitar_steel = note(`<
  A@3 B A@3 B C@3 D E@3 F G@4 H A@3 B A@3 B A@3 B A@3 B I@3 J I@3 J C@3 K L@3 M C@3 K L@3 M N@3 H A@3 B A@3 B A@3 B A@3
  B I@3 J I@3 J C@3 K L@3 M C@3 K L@3 M ~@21 O@2 H A@3 B A@3 B A@3 B A@3 B I@3 J I@3 J C@3 K L@3 M C@3 K L@3 M C@3 K L@3
  M C@3 K L@3 M ~@16 P Q R Q S Q T U@2 Q R Q S Q V W P Q R Q S Q T U@2 Q R Q S Q V W P Q R Q S Q T U@2 Q R Q S Q V W
  ~@10
>`.pickRestart({
  A: "[[b2,e3,g3,b3,e4]@4 [b2,e3,g3,b3,e4]@2 [b2,e3,g3,b3,e4]@4 [b2,e3,g3,b3,e4]@2 [b2,e3,g3,b3,e4]@2 [b2,e3,g3,b3,e4]@4 [b2,e3,g3,b3,e4]@2 [b2,e3,g3,b3,e4]@2 [b2,e3,g3,b3,e4] ~]/3", // Em
  B: "[b2,e3,g3,b3,e4]@2 [b2,e3,g3,b3,e4]!2", // Em
  C: "[[b2,e3,g3,b3,e4]@4 [b2,e3,g3,b3,e4]@2 [b2,e3,g3,b3,e4]@4 [b2,e3,g3,b3,e4]@2 [d3,f3,a3,d4]@2 [d3,f3,a3,d4]@4 [c3,g3,c4,e4]@2 [c3,g3,c4,e4]@2 [c3,g3,c4,e4] ~]/3", // Em Dm C
  D: "[d3,f3,a3,d4]@2 [d3,f3,a3,d4]!2", // Dm
  E: "[[b2,e3,g3,b3,e4]@4 [b2,e3,g3,b3,e4]@2 [b2,e3,g3,b3,e4]@4 [b2,e3,g3,b3,e4]@2 [d3,f3,a3,d4]@2 [d3,f3,a3,d4]@4 [c3,e3,g3,c4]@2 [c3,e3,g3,c4]@2 [c3,e3,g3,c4] ~]/3", // Em Dm C
  F: "[a2,d3,f3,a3]@2 [a2,d3,f3,a3]!2", // Dm
  G: "[[c3,e3,g3,b3]@4 [c3,e3,g3,b3]@2 [c3,e3,g3,b3]@4 [c3,e3,g3,b3]@2 [c3,e3,g3,b3]@2 [c3,e3,g3,b3]@4 [c3,e3,g3,b3]@2 [c3,e3,g3,b3]@2 [c3,e3,g3,b3]@4 [b2,e3,g3,b3]@2 [a2,d3,f3,a3]@2 [a2,d3,f3,a3] ~]/4", // Cmaj7 Em Dm
  H: "[g2,c3,e3,g3]@2 [f2,a2,d3,f3]!2", // C Dm
  I: "[[b2,d3,f3,b3,d4]@4 [b2,d3,f3,b3,d4]@2 [b2,d3,f3,b3,d4]@4 [b2,d3,f3,b3,d4]@2 [b2,d3,f3,b3,d4]@2 [b2,d3,f3,b3,d4]@4 [c3,e3,g3,c4]@2 [c3,e3,g3,c4]@2 [c3,e3,g3,c4] ~]/3", // Bdim C
  J: "[c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2", K: "[c3,g3,c4,e4]@2 [c3,g3,c4,e4]!2",
  L: "[[d3,f3,a3,d4]@4 [d3,f3,a3,d4]@2 [d3,f3,a3,d4]@4 [d3,f3,a3,d4]@2 [d3,f3,a3,d4]@2 [d3,f3,a3,d4]@4 [c3,e3,g3,c4]@2 [c3,e3,g3,c4]@2 [c3,e3,g3,c4] ~]/3", // Dm C
  M: "[c3,e3,g3,c4]@2 [c3,e3,g3,c4] [d3,f3,a3,d4]", // C Dm
  N: "[[c3,e3,g3,c4]@4 [c3,e3,g3,c4]@2 [c3,e3,g3,c4]@4 [c3,e3,g3,c4]@2 [c3,e3,g3,c4]@2 [c3,e3,g3,c4]@4 [b2,e3,g3,b3]@2 [a2,d3,f3,a3]@2 [a2,d3,f3,a3] ~]/3", // C Em Dm
  O: "[~@6 [c3,e3,g3,b3]@4 [b2,e3,g3,b3]@2 [a2,d3,f3,a3]@2 [a2,d3,f3,a3] ~]/2", P: "~@12 b3@3 ~",
  Q: "a4@4 ~ g4@4 ~@2 f4@4 ~", R: "g4@3 ~ g4@3 ~@5 e4@3 ~", S: "g4@3 ~ g4@3 ~@5 b3@3 ~",
  T: "g4@3 ~ g4@3 ~ a4@3 ~ g4@3 ~", U: "[f4@3 ~ e4@3 ~ d4@3 ~ e4@8 ~@8 b3@3 ~]/2", V: "g4@4 ~ a4@4 ~@2 g4@4 ~",
  W: "f4@3 ~ e4@3 ~ d4@3 ~ e4@3 ~",
})).s("gm_acoustic_guitar_steel").gain(0.2).pan(0.3)

// bass · electric bass pick · "Basso"
const bass = note(`<
  ~@8 A B C D E F G H I@2 ~ J K L M N M L M N M L M N M L O N P Q R S T U R V W X Y Z@2 AA@2 AB AC AD AE Z@2 AA@2 AF AG
  AH@2 ~@2 L M N M L M N M L M N M L O N P Q R S T U R V W X Y Z@2 AA@2 AB AC AD AE Z@2 AI@2 AF AJ AK AL AM AN AO AP AQ
  AR AO AL AM AN AO AL AQ AS AT@6 J K L M N M L M N M L M N M L O N P Q R S T U R V W X Y Z@2 AA@2 AB AC AD AE Z@2 AA@2
  AF AG X Y Z@2 AA@2 AB AC AD AE Z@2 AA@2 AF AU AO AL AM AN AO AV AW AX AO AL AY AZ AO AV BA AZ AO BB AY BC AO AP AW AX
  AO BB AY BC AO AP AW AX AO BB AY BC AO AP AW AX AO BB AY BC AO AP AW AX AO BB AY BC AO AP AW AX AO BB AY BC AO AP AW
  AX BD@7 ~@3
>`.pickRestart({
  A: "e1@5 ~@9 e1 ~", B: "e1@4 ~@2 e1 ~ g1@3 ~ b1@3 ~", C: "c2@5 ~@9 c2 ~", D: "d2@5 ~@7 d2 ~ d#2 ~",
  E: "e2@5 ~@7 e2 ~ b1 ~", F: "d1@3 ~ d1@3 ~@3 e1 ~ g1 ~ g#1 ~", G: "a1@5 ~@7 g1 ~ a1 ~", H: "b1@5 ~@3 b1@5 ~@3",
  I: "c2/2", J: "a1@5 ~@3 b1@5 ~@3", K: "c2 ~ e1@4 ~@2 g1@3 ~ b1@3 ~", L: "d2@4 ~@2 e2 ~@9",
  M: "~@2 f1 ~ g1@3 ~ a1@3 ~ b1@3 ~", N: "d1@5 ~@11", O: "~@2 g1 ~ g1@3 ~ a1@3 ~ b1@3 ~",
  P: "~@2 e1 ~ e1@3 ~ g1@3 ~ g#1@3 ~", Q: "g1@4 ~@2 d1 ~@9", R: "~@6 b1 ~ a2@3 ~ g2@3 ~", S: "a1@4 ~@2 e2 ~@9",
  T: "~@2 e2 ~ b2 ~ e2 ~ b2@3 ~ a2@3 ~", U: "g1@4 ~@2 d2 ~@9", V: "a1@3 ~ b1@3 ~ c2@3 ~ d2@3 ~", W: "e2@3 ~@5 e2@5 ~@3",
  X: "e1@8 ~@4 d2 ~ d#2 ~", Y: "e2@5 ~@3 d2@5 ~@3", Z: "[c2@4 ~@2 f#2 ~ g2@3 ~ c2@8 ~@4 g2@3 ~ c2@3 ~]/2",
  AA: "[b1@4 ~@2 f2 ~ f#2@3 ~ b1@7 ~@3 e2 ~ f#2@3 ~ b1@3 ~]/2", AB: "a1@5 ~@3 e2@3 ~ g2@3 ~",
  AC: "a1@3 ~ a1@3 ~ a1 ~ b1@4 ~@2", AD: "e2@8 ~@4 e2 ~ e2 ~", AE: "e2@4 ~@2 e2 ~ d2@5 ~@3",
  AF: "a1@4 ~@2 e2 ~ e2@4 ~@2 g2 ~", AG: "a2@5 ~@3 a2@5 ~@3", AH: "[a1@21 ~@11]/2",
  AI: "[b1@4 ~@2 f2 ~ f2@3 ~ b1@7 ~@3 e2 ~ f#2@3 ~ b1@3 ~]/2", AJ: "a2@5 ~@3 b2@5 ~@3", AK: "e1@11 ~@5",
  AL: "~@12 e2 ~ b1 ~", AM: "c2@5 ~@7 e2 ~ c2 ~", AN: "b1@5 ~@9 b1 ~", AO: "e1@5 ~@11", AP: "~@14 a1 ~",
  AQ: "a1@5 ~@9 b1 ~", AR: "b1@5 ~@7 b1 ~ e1 ~", AS: "b1@5 ~@7 b1@2 e1 ~", AT: "[c1@85 ~@11]/6",
  AU: "a2@5 ~@3 a1@5 ~@3", AV: "~@14 g1 ~", AW: "a1@5 ~@9 a1 ~", AX: "b1@5 ~@7 b1 ~ b1 ~", AY: "c2@5 ~@7 d2 ~ c2 ~",
  AZ: "b1@5 ~@7 d2 ~ b1 ~", BA: "g1@5 ~@9 a1 ~", BB: "~@12 d2 ~ b1 ~", BC: "b1@5 ~@5 d2 ~ b1 ~ f1 ~",
  BD: "[c2@109 ~@3]/7",
})).s("gm_electric_bass_pick").gain(0.64)

// chords · string ensemble 1 · "Synth"
const string_ensemble_1 = note(`<
  ~@8 A B C D A B E F G@3 H I J@4 K@2 L M J@4 K@2 J@2 N@2 O@2 N@2 P Q A B R@5 S A B R@5 T U@2 H I J@4 K@2 L M J@4 K@2
  J@2 N@2 O@2 N@2 P Q A B R@5 S A B R@5 T V W X Y V W Z AA V W X Y V W Z AA ~@6 H I J@4 K@2 L M J@4 K@2 J@2 N@2 O@2 N@2
  P Q A B R@5 S A B R@5 T A B R@5 S A B R@5 T ~ AB AC AD ~ AE AF AG ~ AB AC AD ~ AE AF AG ~@2 AC AH ~ AI AF AG ~ AI AC
  AH ~ AI AF AG ~@2 AC AH ~ AI AF AG ~ AI AC AH ~ AI AF AG ~@2 AC AH ~ AI AF AG ~ AI AC AH ~ AI AF AG AJ@8 ~@2
>`.pickRestart({
  A: "[g4,b4,e5]", B: "[b4,e5,g5] [a4,d5,f5]", C: "[g4,c5,e5]", D: "[a4,d5,f5]", E: "[b4,c5,e5,g5]", F: "[d5,f5,a5]",
  G: "[e5,g5,b5]/3", H: "[b4,e5,g5,b5] [a4,d5,f5,a5]", I: "[g4,c5,e5,g5] [f4,a4,d5,f5]",
  J: "[[g4,b4,d5,e5]@3 [g4,b4,d5,e5] ~@2 [g4,b4,d5,e5]@10]/2", // Em7
  K: "[[g4,a4,c5,e5]@3 [g4,a4,c5,e5] ~@2 [g4,a4,c5,e5]@10]/2", L: "[g4,b4,d5,e5]@3 [g4,b4,d5,e5] ~@2 [g4,b4,d5,e5]@2",
  M: "[d5,g5,b5]!2 [c#5,f5,a5]@2 [b4,e5,g5]!2 [a4,d5,f5]@2", N: "[[f4,b4,d5]@3 [f4,b4,d5] ~@2 [f4,b4,d5]@10]/2",
  O: "[[g4,c5,e5]@3 [g4,c5,e5] ~@2 [g4,c5,e5]@10]/2", P: "[g4,c5,e5,g5]!4", Q: "[g4,c5,e5,g5] ~@3",
  R: "[[g4,c5,e5]@6 [b4,e5,g5] [a4,d5,f5]@7 [d5,f5,a5] [b4,e5,g5]@5]/5", // C Em Dm Em
  S: "[g4,c5,e5]@2 [g4,c5,e5]@2 [g4,c5,e5] [a4,d5,f5]@3", T: "[g4,c5,e5] [a4,d5,f5]", U: "[g4,c5,e5,g5]/2",
  V: "~@2 [b4,d5,g5,b5]@2 ~ [a4,c5,f5,a5]@3", W: "[b4,d5,g5,b5]", X: "[g4,b4,e5,g5]@5 [g4,b4,e5,g5] ~@2",
  Y: "[a4,d5,f5,a5]@5 [a4,d5,f5,a5] ~@2", Z: "~ [g4,c5,e5,g5] [g4,c5,e5,g5]@2", AA: "~ [a4,d5,f5,a5] [a4,d5,f5,a5]@2",
  AB: "~@2 [d5,g5,b5]@2 ~ [d5,g5,b5] ~@2", AC: "~@3 [c5,e5,g5]", AD: "[d5,f5,a5]@4 ~@2 [d5,f5,a5] [e5,g5,b5]",
  AE: "~ [d5,g5,b5] ~@2", AF: "~ [e5,g5,b5] [e5,g5,b5]@2", AG: "~ [d5,f5,a5] [d5,f5,a5]@2",
  AH: "[d5,f5,a5]@4 ~@2 [d5,f5,a5] [b4,e5,g5]", AI: "~ [b4,e5,g5] ~@2", AJ: "[g4,b4,e5]/8",
})).s("gm_string_ensemble_1").gain(0.21).pan(0.7)

// other · trombone · "Tromba"
const trombone = note(`<
  ~@106 A B@2 ~ A C D ~ A E F ~ A C G ~ H I@3 J ~@75 A B@2 ~ A C K ~ A E F ~ A C K ~ A B@2 ~ A C K ~ A E F ~ A C K ~ A
  B@2 ~ A C K ~ A E F ~ A C K ~ A L@7 F
>`.pickRestart({
  A: "~@4 g4 ~ f4 ~ g4 ~ a4 ~ b4 ~ c5 ~", B: "[d5@21 ~@11]/2", C: "d5@3 ~ e5 ~ d5@3 ~ c5 ~ d5@3 ~",
  D: "b4 ~ a4@3 ~ g4 ~ f4@3 ~ d4 ~ g4 ~", E: "d5@13 ~@3", F: "~@4 f5@3 ~ f5 ~ g5 ~@5",
  G: "b4 ~ a4@3 ~ g4 ~ f4@3 ~ d4@3 ~", H: "~@4 [g4,b4] ~ [f4,a4] ~ [g4,b4] ~ [a4,c5] ~ [b4,d5] ~ [c5,e5] ~",
  I: "[[b4,d5]@15 ~]/3", J: "~@4 [d5,f5]@3 ~ [d5,f5]@3 ~ [e5,g5]@3 ~", K: "b4 ~ a4@3 ~ g4 ~ f4@3 ~ g4@3 ~",
  L: "[d5@109 ~@3]/7",
})).s("gm_trombone").gain(0.35)

// other · electric guitar muted · "Chitarra elettrica"
const electric_guitar_muted = note(`<
  ~@105 A B C D A B C E A B C E A B C E A F G F A F ~@58 H B I J I B I J I B I J I B I J H@57 K
>`.pickRestart({
  A: "e3 ~ e3 ~ d3 ~ d3 ~ e3 ~ d3 ~ d3 ~ d3 ~", B: "e3 ~ e3 ~ d3 ~ d3 ~ e3 ~ d3 ~ b2 ~ e3@2",
  C: "~@2 e3 ~ d3 ~ d3 ~ e3@3 ~ d3 ~ d#3 ~", D: "e3 ~ d3 ~ b2 ~ b2 ~ a2 ~ g2 ~ e2 ~ d3 ~",
  E: "e3 ~ d3 ~ b2 ~ a#2 ~ a2 ~ g2 ~ e2 ~ d3 ~", F: "e3 ~ e3 ~ d3 ~ d3 ~ e3 ~ d3 ~ b2 ~ e3 ~",
  G: "e3 ~ e3 ~ d3 ~ d3 ~ e3@3 ~ d3 ~ d#3 ~", H: "e3 ~ e3 ~ d3 ~ d3 ~ e3 ~ e3 ~ d3 ~ d3 ~",
  I: "~@2 e3 ~ d3 ~ d3 ~ e3 ~ e3 ~ d3 ~ d3 ~", J: "e3 ~ d3 ~ d3 ~ a#2 ~ a2 ~ g2 ~ e2 ~ d3@2", K: "e3@3 ~@13",
})).s("gm_electric_guitar_muted").gain(0.48)

// drums · kick
const kick = s("bd").struct("<~@6 A B C@11 ~@2 C@22 D B@19 ~@2 C@22 D B@37 E B ~@2 C@22 D B@106 ~>".pickRestart({
  A: "~@3 x", B: "x!2 ~@2", C: "x", D: "x ~@2 x", E: "x!2 ~ x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A B C B C B C B C B C B D E B C B C B C B C B C B C B C B C B C B C B C ~ A B@18 D E B C B C B C B C B C B C B C B
  C B C B C B C ~ A B@37 A D E B C B C B C B C B C B C B C B C B C B C B C ~ A B@105 ~
>`.pickRestart({
  A: "~@4 x!2 ~@2", B: "~ x", C: "~ x ~@2 x ~@3", D: "x!2 ~@2 x ~@3", E: "x!2 ~@2 x!2 ~@2",
})).gain(0.5)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@8 A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@21 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~@41 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@109
>`.pickRestart({
  A: "~@7 x",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A@8 B A@2 B ~ A@6 B A@7 B A@7 ~@2 C D@7 C D@9 B ~ A@6 B A@7 B A@7 ~@2 C D@7 C D@3 C D@7 C D@7 C D@8 ~ B ~ A@6 B
  A@7 B A@7 ~@2 C D@7 C D@7 C D@7 C D@11 C D@7 C D@3 C D@7 C D@7 C D@7 C D@7 C D@7 C D@7 C D@7 C ~
>`.pickRestart({
  A: "x!2", B: "~ x", C: "~ x!3", D: "x!4",
})).gain(0.45)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@8 A@7 B A@3 ~@2 A@5 B A@7 B A@7 B ~@22 A@5 B A@7 B A@7 B ~@42 A@5 B A@7 B A@7 B ~@108
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@11 A B ~@23 A ~@18 A B ~@23 A ~@37 A@2 B ~@23 A ~@106>".pickRestart({
  A: "~ x ~@2", B: "~ x ~ x",
})).gain(0.45)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@15 A ~@3 A ~@6 A ~@7 A ~@7 A ~@20 A ~@6 A ~@7 A ~@7 A ~@40 A ~@6 A ~@7 A ~@7 A ~@108
>`.pickRestart({
  A: "~@3 x",
})).gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~@7 A ~@36 A ~@43 A ~@37 A ~@25 A ~@106>".pickRestart({
  A: "~@6 x!2",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~ A ~ A ~ A B A ~@4 A ~ A ~ A B A ~ A ~ A ~ A B A ~ A ~ A ~ A B ~ B ~@7 B ~@12 A ~ A ~ A B A ~ A ~ A ~ A B A ~ A
  ~ A ~ A B ~ B ~@7 B ~@3 B ~@7 B ~@7 B ~@12 A ~ A ~ A B A ~ A ~ A ~ A B A ~ A ~ A ~ A B ~ B ~@7 B ~@7 B ~@7 B ~@11 B
  ~@7 B ~@3 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~@7 B ~
>`.pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.25)

// drums · tambourine
const tambourine = s("tb").struct("<~@45 [x!8]!18 ~@26 [x!8]!36 [x!7 ~] ~@27 [x!8]!105 ~>").gain(0.25)

stack(
  acoustic_guitar_steel, bass, string_ensemble_1, trombone, electric_guitar_muted, kick, snare, snare_soft, hihat,
  hihat_soft, mid_tom, open_hat, high_tom, crash, tambourine
)

More by Battisti