Strudelify

La notte dei pensieri

Michele Zarrillo

KeyB majorTempo99 bpm
0:00/0:00
// La notte dei pensieri — Michele Zarrillo
// 99 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 123 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(99/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.

// other · piano
const piano = note("<~@17 A@4 ~@10 B@3 ~@23 A@4 ~@10 B@3 ~@49>".pickRestart({
  A: "[~@14 b4@6 a4@2 e4@5 f#4 d4@2 d4@15 ~ b4@8 a4@10]/4", B: "[~@14 b4@6 a4@2 e4@5 f#4 d4@2 d4@15 ~@3]/3",
})).s("gm_piano").gain(0.37).pan(0.7)

// other · piano · soft notes
const piano_soft = note("<~@18 A ~@13 A ~@25 A ~@13 A ~@50>".pickRestart({
  A: "~@11 e4 ~@4",
})).s("gm_piano").gain(0.24).pan(0.7)

// other · piano
const piano_2 = note("<~@30 A B@2 ~@14 C@2 ~@21 A B@2 ~@2 D@2 ~@10 C@2 ~@18 E@2 ~@14>".pickRestart({
  A: "~@5 f#4 g4 a4", B: "[~ a4!4 f#4 d4 d4@2 ~@7]/2", C: "[~@15 a4@3 g4@2 g4@2 g4@2 a4@2 g4@2 g4@2 f#4@2]/2",
  D: "[a4@2 a4@2 a4@2 a4@2 a4@2 b4@2 a4@2 a4@5 ~@13]/2", E: "[~@15 b4@3 a4@2 a4@2 a4@2 b4@2 a4@2 a4@2 g#4@2]/2",
})).s("gm_piano").gain(0.05)

// chords · epiano2
const epiano2 = note(`<
  ~ A@8 B C D@2 B C E@2 ~@36 B C E@2 ~@36 F@3 G H I J@2 H I J@2 H I J@2 H I J@2 H I J@2 H I J@2 K@2
>`.pickRestart({
  A: "[[b3,d4,f#4]@10 b3 ~ [b3,d4,f#4]@2 a3@12 a3@2 [a3,c#4,e4]@2 [b3,d4,f#4]@16 [a3,c#4,f#4]@16 [b3,d4,f#4]@12 b3 ~ [b3,d4,f#4]@2 a3@12 a3@2 [a3,c#4,e4]@2 [b3,d4,f#4]@16 [a3,c#4,f#4]@16 ~@2, ~@7 [c#4,e4]@7 ~@25 [c#4,e4]@7 ~@18]/8", // Bm A Bm F#m Bm A Bm F#m …
  B: "[a3,d4,f#4]", C: "~ a4, [a3,c#4,e4]", D: "[[g3,b3,d4]@14 [e3,a3,c#4]@8 [g3,b3,d4]@4 [a3,c#4,e4]@5 ~]/2",
  E: "[[g3,b3,d4]@7 [e3,a3,c#4]@4 [f#3,a#3,c#4]@5]/2", // G A F#
  F: "[[b3,e4,g#4]@6 [b3,e4,g#4] [b3,d#4,f#4]@8 [b3,c#4,e4,g#4]@9]/3", G: "[b3,d#4,f#4]@2 [a3,c#4,e4] [b3,d#4,f#4]",
  H: "[b3,e4,g#4]", I: "~ b4, [b3,d#4,f#4]", J: "[[a3,c#4,e4]@14 [f#3,b3,d#4]@8 [a3,c#4,e4]@4 [b3,d#4,f#4]@5 ~]/2",
  K: "[[g#3,b3,e4]@5 ~@3]/2", // E
})).s("gm_epiano2").gain(0.3).pan(0.6)

// bass · electric bass finger
const bass = note(`<
  A B C D E D C D F G H I@2 G H J@2 K@2 L@2 M@2 N O M P N Q M P N Q M P R@2 S T U V S T U V W X Y Z W X Y Z G H J@2 K@2
  L@2 M@2 N O M P N Q M P N Q M P R@2 S T U V S T U V W X Y Z W X Y Z AA@4 AB AC AD@2 AB AC AD@2 AB AC AD@2 AB AC AD@2
  AB AC AD@2 AB AC AE@2 AF@2
>`.pickRestart({
  A: "~@12 f#2@2 [d#2,e2,f2] [c#2,d2]", B: "b1@3 b1 b1@3 b1, c2 ~@15", C: "b1@3 f#1 a1 b1 d2@2", D: "b1@3 b1 b1@3 b1",
  E: "a1@3 a1 a1@2 f#2@2", F: "a1@3 a1 a1@2 a2@2", G: "d2@3 d2 d2@3 d2", H: "c#2@3 c#2!2 c#2@2 c#2",
  I: "[g1@3 g1 g1@3 a1@2 a1@2 g1@2 a1@2 e2]/2", J: "[g1@3 g1 g1@3 a1@4 a#1@4 f#1]/2", K: "[b1@15 f#2]/2",
  L: "[b2@26 f#2!2 f#2@4]/2", M: "b1@5 ~ b1 ~ b1@7 ~", N: "g1@5 ~ g1 ~ g1@7 ~", O: "f#1@5 ~ f#1 ~ f#1@7 ~",
  P: "b1@5 ~ b1 ~ b1@6 b1 a1", Q: "f#1@5 ~ a#1@4 c#2@2 f#2@2 c#2@2", R: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  S: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", T: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~ g#1 ~",
  U: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~", V: "f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~ f#1 ~",
  W: "d2@5 ~ d2 ~ d2@7 ~", X: "c#2@5 ~ c#2 ~ c#2@2 c#2@6", Y: "g1@5 ~ g1 ~ g1@6 g1 g#1",
  Z: "a1@5 ~ a1 ~ a1@2 a1@2 a2@2 e2@2",
  AA: "[b1@5 ~ b1 ~ b1@6 b1@4 b1@4 b1 ~ d#2@2 f#2 g#2 b2 g#2 b2@7 ~ b2 ~ b2@6 b2@4 b1@4 b1 ~ b1 ~ b1 ~ b1 ~ b1 ~]/4",
  AB: "e2@3 e2 e2@3 e2", AC: "d#2@3 d#2!2 d#2@2 d#2", AD: "[a1@3 a1 a1@3 b1@2 b1@2 a1@2 b1@2 f#2]/2",
  AE: "[a1@3 a1 a1@3 b1@2 b1@2 a1@2 b1@2 a1]/2", AF: "[e1@5 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · pad warm
const pad_warm = note(`<
  ~ A@4 B@4 C D@3 C E@3 F G F G F G F H F G F H F G F H F G I@2 J K L M J K L M N O P O N O P O C E@3 F G F G F G F H F
  G F H F G F H F G I@2 J K L M J K L M N O P O N O P O Q@3 R S T@3 S T@3 S T@3 S T@3 S T@3 S T@3 U@2
>`.pickRestart({
  A: "[[b3,d4]@7 [a3,c#4,e4]@9 [g3,b3,d4]@7 [a3,c#4,e4]@9, f#4]/4", // Bm A G A
  B: "[[b3,d4]@7 [a3,c#4,e4]@9 [g3,b3,d4]@7 ~@5 e4@4, f#4@7 ~, ~@23 [a3,c#4]@9]/4", C: "[a3,d4,f#4]",
  D: "[~@12 g4@3 [a3,c#4,e4,a4]@4 [g3,b3,d4,g4]@2 [a3,c#4,e4,a4]@3, [a3,c#4,e4]@8 [g3,b3,d4]@7 ~@9, ~ b4@2 ~@3]/3", // A G A G
  E: "[~@12 g4@3 [a3,c#4,e4,a4]@4 [a#3,c#4,f#4,a#4]@5, [a3,c#4,e4]@8 [g3,b3,d4]@7 ~@9, ~ b4@2 ~@3]/3", F: "[b3,d4,f#4]",
  G: "[a3,c#4,e4]", H: "a3 a#3, [c#4,f#4]", I: "[b3,d4,f#4]/2", J: "[f#4,b4,d#5]", K: "[b4,d#5,g#5]", L: "[g#4,b4,e5]",
  M: "[f#4,a#4,d#5] [a#4,c#5,f#5]", N: "[a4,d5,f#5]", O: "[a4,c#5,e5]", P: "[g4,b4,d5]",
  Q: "[[b4,e5,g#5]@6 [b4,e5,g#5] [b4,d#5,f#5]@8 [b4,c#5,e5,g#5]@9]/3", R: "[b4,d#5,f#5]@2 [a4,c#5,e5] [b4,d#5,f#5]",
  S: "[b3,e4,g#4]", // E
  T: "[~@12 a4@3 [b3,d#4,f#4,b4]@4 [a3,c#4,e4,a4]@2 [b3,d#4,f#4,b4]@3, [b3,d#4,f#4]@8 [a3,c#4,e4]@7 ~@9, ~ c#5@2 ~@3]/3", // B A B A
  U: "[[e4,g#4,b4]@5 ~@3]/2", // E
})).s("gm_pad_warm").gain(0.35).pan(0.6)

// other · orchestral harp
const orchestral_harp = note("<~@5 A B C D ~@3 E ~@3 F ~@106>".pickRestart({
  A: "d4!2 e4!2 f#4!2 b3!2 ~@8", B: "d4!2 e4!2 f#4!2 b4!2 ~@8", C: "d4!2 e4!2 f#4!2 b3!2 ~@2 c#5!2 d5!2 b4!2",
  D: "~@6 e5 [b4,c#5] [a4,b4,c#5] a4 ~@6", E: "~@10 e6 [b5,c#6] a5 ~@3", F: "~@10 f#6 [b5,c#6,d6] f#5 ~@3",
})).s("gm_orchestral_harp").gain(0.29).pan(0.4)

// other · orchestral harp · soft notes · Bsus2 Bm
const orchestral_harp_soft = note(`<
  ~@8
  [~@7 e5 ~@8]
  ~@3
  [~@11 e6 [b5,c#6] a5 ~@2]
  ~@3
  [~@11 f#6 [b5,c#6,d6] f#5 ~@2]
  ~@106
>`).s("gm_orchestral_harp").gain(0.14).pan(0.4)

// other · rock organ
const rock_organ = note(`<
  ~@9 A@2 B@2 A@2 C@2 D@2 ~@34 A@2 C@2 D@2 ~@38 E@2 F@2 E@2 F@2 G@2 H@2 G@2 H@2 G@2 H@2 G@2 I@3 ~
>`.pickRestart({
  A: "[d6@5 f#5 g5 a5@7 e6@2]/2", B: "[d6@2 f#5 g5 a5@12]/2", C: "[d6@2 f#5 g5 a5@7 a#5@5]/2", D: "[b5@5 ~@3]/2",
  E: "[e6@5 g#5 a5 b5@7 f#6@2]/2", F: "[e6@2 g#5 a5 b5@12]/2", G: "[e5@5 g#4 a4 b4@7 f#5@2]/2",
  H: "[e5@2 g#4 a4 b4@12]/2", I: "[e5@2 g#4 a4 b4@14 ~@6]/3",
})).s("gm_rock_organ").gain(0.5).pan(0.6)

// chords · synth brass 1
const synth_brass_1 = note("<~@5 A ~@23 B ~@3 C ~@35 C ~@3 C ~@26 D ~@15 D ~@6>".pickRestart({
  A: "b3 f#4 b4 b3 f#4 b4 b3 f#4 b4 b3 f#4 b4 b3 f#4 ~@2",
  B: "[f#3,b3,d4] [b3,d4,f#4] ~ [f#3,b3,d4] [b3,d4,f#4] ~ [f#3,b3,d4] [b3,d4,f#4] ~ [f#3,b3,d4] [b3,d4,f#4] ~ b3 ~@3", // Bm
  C: "[f#3,b3,d4] [b3,d4,f#4] ~ [f#3,b3,d4] [b3,d4,f#4] ~ [f#3,b3,d4] [b3,d4,f#4] ~ [f#3,b3,d4] [b3,d4,f#4] ~ [f#3,b3,d4] ~@3", // Bm
  D: "b5 d#5 f#5 b5 d#5 f#5 b5 d#5 f#5 b5 d#5 f#5 b5 d#5 f#5 b5",
})).s("gm_synth_brass_1").gain(0.25).pan(0.8)

// chords · synth brass 1 · soft notes
const synth_brass_1_soft = note("<~@29 A ~@3 B ~@35 B ~@3 B ~@49>".pickRestart({
  A: "~@12 [f#3,d4] [b3,d4] ~@2", B: "~@13 [b3,d4] ~@2",
})).s("gm_synth_brass_1").gain(0.15).pan(0.8)

// chords · pad halo
const pad_halo = note(`<
  ~@37 A B C D A B C D E F G H E F G H E F I@2 ~@20 A B C D A B C D E F G H E F G H J@3 K L M N@2 L M N@2 L M N@2 L M
  N@2 L M N@2 L M N@2 O@2
>`.pickRestart({
  A: "[f#3,b3,d#4]", B: "[b3,d#4,g#4]", C: "[g#3,b3,e4]", D: "[f#3,a#3,d#4] [a#3,c#4,f#4]", E: "[a3,d4,f#4]",
  F: "[a3,c#4,e4]", G: "[g3,b3,d4]", H: "[a3,c#4,e4]@2 [g3,b3,d4] [a3,c#4,e4]",
  I: "[[g3,b3,d4]@7 [a3,c#4,e4]@4 [a#3,c#4,f#4]@5]/2", // G A F#
  J: "[[b3,e4,g#4]@6 [b3,e4,g#4] [b3,d#4,f#4]@8 [b3,c#4,e4,g#4]@9]/3", K: "[b3,d#4,f#4]@2 [a3,c#4,e4] [b3,d#4,f#4]",
  L: "[b3,e4,g#4]", M: "[b3,d#4,f#4]", N: "[[a3,c#4,e4]@7 [b3,d#4,f#4]@4 [a3,c#4,e4]@2 [b3,d#4,f#4]@3]/2",
  O: "[[g#3,b3,e4]@5 ~@3]/2", // E
})).s("gm_pad_halo").gain(0.2).pan(0.3)

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

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2 A ~@3 A ~@7 A ~ A B C D E D@7 F D@3 G D@3 H D@7 I J K D K J K D@2 ~ A ~@2 B C L E D@7 F D@7 H D@2 K D@4 I J K D K
  J K D@3 K D G ~ A ~@9 M ~@9 A ~@4
>`.pickRestart({
  A: "~@7 x", B: "~@2 x ~@3 x!2 ~@2 x ~@3 x ~", C: "~@6 x ~@3 x!2 ~@2 x ~", D: "~ x ~ x ~ x ~ x", E: "~@3 x ~ x ~ x",
  F: "~ x ~@5 x", G: "~ x ~ x ~@4", H: "~ x", I: "~ x ~@6", J: "~ x ~ x ~@3 x", K: "~ x ~ x ~ x ~@2",
  L: "~@5 x!3 ~ x!2 ~@3 x ~", M: "~@7 x ~ x ~ x ~@4",
})).gain(0.19)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 A ~@3 B ~@35 C ~@39 D ~@26>".pickRestart({
  A: "~@5 x ~@2", B: "~@10 x!2 ~@4", C: "~ x!2 ~@5", D: "~ x ~@2 x ~@4 x!2 ~@5",
})).gain(0.52)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@12 A ~@2 A ~@2 B ~ B ~@7 C ~@3 D ~@3 E ~@8 F A ~ G F A ~@4 A@2 ~ B@3 ~@7 C ~@7 E ~@2 A ~@5 F A ~ G F A ~@6 F ~@2 D ~
  A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@2
>`.pickRestart({
  A: "~@7 x", B: "x", C: "~@2 x ~@2 x ~@2", D: "~@5 x ~ x", E: "x!2 ~@2", F: "~@5 x ~@2", G: "~@3 x",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct("<~@95 [~@7 x] ~@27>").gain(0.58)

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

stack(
  piano, piano_soft, piano_2, epiano2, bass, pad_warm, orchestral_harp, orchestral_harp_soft, rock_organ, synth_brass_1,
  synth_brass_1_soft, pad_halo, kick, snare, hihat, hihat_soft, mid_tom, open_hat, high_tom, crash
)

More by Michele Zarrillo