Strudelify

Il cielo in una stanza

Gino Paoli

KeyE majorTempo96 bpm
0:00/0:00
// Il cielo in una stanza — Gino Paoli
// 96 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 67 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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.

// chords · flute · "THIS SONG"
const flute = note("<A B C D A B C E A B C E A F G E A F C E ~@40 H I J K L@2 ~>".pickRestart({
  A: "~ [f#4,g#4]@7 ~@5 [f#4,g#4]@6 e4@2 ~@3", B: "~ [f#4,g#4]@6 e4@2 ~@4 [f#4,g#4]@6 ~@5",
  C: "~ [g#4,a4]@6 ~@6 [g#4,a4]@6 f#4@2 ~@3", D: "~ [g#4,a4]@6 f#4@2 ~@4 [g#4,a4]@6 f#4@3 ~@2",
  E: "~ [g#4,a4]@6 f#4@2 ~@4 [g#4,a4]@6 f#4@2 ~@3", F: "~ [f#4,g#4]@6 e4@2 ~@4 [f#4,g#4]@7 ~@4",
  G: "~ [g#4,a4]@6 ~@6 [g#4,a4]@6 f#4 ~@4", H: "~ [f#4,g#4]@6 e4@2 ~@4 [f#4,g#4]@6 e4@2 ~@3",
  I: "~ [g#4,a4]@6 f#4@2 ~@3 [g#4,a4]@6 ~@6", J: "~ [f#4,g#4]@6 e4@2 ~@4 [f#4,g#4]@6 e4@3 ~@2",
  K: "~ [g#4,a4]@5 f#4@3 ~@4 a4@6 f#4@2 ~@3, ~@2 g#4 ~", L: "[~ e4@41 ~@6]/2",
})).s("gm_flute").gain(0.18)

// chords · flute · "THIS SONG" · soft notes
const flute_soft = note("<A B C ~ D B C ~ D B E ~ D B E ~ D B E ~@42 F ~@5>".pickRestart({
  A: "~@7 e4 ~@16", B: "~@19 e4@2 ~@3", C: "~@7 f#4@2 ~@15", D: "~@7 e4@2 ~@15", E: "~@7 f#4 ~@16", F: "~@19 f#4@2 ~@3",
})).s("gm_flute").gain(0.12)

// chords · harpsichord · "PRG.CHANGE"
const harpsichord = note(`<
  ~@12 A B C D E F G H I J K L M N O P@2 Q K R M N S T@2 ~@3 I Q K R M N S P@2 Q K L M N S T@2 ~@3 A U V W X ~@2
>`.pickRestart({
  A: "~@19 e4@5, ~ [f#4,g#4,b4]@12 [f#4,g#4,b4]@11, ~@7 e4@12 ~@5", // G#m7
  B: "~ [f#4,g#4,b4]@12 ~@6 e4@5, ~@13 [f#4,g#4,b4]@11", C: "~@7 f#4@6 [a4,c#5]@11, ~ [g#4,a4,c#5]@12 ~@11",
  D: "~ [g#4,a4,c#5]@11 ~@7 f#4@5, ~@13 [g#4,a4,c#5]@11", E: "~@7 e4@5 ~ [f#4,g#4,b4]@11, ~ [f#4,g#4,b4]@11 ~@12",
  F: "~ [f#4,g#4,b4]@11 ~@7 e4@5, ~@13 [f#4,g#4,b4]@11", G: "~@7 f#4@6 ~@6 f#4@5, ~ [g#4,a4,c#5]@12 [g#4,a4,c#5]@11",
  H: "~@7 f#4@6 g#4@6 ~@3 f#4@2, ~ [g#4,a4,c#5]@12 [a4,c#5]@11, ~@19 g#4@5", // Amaj7 A
  I: "~ [e4,g#4,b4]@3 [e4,g#4]@3 [e4,g#4]@3 [e4,g#4]@3 [e4,g#4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@2, ~@5 b4@3 ~@4", // E
  J: "~ [g#4,c#5] ~@2 c#5@3 g#4@3 [e4,g#4,c#5]@3 [e4,g#4,c#5]@3 [e4,g#4,c#5]@3 [e4,g#4,c#5]@3 [e4,g#4,c#5]@2, ~ e4@3 ~@20", // C#5 C#m
  K: "~ [f#4,a4,c#5]@3 [f#4,a4,c#5]@3 [f#4,a4,c#5]@3 [f#4,a4,c#5]@3 a4@3 [f#4,a4,c#5]@3 c#5@3 [f#4,c#5]@2, ~@19 a4@5", // F#m F#5
  L: "~ [f#4,b4]@3 [f#4,b4]@3 [d#4,f#4,b4]@3 [d#4,f#4,b4]@3 [d#4,f#4,b4]@3 [d#4,f#4,b4]@3 [d#4,f#4,b4]@3 [d#4,f#4,b4]@2, ~ d#4 ~@22", // B5 B
  M: "~ [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@2 ~ [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@2", // E
  N: "~ [e4,g#4,c#5]@3 [e4,c#5]@3 [e4,g#4,c#5]@2 ~ [e4,g#4,c#5]@3 [e4,g#4,c#5]@3 [e4,g#4]@3 [e4,g#4,c#5]@3 [e4,g#4,c#5]@2", // C#m E C#m
  O: "~ [f#4,a4,c#5]@3 [f#4,a4]@3 [f#4,a4,c#5]@3 [a4,c#5]@3 [f#4,a4,c#5]@3 [f#4,a4,c#5]@3 [f#4,a4]@3 [f#4,c#5]@2, ~@10 f#4 ~@13", // F#m A F#m F#5
  P: "[~ [f#4,b4]@3 [f#4,b4]@3 [d#4,f#4,b4]@3 [d#4,f#4,b4]@3 [f#4,b4]@3 [f#4,b4]@3 [f#4,b4]@3 b4@3 [e4,g#4,b4]@3 [e4,g#4]@3 [e4,g#4]@3 [e4,g#4]@3 [e4,g#4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@3 [e4,g#4,b4]@2, ~ d#4 ~@20 [d#4,f#4]@26, ~@17 b4@3 ~@4]/2", // B5 B B5 E D#m
  Q: "~ [e4,g#4]@3 c#5@3 g#4@3 [e4,g#4,c#5]@3 [e4,g#4,c#5]@3 [e4,g#4,c#5]@3 [e4,g#4,c#5]@3 [e4,g#4,c#5]@2, ~ c#5 ~@22", // E C#m
  R: "~ [d#4,b4] ~@2 [f#4,b4]@3 [d#4,f#4,b4]@3 [d#4,f#4,b4]@3 [d#4,f#4,b4]@3 [d#4,f#4,b4]@3 [d#4,f#4,b4]@3 [d#4,f#4,b4]@2, ~ f#4@3 ~@20", // G#m B5 B
  S: "~ [f#4,a4,c#5]@3 [f#4,a4]@3 [f#4,a4,c#5]@3 [f#4,a4,c#5]@3 [f#4,a4,c#5]@3 [f#4,a4,c#5]@3 [f#4,a4]@3 [f#4,c#5]@2", // F#m F#5
  T: "[~ [f#4,b4]@3 [f#4,b4]@3 [d#4,f#4,b4]@3 [d#4,f#4,b4]@3 [f#4,b4]@3 [f#4,b4]@3 [f#4,b4]@3 [d#4,f#4,b4]@5 ~@21, ~ d#4 ~@46]/2", // B5 B B5 B
  U: "~@7 f#4@5 ~@7 f#4@5, ~ [g#4,a4,c#5]@11 ~ [g#4,a4,c#5]@11", // Amaj7
  V: "~@7 e4@5 ~@7 e4@4 ~, ~ [f#4,g#4,b4]@10 ~@2 [f#4,g#4,b4]@10 ~", // G#m7
  W: "~@7 f#4@5 ~@8 f#4@4, ~ [g#4,a4,c#5]@11 ~ [g#4,a4,c#5]@11", X: "~ [b4,e5]@7, e3, ~ [b3,e4]@23, ~ g#4@11",
})).s("gm_harpsichord").gain(0.32)

// chords · harpsichord · "PRG.CHANGE" · soft notes
const harpsichord_soft = note(`<
  ~@13 A B C D A ~@2 E F G H ~ I J K E F G H ~ I J K ~@4 E F G H ~ I J K E F G H ~ I J K ~@11
>`.pickRestart({
  A: "~@7 e4@6 ~@11", B: "~@19 f#4@5, ~@13 g#4@11", C: "~@7 f#4@5 ~@12", D: "~@19 e4@5", E: "~@4 b4@3 b4@3 ~@14",
  F: "~@4 [e4,g#4]@3 [e4,c#5]@3 ~@14", G: "~@13 [f#4,c#5]@3 ~@3 f#4@3 ~@2", H: "~@4 d#4@3 ~@17",
  I: "~@4 g#4@3 ~@9 c#5@3 ~@5", J: "~@4 c#5@3 ~@12 c#5@3 a4@2", K: "~@4 d#4@3 ~@6 d#4@3 d#4@3 d#4@3 ~@2",
})).s("gm_harpsichord").gain(0.19)

// chords · orchestral harp · "PRG.CHANGE"
const orchestral_harp = note(`<
  ~@39
  [~@19 c#5@3 ~@2, ~@2 e3@9 ~, ~@7 a3@15 ~@2, ~@5 c#4@6 ~, ~@13 f#4@3 a4@6 ~@2]
  ~@19
  [~@19 c#5@3 ~@2, ~@2 e3@9 ~, ~@7 a3@15 ~@2, ~@5 c#4@6 ~, ~@13 f#4@3 a4@6 ~@2]
  ~@7
>`).s("gm_orchestral_harp").gain(0.64)

// bass · acoustic bass · "ON THE"
const bass = note(`<
  ~@4 A B C D E F G H I F J K L@2 M@2 N O P Q R S T Q U O V W R S T Q X Y Z D N O AA Q R AB T W U O AC W R S T Q AD AE
  AF D ~@4 AG@3
>`.pickRestart({
  A: "~ e3@23", B: "~ c#3@20 ~ c#3@2", C: "~ f#2@23", D: "~ b2@23", E: "~ e3@17 ~ e3@5", F: "~ c#3@17 ~ c#3@5",
  G: "~ f#3@23", H: "~ b2@18 b2@5", I: "~ e3@20 ~ e3@2", J: "~ f#2@11 ~ f#3@11", K: "~ b2@16 ~@2 b2@5",
  L: "[~ e3@19 ~@2 e3@3 c#3@17 ~ c#3@5]/2", M: "[~ f#3@24 b2@14 ~ b2@5 ~ b2@2]/2", N: "~ e3@7 ~@2 g#3@3 b3@5 ~ e4@5",
  O: "~ c#3@9 e3@3 g#3@6 c#3@5", P: "~ f#3@9 f#3@2 ~ f#3@6 c#3@5", Q: "~ b2@7 ~@2 b2@3 d#3@6 f#3@5",
  R: "~ e3@9 g#3@3 b3@6 e4@4 ~", S: "~ c#3@8 ~ g#3 ~@2 g#3@5 ~ c#3@5", T: "~ f#3@8 ~ a2@3 c#3@6 f#3@5",
  U: "~ e3@7 ~@2 g#3@3 b3@6 e4@5", V: "~ f#3@9 f#3@2 ~ f#3@5 ~ c#3@5", W: "~ b2@6 ~@3 b2@3 d#3@6 f#3@5",
  X: "~ e3@2 ~ e3@3 ~@3 e3 ~@2 e3@8 ~@3", Y: "~ c#3@2 ~ c#3@4 ~@2 c#3 ~@2 c#3@7 ~@4",
  Z: "~ f#3@2 ~ f#3@4 ~@2 f#3 ~@2 f#3@8 ~@3", AA: "~ f#3@8 ~ f#3@2 ~ f#3@5 ~ c#3@5",
  AB: "~ c#3@8 ~ g#3 ~@2 g#3@6 c#3@5", AC: "~ f#3@8 ~ f#3@2 ~ f#3@6 c#3@5", AD: "~ e3 ~@2 e3@4 ~@2 e3@2 ~ e3@8 ~@3",
  AE: "~ c#3@2 ~ c#3@4 ~@2 c#3@2 ~ c#3@7 ~@4", AF: "~ f#3 ~@2 f#3@4 ~@2 f#3 ~@2 f#3@8 ~@3", AG: "[~ e3@24 ~@11]/3",
})).s("gm_acoustic_bass").gain(0.33)

// drums · kick
const kick = s("bd").struct("<~@20 A@3 B A@7 B A@5 C A D A@3 B A@7 B A@5 C A D ~@7>".pickRestart({
  A: "~ x ~@8 x ~@2 x ~@10", B: "~ x ~@11 x ~@10", C: "~ x ~@2 x ~@8 x ~@10", D: "~ x ~@22",
})).gain(0.52)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@23 A ~@7 A ~@4 B A B ~@4 A ~@7 A ~@4 B A B ~@8>".pickRestart({
  A: "~@5 x ~@6", B: "~ x ~@4",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~@20 [~@7 x ~@11 x ~@4]!8 ~@39>").gain(0.59)

// drums · snare
const snare = s("sd").struct("<~@28 A@8 B C@2 B A@16 B C@2 B ~@7>".pickRestart({
  A: "~@7 x ~@11 x ~@4", B: "~ x ~@22", C: "~@13 x ~@10",
})).gain(0.59)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@36
  [~@4 x ~@5 x ~@2 x ~@10]
  [~ x ~@2 x ~@5 x ~@13]!2
  ~@17
  [~@4 x ~@5 x ~@2 x ~@10]
  [~ x ~@2 x ~@5 x ~@13]!2
  ~@8
>`).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@20 [~ x ~@5 x ~@5 x ~@5 x ~@4]!16 ~@4 [~ x ~@5 x ~@5 x ~@5 x ~@4]!16 ~@11>").gain(0.52)

// drums · ride
const ride = s("rd").struct(`<
  ~@4 A@2 B@6 C D B@2 E F D G H I J K L M N L H I J K L M N L O@3 A H I J K L M N L H I J K L M N L O@3 A ~ B A ~ P ~@2
>`.pickRestart({
  A: "~ x ~@22", B: "~ x ~@11 x ~@10", C: "~ x ~@5 x ~@5 x ~@5 x ~@4", D: "~ x ~@11 x ~@5 x ~@4",
  E: "~ x ~@5 x ~@5 x ~@10", F: "~ x ~@11 x ~@8 x ~", G: "~ x ~@5 x ~@5 x ~@5 x ~@2 x ~",
  H: "~ x ~@2 x ~@2 x ~@2 x ~@5 x ~@2 x ~@4", I: "~ x ~@2 x ~@5 x ~@5 x ~@2 x ~@4", J: "~ x ~@8 x ~@5 x ~@2 x ~@2 x ~",
  K: "~ x ~@2 x ~@2 x ~@5 x ~@2 x ~@2 x ~@2 x ~", L: "~ x ~@5 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  M: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", N: "~ x ~@5 x ~@2 x ~@5 x ~@2 x ~@2 x ~",
  O: "~ x ~@2 x ~@5 x ~@2 x ~@10", P: "~ x ~@10",
})).gain(0.37)

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~@4 A@2 B C B C B C ~ D B C E F G H I J K H L ~ M L I J K H L ~ M L ~@4 I J K H L ~ M L I J K H L ~ M L ~@4 N O P Q
  ~@3
>`.pickRestart({
  A: "~@7 x ~@5 x ~@5 x ~@4", B: "~@7 x ~@11 x ~@4", C: "~@7 x ~@11 x ~@2 x ~", D: "~@7 x ~@14 x ~", E: "~@19 x ~@4",
  F: "~@7 x ~@9 x ~@6", G: "~@7 x ~@16", H: "~@5 x ~@6", I: "~@13 x ~@8 x ~", J: "~@7 x ~@5 x ~@8 x ~",
  K: "~@4 x ~@2 x ~@5 x ~@10", L: "~ x ~@4", M: "~@4 x ~@8 x ~@10", N: "~ x ~@11 x ~@10", O: "~@11 x", P: "~@13 x ~@10",
  Q: "~ x ~@22",
})).gain(0.15)

stack(
  flute, flute_soft, harpsichord, harpsichord_soft, orchestral_harp, bass, kick, kick_soft, rim, snare, snare_soft,
  hihat, ride, ride_soft
)

More by Gino Paoli