Strudelify

Senza fine

Gino Paoli

KeyE♭ majorTempo168 bpm
0:00/0:00
// Senza fine — Gino Paoli
// 168 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 119 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(168/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 · "ACOU BASS"
const bass = note(`<
  ~@6 A@2 B C@2 D E@3 F@3 G@3 A@2 B C@2 D E@3 F@3 H@3 I@2 ~ J@3 K@3 L@3 M@3 N@3 A@2 B C@2 D E@3 F@3 H@3 A@2 B C@2 D E@3
  F@3 H@3 I@2 ~ J@3 K@3 L@3 M@3 N@3 A@2 B C@2 D A@2 B A@2 B C@2 D O ~
>`.pickRestart({
  A: "[eb2@5 ~ c2@5 ~ ab2@4]/2", B: "f2 bb2@3", C: "[eb2@12 c2@11 ~ ab2@8]/2", D: "f2@4 bb2@11 ~",
  E: "[db3@10 ~@2 gb2@11 ~ b2@12 gb2@11 ~]/3", F: "[db2@6 gb2@5 ~ b2@6 gb2@5 ~]/3",
  G: "[f2@11 ~ f2@12 bb2@12 bb1@11 ~]/3", H: "[f2@11 ~ f2@11 ~ bb2@12 bb2@11 ~]/3", I: "[bb2@12 eb2@9 ~@3 ab2@8]/2",
  J: "[bb2@9 ~@3 eb2@9 ~@3 ab2@13 ~@11]/3", K: "[bb2@10 ~@2 bb1@12 eb2@12 eb3@9 ~@3]/3",
  L: "[ab2@5 ~ eb2@6 db2@6 ab2@5 ~]/3", M: "[g2@11 ~ b2@12 c3@10 ~@2 c2@10 ~@2]/3",
  N: "[f2@11 ~ a2@12 bb2@12 bb1@11 ~]/3", O: "eb2@3 ~",
})).s("gm_acoustic_bass").gain(0.4)

// chords · orchestral harp · "PRG.CHANGE"
const orchestral_harp = note("<A B@2 C B@2 ~@113>".pickRestart({
  A: "eb4@3 ~@2 g4@7 c4@3 ~, ~@3 bb3@9 ~@4, ~ eb4@2 ~",
  B: "[~ g4@7 ~@4 [ab4,c5]@8 ~@5 bb4@7, [c4,eb4]@2 ab3@3 bb3@3, ~@11 eb4@9 ~@4 [d4,f4]@8]/2", // Ab Cm Dm
  C: "eb4@3 ~@2 g4@7 c4@3 ~, ~ [bb3,eb4]@2 ~", // Eb5
})).s("gm_orchestral_harp").gain(0.43)

// chords · string ensemble 1 · "PRG.CHANGE"
const string_ensemble_1 = note(`<
  ~@7 A B ~ C D E@3 F G@2 H I@2 ~ A B ~ C D E@3 F G@2 H J ~ K@3 L@3 ~@4 M N O@3 P@3 Q R B Q S D E@3 F G@2 H J ~ Q R B Q
  S T U@2 V W@2 X Y@3 Z@3 L@3 ~@4 M N O@3 P@3 Q R B Q S D Q R B Q R B Q S D AA@2
>`.pickRestart({
  A: "~@3 eb4", B: "c4@2 ~@2 d4@3 ~", C: "~@3 c4", D: "eb4@2 c4@2 ~@3 d4@6 ~@3",
  E: "[e4@15 gb4@5 db4@4 eb4@12 db4@2 b3@2 bb3@2 ab3@2 bb3@2 b3@2]/3", F: "e4",
  G: "[gb4@2 db4@2 eb4@6 db4 b3 ab3 bb3 b3 db4]/2", H: "eb4@4 a3@5 ~@7", I: "[a3@5 ~@3 d4@4 ab3@6 ~@14]/2",
  J: "a3@5 ~@3 d4@4 ab3@4",
  K: "[~@4 f4@4 ab4@4 [bb3,g4]@12 ~@8 f5 ~ ab5 [bb5,c6] db6 c6 bb5 ab5 g5 [eb5,f5] db5 ~ bb4 ~@3, ~ bb3@2 ~@3 [ab3,eb4]@4 ~@2]/3", // Eb Bbsus2 Ebsus2 Ab5
  L: "[~@4 f4@4 ab4@2 f4@2 g4@4 f4@4 eb4@4 ~@8 f5 ~ [ab5,bb5] c6 db6 c6 bb5 [g5,ab5] ~ [eb5,f5] db5 ~ bb4 ~@3, ~ bb3@2 bb3@3 [ab3,eb4]@4 ~@2]/3", // Absus2 Abmaj7 Ebsus2 Ab5
  M: "~@5 [eb4,eb5] [f4,f5] [g4,g5]", N: "[ab4,ab5] [bb4,bb5] [c5,c6] [eb5,eb6] [ab5,ab6] [eb5,eb6] [db5,db6] [c5,c6]",
  O: "[b5@6 b5@4 g4 b4 [c4,bb4]@10 g6 bb5, [d4,b4]@5 ~@7]/3", P: "[c4@10 ~ a5 bb3@10 ~@2, ~@22 a4 ~@25]/3",
  Q: "~ [eb4,f4,g4] ~@2", R: "[eb4,f4,g4]@5 ~@7 eb4@4", S: "[eb4,f4,g4]@5 ~@7 c4@4", T: "eb4 [f4,f5] g4 [bb4,bb5]",
  U: "[[b4,e5,ab5,b5]@2 [bb4,e5,ab5,bb5] [b4,e5,gb5,b5]@2 [bb4,e5,gb5,bb5] [bb4,eb5,gb5,bb5]@2]/2", // E Bbm7b5 Bsus4 Gb7 Ebm
  V: "[ab4,eb5,gb5] [bb4,eb5,gb5,bb5]@2 [ab4,eb5]", // Ab7 Ebm Ab5
  W: "[[b4,e5,ab5,b5]@2 [bb4,e5,ab5,bb5] [b4,e5,gb5,b5]@2 [bb4,e5,gb5,bb5] [bb4,eb5,gb5]@2]/2", // E Bbm7b5 Bsus4 Gb7 Ebm
  X: "[ab4,eb5,ab5] [bb4,eb5,gb5,bb5]@2 [ab4,eb5,gb5]", Y: "[ab4@2 gb4 ab4@2 gb4 b4@3 [gb4,bb4]@2 ab4, c5!2 ~@2]/3",
  Z: "[~@4 f4@4 ab4@4 [bb3,g4]@12 ~@8 f5 ~ [ab5,bb5] c6 db6 c6 bb5 [g5,ab5] ~ [eb5,f5] db5 ~ bb4 ~@3, ~ bb3@2 ~@3 [ab3,eb4]@4 ~@2]/3", // Eb Absus2 Abmaj7 Ebsus2 Ab5
  AA: "[~ [eb4,g4] [bb3,eb4,g4]@3 ~@3]/2", // Eb
})).s("gm_string_ensemble_1").gain(0.36)

// chords · string ensemble 1 · "PRG.CHANGE" · soft notes
const string_ensemble_1_soft = note(`<
  ~@20 A ~@14 A ~ B@2 ~ B@2 ~@7 C@2 D@3 ~@14 A ~@4 E F ~@2 G ~ H I J@2 K ~ B@2 ~ B@2 ~@7 C@2 D@3 ~@15 L ~
>`.pickRestart({
  A: "~@4 ab3@3 ~", B: "[~@17 g5 ~@9 c5 ~ ab4 g4 ~, ~ g4@2 ~]/2", C: "[~@4 bb5@10 g5 bb4]/2",
  D: "[[a4,a5]@19 ~ [f5,f6]@2 ~@2 [ab4,ab5]@20 ~@4]/3", E: "~@3 c5", F: "eb5 ~ g5 ~", G: "ab5 ~@2 [gb5,ab5]",
  H: "~ bb5", I: "gb5 ~@2 ab5", J: "[ab5@2 gb5 ab5@2 gb5 [gb4,gb5]@2]/2", K: "[f4,f5] gb5@2 [f4,f5]", L: "~ f4 ~@2",
})).s("gm_string_ensemble_1").gain(0.21)

// other · flute · "PRG.CHANGE"
const flute = note("<~@42 A@3 B@2 ~@43 A@3 B@2 ~@24>".pickRestart({
  A: "[ab4@24 g4@19 ~@5]/3", B: "[g4@19 ~@13]/2",
})).s("gm_flute").gain(0.21)

// other · accordion · "PRG.CHANGE"
const accordion = note("<A@2 B A@2 C ~@113>".pickRestart({
  A: "[f5@2 eb5 f5@2 eb5 ~ c5]/2", B: "eb5 f5 g5 bb5", C: "eb5@4 f5@4 g5@4 bb5@3 ~",
})).s("gm_accordion").gain(0.19)

// chords · french horn · "PRG.CHANGE"
const french_horn = note(`<
  ~@6 A B ~ A B ~ C D E C D E F G H A B ~ A B ~ C D E C D E I J H K L@2 K L@2 M N@2 O P@2 Q R@2 ~@9 C D E C D E F J H
  S@2 T U@2 V C D E C D E F J H K L@2 K L@2 M N@2 O P@2 Q R@2 ~@20
>`.pickRestart({
  A: "~ [eb4,f4,g4] ~@2", B: "[eb4,f4,g4]@5 ~@11", C: "~@4 [b3,db4,e4]@5 ~@7", D: "[db4,e4,gb4]@5 ~@7 [bb3,eb4,gb4]@4",
  E: "~@4 [ab3,b3,eb4,gb4]@3 ~", F: "~ [gb3,a3,eb4] ~@2", G: "[gb3,a3,eb4] ~@2 [f3,ab3,d4]",
  H: "~@8 [f3,ab3]@5 ~@3, ~@8 d4@3 ~@5", I: "~@4 [gb3,a3,eb4]@5 ~@7", J: "[gb3,a3,eb4]@5 ~@7 [f3,ab3,d4]@4",
  K: "~@4 [f3,ab3,db4]@5 ~@7", L: "[[eb3,g3,bb3]@5 ~@7 [eb3,g3,c4]@12 ~@8]/2", M: "[f3,ab3]@15 ~",
  N: "[[ab3,bb3]@9 ~@3 [eb3,g3,bb3]@11 ~ [g3,bb3]@8]/2", O: "~ [eb3,g3,ab3]@2 ~",
  P: "[[eb3,ab3]@7 ~@5 [db3,f3,ab3]@20]/2", Q: "~@2 [f3,g3]@3 ~@3", R: "[[f3,g3]@6 ~@6 [e3,g3]@7 ~@5 [e3,g3]@7 ~]/2",
  S: "[f4@2 eb4 f4@2 eb4 ~ c4]/2", T: "eb4 f4 g4 bb4", U: "[f4@8 eb4@4 f4@8 eb4@5 ~@3 c4@4]/2",
  V: "eb4@4 f4@4 g4@4 bb4@3 ~",
})).s("gm_french_horn").gain(0.27)

// chords · french horn · "PRG.CHANGE" · soft notes
const french_horn_soft = note("<~@42 A B C ~ D ~ E F@2 G H@2 ~@36 A B C ~ D ~ E F@2 G H@2 ~@17>".pickRestart({
  A: "bb3@15 ~", B: "f3@9 ~@7", C: "~ eb3", D: "g3@3 ~@5", E: "~@2 b3@3 ~@3", F: "[b3@6 ~@6 bb3@7 ~@5 bb3@7 ~]/2",
  G: "~@2 [eb3,f3,a3]@3 ~@3", H: "[[eb3,f3,a3]@5 ~@7 [d3,f3,ab3]@6 ~@6 [d3,f3,ab3]@5 ~@3]/2",
})).s("gm_french_horn").gain(0.15)

// chords · orchestral harp · "PRG.CHANGE"
const orchestral_harp_2 = note("<~@54 A B@2 C B@2 ~@42 A B@2 C B@2 C B@2 A B@2 A B@2 D ~>".pickRestart({
  A: "eb4@3 ~@2 g4@7 c4@3 ~, ~@4 [bb3,eb4]@9 ~@3", // Eb5
  B: "[~ g4@7 ~@4 [eb4,ab4]@8 ~@5 ab4@7, [c4,eb4]@2 ab3@3 bb3@3, ~@3 [d4,f4]]/2", // Ab5 Cm Dm
  C: "eb4@3 ~@2 g4@7 c4@3 ~, ~ [bb3,eb4]@2 ~", D: "eb4@3 ~@2 g4@7 ~@4, ~ [bb3,eb4]@2 ~",
})).s("gm_orchestral_harp").gain(0.15)

// chords · orchestral harp · "PRG.CHANGE" · soft notes
const orchestral_harp_soft = note("<~@55 A@2 ~ A@2 ~@43 A@2 ~ A@2 ~ A@2 ~ A@2 ~ A@2 ~@2>".pickRestart({
  A: "[~@11 c4@9 ~@12]/2",
})).s("gm_orchestral_harp").gain(0.12)

// drums · kick
const kick = s("bd").struct(`<
  ~@6 A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B ~ A B ~ A B C A B C A B C A B C A B C A B C A B C
  A B C A B C A B C A B C A B C A B C A B C A B ~ A B ~ A B C A B C A B C A B C A B C A B C A B C A B C A B ~ D ~
>`.pickRestart({
  A: "x ~@2 x", B: "~ x", C: "~ x ~@2", D: "x",
})).gain(0.29)

// drums · crash
const crash = s("cr").struct("<~@117 [~ x] ~>").gain(0.12)

// drums · ride
const ride = s("rd").struct(`<
  ~@18 A B C A B C A B C A B C A B C A B C A B A@2 B A@2 B C A B C A B C A B C A B C A B C A B C A B C A B C A B C A B C
  A B C A B C A B C A B A@2 B A@2 B C A B C A B C A B C A B C A B C A B C A B C A B A D ~
>`.pickRestart({
  A: "~ x ~@2", B: "x ~@2 x", C: "~ x", D: "~ x!2 ~",
})).gain(0.23)

stack(
  bass, orchestral_harp, string_ensemble_1, string_ensemble_1_soft, flute, accordion, french_horn, french_horn_soft,
  orchestral_harp_2, orchestral_harp_soft, kick, crash, ride
)

More by Gino Paoli