Strudelify

Io gli ho detto no

Battisti

KeyF majorTempo120 bpm
0:00/0:00
// Io gli ho detto no — Battisti
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// 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 · drawbar organ · "Orch."
const drawbar_organ = note(`<
  A@2 B@2 C@2 D@2 E F A@2 G H A@2 I J@3 K@8 L@8 M@2 N O@2 A@2 B@2 C@2 P@2 E F A@2 I Q@3 R S@2 A@2 B@2 C@2 D@2 E F A@2 G
  H A@2 I T U@2 V@8 W@6 X@8 Y@8 ~
>`.pickRestart({
  A: "[d4,f4,a4]/2", B: "[c4,e4,g4,a4]/2", C: "[d4,f4,bb4]/2", D: "[d4,g4,bb4]/2", E: "[c4,e4,g4]", F: "[db4,e4,g4,a4]",
  G: "[d4,f4,a4,bb4]", H: "[c4,e4,g4,a4]", I: "[bb3,d4,f4]@3 [bb3,d4,f4]@5",
  J: "[[a3,d4,f4]@3 [g3,c4,e4]@3 [bb3,d4]@4 ~@2 [a3,d4,e4]@10 ~@2]/3", // Dm C Bb Asus4
  K: "[~ [d4,f4,a4]@4 [c4,e4,g4,a4]@4 [d4,f4,bb4]@4 [d4,g4,bb4]@3]/8", // Dm Am7 Bb Gm
  L: "[~ [c4,e4,g4]@2 [db4,e4,g4,a4]@2 [d4,f4,a4]@4 [d4,f4,a4,bb4]@2 [c4,e4,g4,a4]@2 [d4,f4,a4]@3]/8", // C A7 Dm Bbmaj7 Am7 Dm
  M: "[~@4 [bb3,d4,f4]@3 [bb3,d4,f4]@5 [a3,d4,f4]@2 [g3,c4,e4]@2]/2", N: "[bb3,d4]@3 ~", O: "[[a3,d4,e4]@7 ~]/2",
  P: "[d4,f4,g4]/2", Q: "[[a3,d4,f4] [g3,c4,e4] [bb3,d4]@6]/3", R: "g3 a3@2 bb3@2 c4@2 d4@2 e4@2 f4@2 g4@3",
  S: "[a3,d4,e4]/2", T: "[a3,d4,f4] [g3,c4,e4] [bb3,d4]@2", U: "[~ [a3,d4,e4]@3]/2",
  V: "[~ [d4,f4,a4]@4 [c4,e4,g4,a4]@4 [d4,f4,bb4]@4 [d4,f4,g4]@3]/8", // Dm Am7 Bb G7
  W: "[~@4 [c4,e4,g4]@8 [db4,e4,g4,a4]@8 [d4,f4,a4]@16 [bb3,d4,f4]@3 [bb3,d4,f4]@5 [a3,d4,f4]@3 [g3,c4,e4]]/6", // C A7 Dm Bb Dm C
  X: "[~@2 [bb3,d4]@18 [a3,d4]@14 ~ [g3,c4]@17 [a3,d4]@12]/8", Y: "[~@3 [g3,c4]@17 [a3,d4]@16 [a3,d4]@16 [a3,d4]@12]/8",
})).s("gm_drawbar_organ").gain(0.13)

// other · tuba · "Fiati"
const tuba = note("<A@2 B@2 C@2 D@2 E F G@2 H I J@2 ~@80 K L M@3 L N@4 O@5>".pickRestart({
  A: "d4/2", B: "[c4@15 c4]/2", C: "[d4@15 a3]/2", D: "[bb3 d4 d4@14]/2", E: "c4", F: "e4@7 a4", G: "[f4 d4@15]/2",
  H: "a3", I: "g3@5 g3@3", J: "[g4 a4 a4@14]/2", K: "~@8 e4 f4@3 e4 f4@3", L: "e4 f4@3 e4 f4@3 e4 f4@3 e4 f4@3",
  M: "[e4 f4@3 ~@2 e4@34 e4 f4@3 e4 f4@3]/3", N: "[e4 f4@3 ~@2 g4@4 e4@30 e4 f4@23]/4",
  O: "[~@8 e4 [d4,f4]@30 ~ [e4,g4] [d4,f4,a4]@30 ~@9]/5", // Dm Em Dm
})).s("gm_tuba").gain(0.64)

// bass · electric bass finger · "Basso"
const bass = note(`<
  ~@20 A@8 B@8 C@2 D E@2 F@2 G@2 H@2 F@2 I J F@2 K L@3 ~@3 F@2 G@2 H@2 F@2 I J F@2 M J F@2 K N@3 A@8 O@6 P@8 Q@8 ~
>`.pickRestart({
  A: "[~ d3@4 a2@4 bb2@4 d3@3]/8", B: "[~ c3@2 a2@2 d3@4 bb2@2 a2@2 d3@3]/8", C: "[~@2 g2@4 bb2 a2]/2", D: "f2@3 ~",
  E: "[a2@7 ~]/2", F: "d3/2", G: "a2/2", H: "bb2/2", I: "c3", J: "a2", K: "g2", L: "[bb2 a2 g2@6]/3", M: "bb2",
  N: "[bb2 a2 f2@3 ~ a2@6]/3", O: "[~@4 c3@8 a2@8 d3@16 g2@8 bb2@3 a2]/6", P: "[~@2 g2@18 d3@15 a2@17 d3@12]/8",
  Q: "[~@3 a2@17 d3@16 d3@16 d3@12]/8",
})).s("gm_electric_bass_finger").gain(0.02)

// drums · congas
const congas = s("conga:13").struct("<~@20 A B@17 C ~@2 D@4 E B@8 F ~@2 B@21 ~@2 A B@13 C ~ G B@7 H ~@6>".pickRestart({
  A: "~@7 x ~@2 x ~@4 x", B: "~@2 x ~@4 x ~@2 x ~@4 x", C: "~ x ~@6", D: "~ x ~@3 x ~@2", E: "~@2 x ~@7 x ~@4 x",
  F: "~@2 x ~@4 x ~@2 x ~@5", G: "~@10 x ~@4 x", H: "~@2 x ~@4 x ~@8",
})).gain(2.05)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@20 A B@17 C ~ D E@4 F B@8 G ~@2 B@21 ~@2 A B@13 C ~ H B@7 I ~@6
>`.pickRestart({
  A: "~@3 x!2 ~ x!2", B: "x ~ x!3 ~ x!2", C: "x!2 ~@2", D: "~@14 x!2", E: "x ~@3 x ~ x!3 ~@3 x ~ x!2",
  F: "x ~@3 x ~ x!3 ~@3 x ~ x ~", G: "x ~ x!3 ~ x ~", H: "~@4 x ~ x!2", I: "x ~ x!2 ~@4",
})).gain(2.05)

stack(drawbar_organ, tuba, bass, congas, congas_2)

More by Battisti