Strudelify
Dove va a finire il mio affetto cover art

1997 · Celeste azzurro e blu

Dove va a finire il mio affetto

Morandi

KeyF♯ minorTempo122 bpm
0:00/0:00
// Dove va a finire il mio affetto — Morandi
// 122 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(122/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 · synth bass 2
const bass = note(`<
  ~@4 A B C D A B C D A B C D A B C D E F E F E F G H A B C D A B C D A B C D E F E F E F G I J K L M N O P Q E F E F E
  F G I E F E F E F G I ~@3 R A B C D A B C D A B C D A B C D E F E F E F G I E F E F E F G I E F E F E F G H A S
>`.pickRestart({
  A: "[e1,e2] ~ [f#1,f#2] ~@2 [e1,e2] [f#1,f#2] ~", B: "[b0,b1]@3 ~@3 [b0,b1]@2 [e1,e2]@2 [c#1,c#2]@2 [e1,e2]@2 ~@2",
  C: "[e1,e2]@2 ~@2 [f#1,f#2]@3 ~@3 [e1,e2]@2 [f#1,f#2]@2 ~@2", // E F# E F#
  D: "[b1,b2]@3 ~@3 [b0,b1]@2 [e1,e2]@2 [c#1,c#2]@2 [g#0,g#1]@2 ~@2", E: "[d1,d2] ~@2 [d1,d2] [e1,e2] ~@2 [e1,e2]",
  F: "[f#1,f#2] ~@2 [f#1,f#2]!2 ~ [e1,e2] ~", G: "[d1,d2] ~@2 [d1,d2]!2 ~@2 [d1,d2]",
  H: "[c#1,c#2] ~@2 [c#1,c#2]!2 ~ [c#1,c#2] ~", I: "[c#1,c#2] ~@2 [c#1,c#2]!2 ~ [c#1,c#2] [g#1,g#2]",
  J: "[b0,b1]@3 ~@3 [b0,b1] ~ [b0,b1]@2 ~@4 [b0,b1] ~", K: "[b0,b1]@3 ~@3 [b0,b1] ~ [b0,b1]@3 ~ [b0,b1]@2 [c1,c2]@2",
  L: "[c#1,c#2]@4 ~@2 [c#1,c#2] ~ [c#1,c#2]@3 ~@3 [c#1,c#2] ~", // C#
  M: "[c#1,c#2]@3 ~@3 [c#1,c#2] ~ [c#1,c#2]@3 ~ [c#1,c#2]@2 [e1,e2]@2", // C# E
  N: "[d1,d2]@3 ~@3 [d1,d2] ~ [d1,d2]@3 ~@3 [d1,d2] ~", O: "[d1,d2]@3 ~@3 [d1,d2] ~ [d1,d2]@3 ~ [d1,d2]@2 [b0,b1]@2",
  P: "[e1,e2]@4 ~@2 [e1,e2] ~ [e1,e2]@4 ~@2 [e1,e2] ~", Q: "[f#1,f#2]@4 ~@2 [f#1,f#2] ~ [f#1,f#2]@3 ~ [f#1,f#2]@3 ~",
  R: "~@5 [c#2,c#3] [g#1,g#2] [c#1,c#2]", S: "~@4 f#1@3 ~@9",
})).s("gm_synth_bass_2").gain(0.55)

// other · piano
const piano = note(`<
  ~@33 A@2 ~@2 B@2 ~@10 C@2 D@2 E@2 F@7 ~ F@7 ~@6 G H G I G H G I ~ A@2 ~@2 A@2 F@7 ~ J@7 ~@12
>`.pickRestart({
  A: "[~@4 d4 d4@2 c#4@2 ~@7]/2", B: "[~@3 c#4 d4 d4@2 c#4@2 ~@7]/2",
  C: "[~@4 f#4@2 f#4@2 f#4@2 f#4@2 a4@2 g#4@4 g#4@3 ~@11]/2", D: "[~@4 g#4@2 g#4@2 g#4@2 b4@4 a4@5 ~@13]/2",
  E: "[~@4 a4@2 a4@2 a4@2 a4@2 b4@2 b4@4 b4@3 ~@11]/2",
  F: "[~@3 c#4 e4 g#4@2 a4@2 e4 d4 c#4 d4 d4@2 c#4@2 a3@2 ~ e4 g#4@2 a4@2 e4 d4 c#4@2 d4 c#4 e4@2 ~@3 e4 g#4@2 a4@2 e4 d4 c#4 d4 d4@2 c#4@2 a3@2 ~@5]/7",
  G: "e3 f#3!2 e3 f#3 e3 f#3 a3", H: "c#4@2 c#4 a3 b3 c#4 e3@2", I: "b2 ~@3",
  J: "[~@6 c#4@2 e4@2 g#4@4 a4@4 e4@2 d4@2 c#4@2 d4@2 d4@4 c#4@4 a3@4 ~@2 e4@2 g#4@4 a4@4 e4@2 d4@2 c#4@4 d4@2 c#4@2 e4@4 ~@6 e4@2 g#4@4 a4@4 e4@2 d4@2 c#4@2 d4@2 d4@4 c#4@4 a3@3 ~@11]/7",
})).s("gm_piano").gain(0.05)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@4 A B C D A B C D A B C D A B C D E F E F E F G H A B C D A B C D A B C D E F E F E F G I J K L M N O P Q E F E F E
  F G I E F E F E F G I ~@3 R A B C D A B C D A B C D A B C D E F E F E F G I E F E F E F G I E F E F E F G H A S
>`.pickRestart({
  A: "e2 ~ f#2 ~@2 e2 f#2 ~", B: "b1@3 ~@3 b1@2 e2@2 c#2@2 e2@2 ~@2", C: "e2@2 ~@2 f#2@3 ~@3 e2@2 f#2@2 ~@2",
  D: "b2@3 ~@3 b1@2 e2@2 c#2@2 g#1@2 ~@2", E: "d2 ~@2 d2 e2 ~@2 e2", F: "f#2 ~@2 f#2!2 ~ e2 ~", G: "d2 ~@2 d2!2 ~@2 d2",
  H: "c#2 ~@2 c#2!2 ~ c#2 ~", I: "c#2 ~@2 c#2!2 ~ c#2 g#2", J: "b1@3 ~@3 b1 ~ b1@2 ~@4 b1 ~",
  K: "b1@3 ~@3 b1 ~ b1@2 ~@2 b1@2 c2@2", L: "c#2@3 ~@3 c#2 ~ c#2@2 ~@4 c#2 ~", M: "c#2@3 ~@3 c#2 ~ c#2@3 ~ c#2@2 e2@2",
  N: "d2@3 ~@3 d2 ~ d2@3 ~@3 d2 ~", O: "d2@3 ~@3 d2 ~ d2@3 ~ d2@2 b1@2", P: "e2@4 ~@2 e2 ~ e2@4 ~@2 e2 ~",
  Q: "f#2@4 ~@2 f#2 ~ f#2@3 ~ f#2@3 ~", R: "~@5 c#3 g#2 c#2", S: "~@4 f#2@3 ~@9",
})).s("gm_distortion_guitar").gain(0.37).pan(0.4)

// chords · piano
const piano_2 = note(`<
  A B A B A B A B A B A B A B A B A B A B@2 C B C B C D E A B A B A B A B A B A B@2 C B C B C D E F@2 G@2 H@2 I@2 B C B
  C B C D E B C B C B C D E A B A B A B A B A B A B A B A B A B A B@2 C B C B C D E B C B C B C D E B C B C B C D E J K
>`.pickRestart({
  A: "~@2 [c#4,f#4,a4] ~@3 [c#4,f#4,a4] ~@3 [c#4,f#4,a4] ~@3 [c#4,f#4,a4] ~", // F#m
  B: "~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~", // D E
  C: "~@2 [c#4,f#4,a4] ~@3 [c#4,f#4,a4] ~@3 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~", // F#m E
  D: "~@2 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~@3 [d4,f#4,a4] ~", // D
  E: "~@2 [c#4,f#4,g#4] ~@3 [c#4,f#4,g#4] ~@3 [c#4,f#4,g#4] ~@3 [c#4,f#4,g#4] ~", // C#sus4
  F: "~@2 [f#3,b3,c#4] ~@3 [f#3,b3,d4] ~@3 [f#3,b3,c#4] ~@3 [f#3,b3,d4] ~", // F#sus4 Bm F#sus4 Bm
  G: "~@2 [g#3,c#4,e4] ~@3 [g#3,c#4,e4] ~@3 [g#3,c#4,e4] ~@3 [g#3,c#4,e4] ~", // C#m
  H: "~@2 [a3,c#4,f#4] ~@3 [a3,c#4,f#4] ~@3 [a3,c#4,f#4] ~@3 [a3,c#4,f#4] ~", // F#m
  I: "~@2 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~", // E
  J: "[c#4,e4,g#4] ~@3 [c#4,f#4,a4] ~@7 [c#4,f#4,a4]@2 ~@2", // C#m F#m
  K: "[e3,f3,g3] [a3,b3,c4] [d4,e4,f4,g4,a4] [b4,c5,d5,e5] [a4,c#5,f#5]@3 ~@9, ~@4 f5 ~@11", // Em Am Dm Cmaj7 F#m
})).s("gm_piano").gain(0.42)

// other · distortion guitar
const distortion_guitar_2 = note("<~@3 A ~@4 B C B D ~@16 B C B D ~@23 E ~@20 B C B D B C B D ~@34>".pickRestart({
  A: "~@3 e2", B: "e3 f#3!2 e3 f#3 ~ f#3 a3", C: "c#4 ~ c#4 a3 b3 c#4 e3 ~", D: "b2 ~@7", E: "~@6 f#3!10",
})).s("gm_distortion_guitar").gain(0.47).pan(0.4)

// other · pad poly
const pad_poly = note("<~@8 A B A C ~@16 A B A C ~@16 D@2 E@2 D@2 F@2 ~@20 A B A C A B A C ~@34>".pickRestart({
  A: "e5 f#5!2 e5 f#5 e5 f#5 a5", B: "c#6 a5 c#6 a5 b5 c#6 e5 ~", C: "b4 ~@7", D: "[f#4,a4]/2", E: "[e4,g#4]/2",
  F: "[g#4,b4]/2", // G#m
})).s("gm_pad_poly").gain(0.32).pan(0.7)

// chords · recorder
const recorder = note("<~@19 A@8 B ~@11 A@8 B C@2 D@2 C@2 E@3 F@6 G@8 H ~@19 A@8 I@8 G@8 H ~@2>".pickRestart({
  A: "[~@4 [a4,c#5] [b4,e5]@2 [a4,f#5]@5 [g#4,e5]@3 [a4,f#5]@2 ~@3 [a4,c#5] [b4,e5]@2 [a4,f#5]@5 [g#4,e5]@3 [a4,c#5]@3 ~@2 [a4,c#5] [b4,e5]@2 [a4,f#5]@5 [g#4,e5]@3 [a4,f#5]@3 ~@2 [a4,f#5] [g#4,e5]@2 [a4,b4]@9]/8", // A E5 D C#m D A E5 D …
  B: "[g#4,c#5]@3 ~", C: "[f#4,a4]/2", D: "[e4,g#4]/2",
  E: "[[g#4,b4]@12 [a4,c#5] [b4,e5]@2 [a4,f#5]@5 [g#4,e5]@3 [a4,f#5]]/3", // G#m A E5 D C#m D
  F: "[~@4 [a4,c#5] [b4,e5]@2 [a4,f#5]@5 [g#4,e5]@3 [a4,c#5]@3 ~@2 [a4,c#5] [b4,e5]@2 [a4,f#5]@5 [g#4,e5]@3 [a4,f#5]@3 ~@2 [a4,f#5] [g#4,e5]@2 [a4,b4]@9]/6", // A E5 D C#m A E5 D C#m …
  G: "[[g#4,c#5]@4 [a4,c#5] [b4,e5]@2 [a4,f#5]@5 [g#4,e5]@3 [a4,f#5]@2 ~@3 [a4,c#5] [b4,e5]@2 [a4,f#5]@5 [g#4,e5]@3 [a4,c#5]@3 ~@2 [a4,c#5] [b4,e5]@2 [a4,f#5]@5 [g#4,e5]@3 [a4,f#5]@3 ~@2 [a4,f#5] [g#4,e5]@2 [a4,b4]@9]/8", // C#5 A E5 D C#m D A E5 …
  H: "[g#4,c#5] ~", // C#5
  I: "[[g#4,c#5]@4 [g#4,c#5] [b4,e5]@2 [a4,f#5]@5 [g#4,e5]@3 [a4,f#5]@3 ~@2 [a4,c#5] [b4,e5]@2 [a4,f#5]@5 [g#4,e5]@3 [a4,c#5]@3 ~@2 [a4,c#5] [b4,e5]@2 [a4,f#5]@5 [g#4,e5]@3 [a4,f#5]@3 ~@2 [a4,f#5] [g#4,e5]@2 [a4,b4]@9]/8", // C#5 E5 D C#m D A E5 D …
})).s("gm_recorder").gain(0.26)

// other · overdriven guitar
const overdriven_guitar = note("<~@56 A@4 ~@14 B@2 ~@42>".pickRestart({
  A: "[[c#6,c#7]@63 ~]/4", B: "[~@6 c#5@3 c#5!3 c#5@4]/2",
})).s("gm_overdriven_guitar").gain(0.42).pan(0.7)

// other · brass section
const brass_section = note("<~@63 A@4 B@5 ~@35 C@4 D@5 E F>".pickRestart({
  A: "[~@6 f#4 ~ [a3,a4]@2 [b3,b4] ~@3 [c#4,c#5]@21 ~@3 [f#3,f#4] ~ [a3,a4]@2 [b3,b4] ~@3 [f#3,f#4]@18]/4", // A B C# F# A B F#
  B: "[~@6 f#4 ~ [a3,a4]@2 [b3,b4] ~@3 [c#4,c#5]@21 ~@3 [f#3,f#4] ~ [a3,a4]@2 [b3,b4] ~@3 [f#3,f#4]@26 ~@8]/5", // A B C# F# A B F#
  C: "[~@4 [f#3,f#4]@2 ~@2 [a3,a4]@2 [b3,b4] ~@3 [c#4,c#5]@21 ~ [f#3,f#4]@2 ~@2 [a3,a4]@2 [b3,b4] ~@3 [f#3,f#4]@18]/4", // F# A B C# F# A B F#
  D: "[~@4 [f#3,f#4]@2 ~@2 [a3,a4]@2 [b3,b4] ~@3 [c#4,c#5]@21 ~ [f#3,f#4] ~@3 [a3,a4]@2 [b3,b4] ~@3 [f#3,f#4]@26 ~@8]/5", // F# A B C# F# A B F#
  E: "[e4,e5] ~ [f#4,f#5] ~@2 [e4,e5] [f#4,f#5] ~", F: "~@2 [f#4,f#5,f#6] ~@5",
})).s("gm_brass_section").gain(0.47).pan(0.4)

// other · brass section · soft notes · D# Fmaj7 D#maj7 C#
const brass_section_soft = note(`<
  ~@63
  [~@6 f#3 ~@9]
  ~@3
  [~@6 f#3 ~@9]
  ~@49
  [~@2 [d#4,d#5,d#6] [e4,f4,e5,f5,e6,f6] ~@2 [e4,f4,e5,f5,e6,f6] [d4,d#4,d5,d#5,d6,d#6] [c#4,c#5,c#6] ~@7]
>`).s("gm_brass_section").gain(0.21).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@4
  [x ~@2 x!2 ~@3]!67
  [x ~@5 x ~ x ~@2 x ~@4]
  ~@3
  [~@11 x ~@2 x ~]
  [x ~@2 x!2 ~@3]!40
  [x ~ x ~@2 x ~@2]
  [~ x ~@2]
>`).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@3 A B@15 C B@19 C B@7 D B@15 D B@7 E ~@3 F B@15 C B@7 D B@7 D B@9 D>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@4 x ~@2 x ~@3", D: "~ x ~@2", E: "~@2 x ~@3 x!2", F: "~ x ~@4 x ~",
})).gain(0.71)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@2 B A@15 B A@7 B A@3 B A@7 B A@7 B A@7 B A@7 B A@7 ~@4 B A@7 B A@7 B A@7 B A@7 B A@7 ~@2
>`.pickRestart({
  A: "x!4", B: "~ x!3",
})).gain(0.71)

// drums · low tom
const low_tom = s("lt").struct("<~@47 A ~@15 A ~@11 B ~@23 A ~@7 A ~@9 C>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x", C: "~@3 x ~@12",
})).gain(0.57)

// drums · mid tom
const mid_tom = s("mt").struct("<~@27 A ~@47 B ~@7 A ~@32 A C>".pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~@10", C: "~@3 x ~@12",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 A ~@7 B ~@11 A ~@7 B ~@7 A ~@3 A ~@11 A ~@7 A ~@7 A ~@3 A ~@7 B ~@7 A ~@7 A ~@8 C ~
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~ x", C: "x!2 ~@2",
})).gain(0.5)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@72 A B A C A@2 D A E A F C A@3 C A@4 E D A@2 F E A@3 C A@4 C A@2 F C A E G A C ~@2
>`.pickRestart({
  A: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", B: "x ~ x ~ x!3 ~ x ~ x ~ x!3 ~", C: "x!3 ~ x ~ x ~ x!3 ~ x!3 ~",
  D: "x ~ x ~ x!3 ~ x!3 ~ x!3 ~", E: "x!3 ~ x!3 ~ x ~ x ~ x!3 ~", F: "x!3 ~ x ~ x ~ x!3 ~ x ~ x ~",
  G: "x ~ x ~ x ~ x ~ x!3 ~ x!3 ~",
})).gain(0.21)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@72 A B A C A@2 D A E A F C A@3 C A@4 E D A@2 F E A@3 C A@4 C A@2 F C A E G A C ~@2
>`.pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x", B: "~ x ~ x ~@3 x ~ x ~ x ~@3 x", C: "~@3 x ~ x ~ x ~@3 x ~@3 x",
  D: "~ x ~ x ~@3 x ~@3 x ~@3 x", E: "~@3 x ~@3 x ~ x ~ x ~@3 x", F: "~@3 x ~ x ~ x ~@3 x ~ x ~ x",
  G: "~ x ~ x ~ x ~ x ~@3 x ~@3 x",
})).gain(0.07)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x ~ x!3] [~ x!3 ~ x ~ x] [~ x!5 ~ x] [x!4 ~ x!3] ~@114>").gain(0.5)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<[x!3 ~] [x ~ x!2] [x ~@2 x] [~ x] ~@114>").gain(0.29)

stack(
  bass, piano, distortion_guitar, piano_2, distortion_guitar_2, pad_poly, recorder, overdriven_guitar, brass_section,
  brass_section_soft, kick, snare, hihat, low_tom, mid_tom, open_hat, crash, tambourine, tambourine_soft, rim, rim_soft
)

More by Morandi