Strudelify

Il cielo

Zero

KeyA majorTempo130 bpm
0:00/0:00
// Il cielo — Zero
// 130 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 143 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · piano
const piano = note(`<
  A@5 B C@5 D E@6 F@6 G ~@8 H I J@2 K L M@2 N O P Q R S T U V@3 ~@5 N I J@2 K L M@2 N O W Q R S X Y Z@2 ~@68
>`.pickRestart({
  A: "[~@3 [f2,a3,c4,f4]@8 f2@9 [f2,b3,d4,g4]@9 [b3,d4,g4]@8 [b3,d4,g4]@8 ~@5 d4@4 ~ [a2,a3,c4,e4]@8 [a2,a3,c4,e4]@5 [g2,g3,b3,d4]@4 [f2,a3,c4,e4]@8, ~@11 [a3,c4,f4]@32 ~@3 [b3,e4,g#4]@8 ~@26, ~@29 f2@16 ~@35, ~@37 e2@31 ~@12]/5", // F G7 G Am G Fmaj7 F E
  B: "~ [f2,a3,c4,e4]@8 [g2,f3,a3,c4]@7", // Fmaj7 F
  C: "[~@2 [g2,g3,b3]@24 ~@2 [f2,f3,a3,c4]@9 [f2,f3,a3,c4]@8 [f2,g3,b3,d4]@9 [f2,g3,b3,d4]@8 ~ [e2,g3,b3,d4]@8 ~@5 e4@4, ~@71 [e2,g3,b3,d4]@9]/5", // G F G7 Em7
  D: "[a2,e3,a3,c4]@9 [a2,a3,c4]@4 [g2,b3]@3, ~@9 e3@7", // Am G
  E: "[~ [f2,f3,a3,c4]@9 [f2,f3,a3,c4]@8 ~ [f2,g3,b3,d4]@8 [f2,g3,b3,d4]@8 ~ [e2,b3,e4,g4]@9 [e2,b3,e4,g4]@8 [e2,b3,e4,g4]@9 [e2,b3,e4,g4]@8 ~ [f2,f3,a3,c4]@8 [f2,f3,a3,c4]@8 ~ [f2,g3,b3,d4]@8]/6", // F G7 Em F G7
  F: "[~ [f2,g3,b3,d4]@8 [e2,g3,b3,d4]@9 ~@4 d4@4 ~ [a2,a3]@13 [g2,b3]@4 [f2,f3,a3,c4]@9 [f2,a3,c4,e4]@8 [g2,f3,a3,c4]@9 [g2,g3]@8 ~ [f2,f3,a3,c4]@8 [e2,e3,g3,c4]@4 ~ [d2,d3,f3,c4]@4, ~@18 [e2,b3,e4,g#4]@8 ~ e4@15 ~@54, ~@27 c4@11 ~@32 b3@6 ~@20]/6", // G7 Em7 A G F Fmaj7 F G …
  G: "[c2,c3,e3,c4]@3 ~", H: "[g2,g3,b3], d3@7 ~", I: "[a2,e3,a3,c#4]@15 ~",
  J: "[~@18 [f#3,a3,d4]@2 [f#3,a3,d4]@2 [f#3,a3,d4]@2 [f#3,a3]@3 [f#3,a3]@3 [f#3,a3,d4]@2, d2, [f#3,a3,d4]@9 ~@3 d4@3 ~, ~ b1, ~@27 e4@5]/2", // D F#m D
  K: "[g2,g3,b3,d4]", L: "c#4!2, [a2,a3,e4]", M: "[~@15 a3, d3@12 f#4 e4 d4@2, d4@11 a4@5, f#4@5 d5@3, a4@9 e5@7]/2",
  N: "[g2,d3,g3,b3]", O: "a3@5 a3@2 a3, [g2,e3,c#4]", P: "a3@2 a3@3 ~@2 a3, [f#2,c#4], e4@3 e4, ~@5 a3@2 ~",
  Q: "d4@3 ~@4 f#4, [b2,a3], f#4@11 e4@5, ~@3 d4@5, ~ a4", R: "g3@3 g3@2 g3@2 g3, [g2,b3,d4]", S: "[a2,a3,c#4,e4]@15 ~",
  T: "[g2,g3,b3,d4]!2", U: "[d2,a3,d4,f#4]!2", V: "[[a1,a2]@19 ~@5]/3", W: "[f#2,a3,c#4,e4] [a#2,a#3,c#4,e4]",
  X: "d4@2 ~@9 a4@3 g4 ~, [g2,g3,b3]@15 ~, ~@2 d4@4 d4@9 ~, ~@2 g4@5 ~, ~@8 d5@7 ~", // G
  Y: "[d2,a3,d4,f#4]@7 ~ [b1,b3,d#4,f#4,b4]@7 ~", Z: "[[e2,e3]@5 ~@3]/2",
})).s("gm_piano").gain(0.36)

// bass · synth bass 1
const bass = note(`<
  ~@25 A B C D A B C@2 A B C D A B C@2 A@2 E D A B A C B@8 A B C D A B C@2 A@2 E D A B A F G D G H B D G@2 B@2 I H B D
  B@2 G@2 H@2 J@2 D@2 B@2 G D G H B D G@2 B D K H B D G D G H B D G@2 B D K H B D G D G H B D G@2 B D K H B D L ~
>`.pickRestart({
  A: "g1!2 ~ g1 ~@2 g1!4 ~ g1!2 ~ g1!2", B: "a1!2 ~ a1 ~@2 a1!4 ~ a1!2 ~ a1!2", C: "d2!2 ~ d2 ~@2 d2!4 ~ d2!2 ~ d2!2",
  D: "b1!2 ~ b1 ~@2 b1!4 ~ b1!2 ~ b1!2", E: "f#1!2 ~ f#1 ~@2 f#1!4 ~ f#1!2 ~ f#1!2",
  F: "d2!2 ~ d2 ~@2 d2!2 b1!2 ~ b1!2 ~ b1!2", G: "e2!2 ~ e2 ~@2 e2!4 ~ e2!2 ~ e2!2",
  H: "c#2!2 ~ c#2 ~@2 c#2!4 ~ c#2!2 ~ c#2!2", I: "g#1!2 ~ g#1 ~@2 g#1!4 ~ g#1!2 ~ g#1!2",
  J: "c2!2 ~ c2 ~@2 c2!4 ~ c2!2 ~ c2!2", K: "g#1!2 ~ g#1 ~@2 g#1!2 c2!2 ~ c2!2 ~ c2!2", L: "e1",
})).s("gm_synth_bass_1").gain(0.41)

// other · tenor sax
const tenor_sax = note(`<
  ~@7 A B C@3 D E F G H@2 I J K L@3 M ~@8 N O@2 ~ N P@2 ~ Q@2 R S T@2 U V ~@8 N O@2 ~ N P@2 ~ W@2 X S T@2 U V Y Z@2 AA
  AB AC@2 ~ AD@2 AE AF AG@2 AH AI AJ@2 AK@2 AL@2 ~@26 AD@2 AE AF AG@2 AH AM ~@14
>`.pickRestart({
  A: "~@3 c4", B: "c4 ~ c4@5 ~@9", C: "[~ d4@2 ~ c4@2 ~ d4@2 a4@2 ~ a4@14 ~ g4@2 ~ f4@4 e4@5 ~@7 c4@2]/3",
  D: "~ c4@4 c4 ~@2 c4@4 e4@2 d4@2", E: "~@13 d4@2 ~", F: "d4@2 ~ a4@2 a4@11", G: "~ g4@7 ~@8",
  H: "[~@7 c5@11 ~ b4@2 ~@2 g4 ~ f4@5 ~@2, ~@11 a4 ~@4]/2", I: "~@3 f4@2 g4 ~ a4 ~@2 g4@2 ~ g4@2 ~",
  J: "g4@2 e4@6 d4@2 ~ c4@5", K: "~@9 c4 ~@2 c4@3 c4", L: "[~ c4@5 ~@3 e4@3 d4@6 c4@3 b3@5 ~@2 d4@2 ~ d4@17]/3",
  M: "c4@3 ~@5", N: "d4@4 d4 ~ d4@5 ~@5", O: "[~@2 e4@3 d4@2 ~ e4 ~ b4@2 ~@2 b4@6 ~ a4 g4 ~ f#4@3 ~@5]/2",
  P: "[e4@4 d4@2 e4@3 ~ b4@10 a4@7 ~@5]/2", Q: "[d5@6 ~ c#5@2 b4@2 a4 ~ g4@6 ~@7 g4@2 a4 ~ b4 ~]/2",
  R: "a4@2 a4 ~ a4 ~ a4 ~ f#4@3 ~ e4@2 d4@2", S: "~@14 d4 ~",
  T: "[d4@3 ~ d4 ~ d4@2 ~@4 f#4@2 e4@5 ~ d4@2 c#4@2 ~@6 e4@2]/2", U: "e4@15 ~", V: "d4 ~",
  W: "[d5@6 ~ c#5@2 d5@2 c#5 ~ d5@6 ~@7 c#5 ~ e5@2 d5 ~]/2", X: "a4@2 a4 ~ a4 ~ a4 ~ a#4@3 ~ a#4@2 f#4@2",
  Y: "e4@3 ~ e4 ~ e4@5 ~ g#4@2 f#4@2", Z: "[~@6 e4 ~ f#4@2 c#5 ~@3 c#5@8 b4@6 ~@4]/2", AA: "~@14 e5 ~",
  AB: "e5@4 d#5 ~ e5@4 d#5 ~ e5@2 ~@2", AC: "[~@8 d#5@2 ~ f#5@2 e5@2 b4@7 ~@10]/2",
  AD: "[e5@6 ~ d#5@2 ~ c#5 ~ b4@2 a4@6 ~@6 a4 ~ b4@2 c#5 ~]/2", AE: "b4@2 b4 ~ b4 ~ b4 ~ g#4@3 ~ f#4@2 e4@2",
  AF: "~@14 e4 ~", AG: "[e4@3 ~ e4 ~ e4@2 ~@4 g#4@2 f#4@5 ~ e4@2 d#4@2 ~@6 f#4@2]/2", AH: "f#4@15 ~",
  AI: "e4@4 ~@3 f#4", AJ: "[~ f#4@12 e4@8 ~@9 g#4@2]/2", AK: "[~ a4@13 g#4@6 ~@8 f#5@3 ~]/2", AL: "[f#5@7 e5@7 ~@2]/2",
  AM: "e4 ~",
})).s("gm_tenor_sax").gain(0.33)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@33 A B C@2 A B C@2 A D@2 E A B A F G@8 A B C@2 A B C@2 A H@2 E A B A I J E K@2 B E K@2 B L@2 M B E D@2 K@2 N@2 O@2
  P@2 D@2 Q@5 R@4 S@4 T U@5 R@4 S@4 T U@5 R@4 S@4 T V ~
>`.pickRestart({
  A: "g3", B: "a3", C: "d4/2", D: "a3/2", E: "b3", F: "d4", G: "[~ a3@127]/8", H: "[a3@3 a#3]/2", I: "d4 b3", J: "e4",
  K: "e4/2", L: "[b3@3 c4]/2", M: "c#4", N: "c#4/2", O: "c4/2", P: "b3/2",
  Q: "[[e4,g#4] [d#4,f#4] ~@2 a3, b3@3 c#4@2, ~@2 e4@3, ~@2 g#4@2 ~]/5", // E D#m
  R: "[[d#4,f#4] g#4@2 [a3,c#4], b3@3 ~, ~ e4@3]/4", S: "[[b3,f#4] c4 ~ a3, d#4 [c#4,e4], ~ g#3@2 ~]/4",
  T: "[b3,d#4,f#4]", U: "[~ [e4,g#4]@15 [d#4,f#4]@16 ~@32 a3@16, ~ b3@47 c#4@32, ~@2 e4@3, ~@2 g#4@2 ~]/5",
  V: "[e2,b2,e3]", // E5
})).s("gm_synth_strings_1").gain(0.26)

// other · synth brass 1
const synth_brass_1 = note("<~@25 A B@7 C ~@15 D E@3 F G@3 H ~@29 D E I J K L M N O P Q R S ~@43>".pickRestart({
  A: "~@3 a4 d4 ~ e4 ~ d4 a4 ~ d4 e4 ~ d4 a4", B: "d4 d5 d4 a4 d4 ~ e4 ~ d4 a4 ~ d4 e4 ~ d4 a4", C: "d4 d5 d4 ~@13",
  D: "~@3 a3 ~ a3 ~ a4 ~ a4 a3 ~ a3 a4 a3 a4", E: "a3 a4!2 a3 ~ a3 ~ a4 ~ a4 a3 ~ a3 a4 a3 a4",
  F: "a3 a4!3 ~ a4 ~ a5 ~ a5 a4 ~ a4 a5 a4 a5", G: "a4 a5!2 a4 ~ a4 ~ a5 ~ a5 a4 ~ a4 a5 a4 a5", H: "a4 a5!2 ~@13",
  I: "a3 a4!2 e4 ~ e4 ~ e5 ~ e5 e4 ~ e4 e5 e4 e5", J: "e4 e5!2 e4 ~ e4 ~ e5 ~ e5 e4 ~ e4 e5 e4 e5",
  K: "e4 e5!2 c#4 ~ c#4 ~ c#5 ~ c#5 c#4 ~ c#4 c#5 c#4 c#5", L: "c#4 c#5!2 c#4 ~ c#4 ~ c#5 ~ c#5 c#4 ~ c#4 c#5 c#4 c#5",
  M: "c#4 c#5!2 c4 ~ c4 ~ c5 ~ c5 c4 ~ c4 c5 c4 c5", N: "c4 c5!2 c4 ~ c4 ~ c5 ~ c5 c4 ~ c4 c5 c4 c5",
  O: "c4 c5!2 b3 ~ b3 ~ b4 ~ b4 b3 ~ b3 b4 b3 b4", P: "b3 b4!2 b3 ~ b3 ~ b4 ~ b4 b3 ~ b3 b4 b3 b4",
  Q: "b3 b4!2 a3 ~ a3 ~ b4 ~ b4 a3 ~ a3 b4 a3 b4", R: "a3 b4!2 a3 ~ a3 ~ b4 ~ b4 a3 ~ a3 b4 a3 b4", S: "a3 b4!2 ~@13",
})).s("gm_synth_brass_1").gain(0.26).pan(0.9)

// chords · pad poly
const pad_poly = note(`<
  ~@25 A@8 B C D E B C F@2 G@2 H E B C I@2 J@8 B C D E B C F@2 G@2 K E B C B L M N O@3 N P@2 Q@3 R@2 S T@4 U@4 V@4 ~@44
>`.pickRestart({
  A: "[[g2,g3] [a2,e4] d3 b2 g3 [a2,e4] d3@2, [a3,d4], ~@8 g2 ~@7]/8", B: "[g1,g2]", C: "[a1,a2]", D: "[d2,d3]",
  E: "[b1,b2]", F: "[d2,d3]/2", G: "[g1,g2]/2", H: "[f#1,f#2]",
  I: "[[g1,g2,g4,e5] [d2,d3], b4@9 ~@7, ~@16 [f#4,a4]@9 ~@7, ~@16 d5@7 ~@9]/2", J: "[a1,a2]/8",
  K: "[f#1,f#2] [a#1,a#2]", L: "d2 b1", M: "[e2,e3,e4]", N: "[b1,b2,f#4]", O: "[[e2,e3] [c#2,c#3] [a1,a2], e4]/3",
  P: "[e2,e3,e4,g#4]/2", Q: "[[e4,a4]@2 c#5 ~@2 c5, [a1,a2]@2 [g#1,g#2,d#4], ~ f#4@2, ~@3 b4@2 ~]/3",
  R: "[[c#2,c#3] [a1,a2], [e4,c#5]]/2", S: "e5 d#5, [b1,b2,f#4,b4]",
  T: "[[a2,a3,c#4]@2 ~ g#4, f#4@3 ~, ~ [e2,g#3,b3]]/4", U: "[[c#3,g#3,c#4,c#5] [c3,a3,c4,c5], e4@63 ~]/4",
  V: "[b2@31 ~ a2@32, [b3,d#4,f#4,b4]]/4", // B
})).s("gm_pad_poly").gain(0.3)

// other · tremolo strings
const tremolo_strings = note("<~@41 A B@2 C A B A D ~@24 E C F G B C F@2 H C I G J K ~@56>".pickRestart({
  A: "g3 ~@3 a4 ~ g3 ~@3 a4 ~ g3 ~ a4 ~", B: "a3 ~@3 a4 ~ a3 ~@3 a4 ~ a3 ~ a4 ~",
  C: "b3 ~@3 b4 ~ b3 ~@3 b4 ~ b3 ~ b4 ~", D: "d4 ~@3 a4 ~ d4 ~@3 a3 ~ d4 ~ a3 ~",
  E: "e4 ~@3 e5 ~ e4 ~@3 e5 ~ e4 ~ e5 ~", F: "e4 ~@3 e5 ~ e4 ~@2 e4 e5 ~ e4 ~ e5 ~",
  G: "c#4 ~@3 c#5 ~ c#4 ~@2 c#4 c#5 ~ c#4 ~ c#5 ~", H: "a3 ~@3 c#5 ~ a3 ~@3 c#5 ~ a3 ~ c#5 ~",
  I: "b3 ~@3 b4 ~ c4 ~@3 c5 ~ c4 ~ c5 ~", J: "a3 ~@3 b4 ~ a3 ~@3 b4 ~ a3 ~ b4 ~",
  K: "b3 ~@3 b4 ~ b3 ~@2 b3 b4 ~ b3 ~ b4 ~",
})).s("gm_tremolo_strings").gain(0.41).pan(0.1)

// other · string ensemble 1
const string_ensemble_1 = note("<~@99 A B C D A B E@2 ~@6 F G H I F G J@2 ~@6 F G H I F G J@2 ~@8>".pickRestart({
  A: "e5@3 g#5", B: "f#5 e5 f#5 c#6", C: "b5", D: "g#5", E: "[b5@15 ~]/2", F: "[e4,e5]@3 [g#4,g#5]",
  G: "[f#4,f#5] [e4,e5] [f#4,f#5] [c#5,c#6]", H: "[b4,b5]", I: "[g#4,g#5]", J: "[[b4,b5]@31 ~]/2",
})).s("gm_string_ensemble_1").gain(0.32).pan(0.1)

// drums · kick
const kick = s("bd").struct("<~@24 [x!4]!117 x ~>").gain(0.54)

// drums · clap
const clap = s("cp").struct("<~@49 [~ x ~ x]!8 ~@30 [~ x ~ x]!54 ~@2>").gain(0.6)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@9 A B C D E F G H I J K L M N B ~@24 O ~@7 O ~@15 O ~@39 O ~@13 O ~@13 O ~@2
>`.pickRestart({
  A: "~@15 x", B: "~@3 x!2 ~ x!2 ~@4 x!2 ~ x", C: "x ~@3 x ~ x!2 ~ x!2 ~ x!3 ~", D: "x!2 ~@4 x!2 ~ x!2 ~@3 x ~",
  E: "x!2 ~ x ~@3 x!2 ~ x!2 ~ x!2 ~", F: "x!2 ~ x!2 ~@3 x ~ x!2 ~ x ~@2", G: "~ x!2 ~ x!2 ~@4 x!2 ~ x!3",
  H: "~ x!2 ~ x!2 ~ x ~@3 x!2 ~ x!2", I: "~@4 x!2 ~ x!2 ~@3 x ~ x!2", J: "~ x!2 ~ x!3 ~ x!2 ~@4 x!2",
  K: "~ x!2 ~@3 x ~ x!2 ~ x ~@3 x", L: "x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@3", M: "x ~ x!2 ~ x ~@3 x!2 ~ x!2 ~@2",
  N: "~@2 x!2 ~ x!3 ~ x!2 ~ x!2 ~ x", O: "~@13 x ~@2",
})).gain(0.12)

// drums · hihat
const hihat = s("hh").struct("<~@25 [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!116 ~@2>").gain(0.42)

// drums · mid tom
const mid_tom = s("mt").struct("<~@56 [~@4 x!2 ~@2] ~@86>").gain(0.54)

// drums · open hat
const open_hat = s("oh").struct("<~@25 [~ x ~ x ~ x ~ x]!116 ~@2>").gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@56 [~@6 x!2 ~ x ~@6] ~@86>").gain(0.54)

// drums · tambourine
const tambourine = s("tb").struct("<~@25 [x!16]!116 ~@2>").gain(0.36)

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

// drums · shaker
const shaker = s("sh").struct("<~@25 [x!16]!116 ~@2>").gain(0.42)

stack(
  piano, bass, tenor_sax, synth_strings_1, synth_brass_1, pad_poly, tremolo_strings, string_ensemble_1, kick, clap,
  snare, snare_soft, hihat, mid_tom, open_hat, high_tom, tambourine, crash, shaker
)

More by Zero