Strudelify

L'ottimista

Antonello Venditti

KeyF majorTempo109 bpm
0:00/0:00
// L'ottimista — Antonello Venditti
// 109 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 26, guitar program 28, guitar program 30.
setcpm(109/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 · fretless bass
const bass = note(`<
  A B A C D E D E D E D E F G H I D E D E D E D E D E D E F G H I D E D E D E D E A B A C D E D E D E D E F G H I D E D
  E D E D E D E D E F G H I D E D E D E D E A B A C F G H J K L D E D E D E F G H I D E D E D E D E D E D E D E D E D E
  D E D E D E D E D E D E D M
>`.pickRestart({
  A: "d2 ~@6 a1", B: "d2 ~@7", C: "d2 ~@5 c2 a1", D: "f1@4 f1 ~@3 c2 ~ c2@2 g2@2 c2@2",
  E: "d2@3 ~ d2 ~@2 a1!2 ~ a1@2 c2@2 g1@2", F: "bb1 ~@3 bb1 ~@3 bb1 ~@3 bb1 ~@3",
  G: "bb1 ~@3 bb1 ~@3 gb1 ~ g1 ~ ab1 ~ a1 ~", H: "bb1 ~@3 bb1 ~@3 bb1 ~@3 bb1 ~ bb1@2",
  I: "bb1 ~ bb1 ~ c2 ~ d2 ~ f2 ~ bb2 ~ c3@4", J: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~",
  K: "f1@4 f1 ~@5 c2@2 g2@2 c2@2", L: "d2@3 ~@5 a1 ~ a1@2 c2@2 g1@2", M: "d2@3 ~ d2 ~@2 a1!2 ~ a1@2 c2@2 ~@2",
})).s("gm_fretless_bass").gain(0.48)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~@12 A@4 B C D E F G H I J K L@2 ~@4 M N M O M N M O ~@4 P G H I J K Q@2 ~@4 M N M N P G H I J K Q@2 ~@4 M N M O M N M
  O ~@8 M N M N M N M N ~@4 M N M O M N M O M N M N M N M N ~@16
>`.pickRestart({
  A: "[[d5,f5,bb5]@2 ~@2 [d5,f5,bb5]@2 ~@2 [d5,g5,bb5]@2 ~ [d5,g5,bb5]!2 ~ [d5,f5,bb5]@5 ~ [d5,f5,bb5] ~ [d5,f5,bb5] ~ [d5,g5,bb5]@2 ~ [d5,g5,bb5] [d5,g5] ~ [d5,f5,bb5]@5 ~ [d5,f5,bb5]@3 ~ [d5,g5,bb5]@3 [d5,g5,bb5]!2 ~ [d5,f5,bb5]@5 ~ [d5,f5,bb5]@3 ~ [d5,g5,bb5]@3 [d5,g5,bb5]!2 ~ [c5,d5,ab5] ~, ~@31 [f5,bb5]]/4", // Bb Gm Bb Gm G5 Bb Gm Bb …
  B: "~@2 [c5,f5,a5]!7 ~ [c5,e5,g5] ~ [c5,e5,g5]@4", C: "~@2 [d5,f5,a5]!7 ~ [c5,e5,g5] ~ [c5,e5,g5]@4",
  D: "~@2 [c5,f5,a5]!6 [f5,a5] ~ [c5,e5,g5] ~ [c5,e5,g5]@4, ~@4 c5 ~@3", // F C
  E: "~@2 [d5,f5,a5]!7 ~ [c5,e5,g5] ~ [c5,e5,g5]@2 ~@2", F: "~@2 [c5,f5,a5] ~@3 [c5,f5,a5] ~@5 [c5,e5,g5]@2 ~@2",
  G: "~@3 [d5,f5,a5]!2 ~ [d5,f5,a5] ~@5 g5@2 a5@2, ~@3 [c5,e5]", // Dm C
  H: "[f5,a5,c6]!2 ~ c6@2 [e5,g5,c6]@3, b5 ~@3 [f5,a5]@6 ~@6, ~@6 b5 ~@9", I: "a5@3 [e5,f5,g5] d5 ~@11",
  J: "~@2 [c5,f5,a5]!3 ~ [c5,f5,a5] ~@5 [c5,e5,g5] ~@3", K: "~@2 [d5,f5,a5]!3 ~ [d5,f5,a5] ~@5 [c5,e5,g5] ~@3",
  L: "[[bb5,b5] ~ [c5,f5,a5] [c5,f5]!2 ~ [c5,f5] ~@5 [e5,g5] ~@5 [d5,f5]!3 ~ [d5,f5] ~@5 a5 [f5,g5] [d5,e5] ~, ~ c6@2 a5@24 ~@5]/2", // Bmaj7 F F5 Em Dm Fsus2 Dsus2
  M: "~@2 [c5,f5,a5]!7 ~ [c5,e5,g5] ~ [c5,e5,g5] ~@3", N: "~@2 [d5,f5,a5]!7 ~ [c5,e5,g5] ~ [e5,g5]@2 ~@2, ~@12 c5 ~@3",
  O: "[d5,f5,a5]@6 [d5,f5,a5] ~@3 [c5,e5,g5] ~ [c5,e5,g5] ~@3", P: "~@3 [c5,f5,a5] ~@2 [c5,f5,a5] ~@5 [c5,e5,g5]@2 ~@2",
  Q: "[[bb5,b5] c6@2 [c5,f5,a5] [c5,f5]!3 ~@5 [e5,g5] ~@5 [d5,f5]!3 ~ [d5,f5] ~@5 a5 [f5,g5] [d5,e5] ~, ~ a5@6 ~]/2", // Bmaj7 F F5 Em Dm Fsus2 Dsus2
})).s("gm_drawbar_organ").gain(0.08).pan(0.7)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@4 A B A C D E F C G@4 F H F C A B A C F H F C G@4 F H D C F H F C ~@4 A B A C F E D C G@4 F E F C A B A C F H F C
  G@4 F H F C F H F C ~@4 G@4 F E F C A B A C G@4 F E F C F H F C F C F C F C F C F C F C F C D C F C F C F C F I
>`.pickRestart({
  A: "f3!4 c3!4", B: "d3!8", C: "d3@2 d3@2 d3@2 d3@2 d3@2 d3@2 d3@2 d3 ~",
  D: "~@2 [f3,c4,f4,a4] [f4,a4] [f3,c4,f4] [c4,f4,a4] [c4,f4] [c4,f4,a4] [f3,c4,f4,a4] ~ [c3,g3,e4,g4]@2 [g3,c4,e4,g4] ~@3, ~@3 f3 ~@4", // F F5 F F5 F C
  E: "~@2 [a2,d3,a3,d4,f4] ~ a2 [a2,d3,a3,d4,f4] [d3,a3,d4,f4]!3 ~ [c3,g3,e4,g4]@2 [g3,c4,e4,g4] ~@3, ~@3 [d3,a3,d4,f4]@2 ~@11", // Dm C Dm
  F: "~@2 [f3,c4,f4,a4] [f4,a4] [f3,c4,f4] [c4,f4,a4] [c4,f4] [c4,f4,a4] [f3,c4,f4,a4] ~ [c3,g3,c4,e4,g4]@2 [g3,c4,e4,g4] ~@3, ~@3 f3 ~@4", // F F5 F F5 F C
  G: "[~@8 g3 ~@2 g3!2 ~@11 g3 ~@2 g3!2 ~@11 g3 ~@2 g3!2 ~@11 g3 ~@2 g3!2 ~@3, [bb2,d3,f3,bb3]@13 ~ [bb2,d3,f3,bb3]@15 ~ [bb2,d3,f3,bb3]@15 ~ [bb2,d3,f3,bb3]@16 ~@2]/4", // Bb
  H: "~@2 [a2,d3,a3,d4,f4] ~ a2 [a2,d3,a3,d4,f4] [d3,a3,d4,f4]!3 ~ [c3,g3,c4,e4,g4]@2 [g3,c4,e4,g4] ~@3, ~@3 [d3,a3,d4,f4]@2 ~@11", // Dm C Dm
  I: "d3!6 ~@2",
})).s("gm_electric_guitar_clean").gain(0.12).pan(0.3)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~@4 A B A C D E F C ~@4 F G F C A B A C F G F C ~@4 F G D C F G F C ~@4 A B A C F E D C ~@4 F E F C A B A C F G F C
  ~@4 F G F C F G F C ~@8 F E F C A B A C ~@4 F E F C F G F C F C F C F C F C F C F C F C D C F C F C F C F H
>`.pickRestart({
  A: "c4!4 g3!4", B: "a3!8", C: "a3@2 a3@2 a3@2 a3@2 a3@2 a3@2 a3@2 a3 ~", D: "~@3 c4 ~@2 c3@3 ~ c4@2 ~@4",
  E: "~@6 a2@3 ~ c4@2 ~@4", F: "~@3 c4 ~@2 c3@3 ~@7", G: "~@6 a2@3 ~@7", H: "a3!6 ~@2",
})).s("gm_electric_guitar_clean").gain(0.07).pan(0.3)

// chords · electric guitar muted
const electric_guitar_muted = note("<~@8 A B A ~@13 A B A ~@21 A B A ~@13 A B A ~@65>".pickRestart({
  A: "f3 ~@13 c3 ~", B: "d3 ~@3 d3 ~@5 d3 ~ d3 ~ d3 ~",
})).s("gm_electric_guitar_muted").gain(0.27).pan(0.4)

// chords · electric guitar muted · soft notes
const electric_guitar_muted_2 = note("<~@8 A B A ~@13 A B A ~@21 A B A ~@13 A B A ~@65>".pickRestart({
  A: "c4 ~@7 g3 ~@5 g3 ~", B: "a3 ~@9 a3 ~ a3 ~ a3 ~",
})).s("gm_electric_guitar_muted").gain(0.15).pan(0.4)

// chords · distortion guitar
const distortion_guitar = note("<A B A B ~@36 A B A B ~@36 A B A B ~@48>".pickRestart({
  A: "[d3,a3] ~@6 [a2,e3]", B: "[d3,a3] ~@7",
})).s("gm_distortion_guitar").gain(0.19).pan(0.7)

// bass · slap bass 1
const bass_2 = note("<~@88 A B A B A B A B ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A ~@5>".pickRestart({
  A: "~@6 c2!3 ~@7", B: "~@4 d2!4 ~@8",
})).s("gm_slap_bass_1").gain(0.36)

// bass · slap bass 1 · soft notes
const bass_soft = note("<~@127 [~@4 d2!4 ~@8] [~@6 c2!3 ~@7] [~@4 d2!4 ~@8] [~@6 c2!3 ~@7] ~>")
  .s("gm_slap_bass_1").gain(0.13)

// other · piano
const piano = note(`<
  ~@69 A@2 B C@2 ~@2 D@2 ~@9 E F G H I J K@2 L ~@13 M@2 N@2 O@2 N@4 O@2 N@2 O@2 N@2 P Q ~@3
>`.pickRestart({
  A: "[~@2 d4@10 c4@2 bb3 d4@3 bb3@3 ~@11]/2", B: "~ d4 f4@6", C: "[~ a4 g4 f4 e4 d4 c4 d4@5 ~@4]/2",
  D: "[~ a4 g4 f4 e4 d4 c4 d4@2 c4@2 a3@2 ~@3]/2", E: "~@6 f4 g4", F: "a4@8 g4@6 f4 e4", G: "d4 ~@11 f4@2 g4@2",
  H: "a4 f3 a4 f3 a4 f3 g4 f3", I: "f4@3 ~@9 f4@2 g4@2", J: "a4 g4", K: "[~ f4@3 ~@6 f4@2 g4@2 a4@10 g4@5 f4@3]/2",
  L: "f4 ~ d4 ~@13", M: "[~ f4@2 e4@2 d4@2 c4@3 c4@4 ~@2]/2", N: "[~@10 c4@10 c4@11 ~]/2",
  O: "[~ f4@2 e4@2 d4@2 c4@8 ~]/2", P: "~@10 c4 ~ c4 ~ c4@2", Q: "~@4 c4@11 ~",
})).s("gm_piano").gain(0.05)

// chords · electric guitar clean
const electric_guitar_clean_3 = note(`<
  ~@4 A B A B A B A B C@4 A B A B A B A B A B A B C@4 A B A B A B A B ~@4 A B A B A B A B C@4 A B A B A B A B A B A B
  C@4 A B A B A B A B ~@4 C@4 A B A B A B A B C@4 A B A B A B A B D B D B D B D B D B D B D B D B D B D B D B D E
>`.pickRestart({
  A: "f3@4 g3@2 c4@2 c3 ~ c3@5 ~", B: "d3@4 g3@2 [c4,f4]@2 ~@2 d3@2 g3@2 a3 ~",
  C: "[d3,f3,bb3] ~@3 [d3,f3,bb3] ~@3 [d3,f3,bb3] ~@3 [d3,f3,bb3] ~@3", D: "~@4 g3@2 c4@2 c3 ~ c3@5 ~",
  E: "d3@2 g3 [c4,f4] ~@4", // F5
})).s("gm_electric_guitar_clean").gain(0.15).pan(0.9)

// other · string ensemble 1
const string_ensemble_1 = note("<~@28 A@2 B@3 ~@19 A@2 B@3 ~@11 A@2 B@3 ~@11 A@2 B@3 ~@7 A@4 ~@32>".pickRestart({
  A: "[~@4 f4@3 ~ g4@2 ~ g4 d4@2 f4@14 ~@4]/2", B: "[~@4 f4@3 ~ g4@2 ~ g4 d4@2 f4@4 g4@4 a4@4 bb4@2 c5 d5 c5@18]/3",
})).s("gm_string_ensemble_1").gain(0.4)

// chords · piano
const piano_2 = note("<A B A B ~@36 A B A B ~@36 A B A B ~@48>".pickRestart({
  A: "~@2 [d4,f4,a4]!7 ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [a1,a2] ~, [d2,d3]@3 ~", // Dm C A D
  B: "~@2 [d4,f4,a4]!7 ~ [c4,e4,g4] ~ [c4,e4,g4] ~@3, [d2,d3]@7 ~", // Dm C D
})).s("gm_piano").gain(0.14).pan(0.3)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@100 [x ~@3 x!3 ~]!15 [~ x!7] [x ~@3 x!3 ~]!15 [x ~@3 x!2 ~@2]>").gain(0.22)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@11 B A@24 ~@4 A@36 ~@4 A@16 ~@32>".pickRestart({
  A: "x!4", B: "x!8",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@100 [~@4 x!4 ~@6 x ~]!15 [~ x!7] [~@4 x!4 ~@6 x ~]!15 [~@4 x!4 ~@8]>").gain(0.27)

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

stack(
  bass, drawbar_organ, electric_guitar_clean, electric_guitar_clean_2, electric_guitar_muted, electric_guitar_muted_2,
  distortion_guitar, bass_2, bass_soft, piano, electric_guitar_clean_3, string_ensemble_1, piano_2, kick, snare,
  low_tom, hihat, mid_tom, crash
)

More by Antonello Venditti