Strudelify

La luce buona delle stelle

Ramazzotti

KeyB majorTempo123 bpm
0:00/0:00
// La luce buona delle stelle — Ramazzotti
// 123 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 122 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(123/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 B C@2 A B C@2 D E F G A B C@2 A B C@2 ~@4 H I H J K L M L N O M P Q R S R T U V@2 W R M L N O M P Q R S R T U V@2
  W R A B C@2 A B C@2 ~@4 H X H J K L M L N O M P Q R S R T U V@2 W R M L N O M P Q R S R T U V@2 Y R A B C@2 A B C@2 ~
>`.pickRestart({
  A: "[f#3,b3,d#4]@3 [a#3,c#4,f#4]", B: "[g#3,b3,e4]@3 [g#3,b3,e4]", C: "[f#3,b3,d#4]/2", D: "[e2,e3,g#3,b3]",
  E: "[f#2,f#3,a#3,c#4]", F: "[d#2,f#3,a#3,d#4]", G: "[g#2,g#3,b3,d#4]", H: "[g#3,b3,e4] [a#3,c#4,f#4]",
  I: "[b3,e4,g#4]@3 [a#3,c#4,f#4]", J: "[b3,e4,g#4]", K: "[f#3,a#3,d#4]", L: "[f#3,a#3,c#4]", M: "[f#3,b3,d#4]",
  N: "[e3,g#3,b3]@3 [g#3,b3,e4]", O: "[f#3,a#3,d#4] [f#3,a#3,c#4]", P: "[f#3,a#3,c#4]@3 [f#3,a#3,c#4]",
  Q: "[e3,g#3,b3]", R: "[f#3,a#3,d#4] c#4", S: "[c#4,e4,g#4]", T: "[d#4,f#4,a#4]", U: "[g#3,c4,e4] d#4",
  V: "[e3,g#3,b3,d#4]/2", W: "[e3,g3,b3]", X: "[b3,e4,g#4]@5 [a#3,c#4,f#4]@3", Y: "[e3,g3,b3]@7 ~",
})).s("gm_piano").gain(0.22)

// bass · fretless bass
const bass = note(`<
  ~@17 A B C@2 D E F G H I H J K@2 L M N O L M N P N Q R S T U V W L M N O L M N P N X R S T Y@2 Z AA@4 AB@2 G@2 D E F G
  H AC H AD AE@2 L M N O L M N P N Q R S T U V W L M N O L M N O N X R S T Y@2 Z A B AB@2 AF B AB@2 ~
>`.pickRestart({
  A: "b1@3 b1", B: "b1", C: "g#1/2", D: "e2", E: "f#2@3 c#2", F: "d#2", G: "g#1", H: "c#2 d#2", I: "e2@3 d#2",
  J: "e2 g#1", K: "f#1/2", L: "b1@13 ~ b1@2", M: "d#2@13 ~ d#2@2", N: "c#2@3 g#1", O: "f#1 f#2", P: "f#1@2 f#2 c#2",
  Q: "f#1 f#2 e2@2", R: "d#2@3 a#1", S: "g#1 f#1", T: "e1@14 e1 ~", U: "e1 b1 e2@2", V: "e1@11 ~ e1@3 ~",
  W: "f#1@3 f#1 f#2 c#2 a#1 f#1", X: "f#1 e2", Y: "[g#1@4 a#1@4 b1@4 e2@15 ~ e2@4]/2", Z: "f#2!2",
  AA: "[b1@27 f#2@5]/4", AB: "b1/2", AC: "e2@5 d#2@3", AD: "e2@5 g#1@3", AE: "[f#1@14 c#2 a#1]/2", AF: "b1@11 ~ b1@4",
})).s("gm_fretless_bass").gain(0.37)

// chords · pad warm
const pad_warm = note(`<
  ~ A@4 B@2 C@2 D E F G A@4 H I J@2 ~@10 K@2 L M N O L M P M Q R S@2 T M ~@34 K@2 L M N O L M ~@33
>`.pickRestart({
  A: "b2/4", B: "b2/2", C: "g#2/2", D: "[e2,e3,g#3,b3]", E: "[f#2,f#3,a#3,c#4]", F: "[d#2,d#3,f#3,a#3,f#5]",
  G: "[g#2,g#3,b3,d#4]", H: "[f#3,b3,d#4]@3 [a#3,c#4,f#4]", I: "[g#3,b3,e4]@3 [g#3,b3,e4]", J: "[f#3,b3,d#4]/2",
  K: "[[b3,d#4] [a#3,c#4], f#3]/2", L: "[e3,g#3,b3]", M: "d#4 c#4, [f#3,a#3]", N: "[f#3,b3,d#4]", O: "[f#3,a#3,c#4]",
  P: "[c#4,e4,g#4]", Q: "[a#3,d#4,f#4]", R: "e4 d#4, [g#3,c4]", S: "[e3,g#3,b3,d#4]/2", T: "[e3,g3,b3]",
})).s("gm_pad_warm").gain(0.25)

// other · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@21 A B C D E F E G H I ~@8 J K L M ~@13 K L N O ~ P@2 ~@8 A B C D E Q E R S T ~@41
>`.pickRestart({
  A: "~ b3 e4@2", B: "c#4@4 f#4@9 ~@3", C: "~@2 c#4@2 f#4@3 ~", D: "d#4@2 c#4@2 d#4@3 ~", E: "e4@8 f#4@7 ~",
  F: "~@3 b3@3 f#4@2, g#4@11 ~@5, ~ e3@5 ~@2, ~ g#3@2 ~", G: "g#4 g#3 b3 e4", H: "d#4", I: "c#4@9 ~@7", J: "g#4@15 ~",
  K: "d#4 c#4", L: "a#4 c#4@2 f#4", M: "e4@8 d#4@5 ~@3", N: "e4@4 d#4@2 f#4 d#4", O: "g#4@3 ~",
  P: "[~@8 b3@5 ~@3 f#4@8 ~@8, g4@7 ~@9, ~@4 e4@9 ~ e4@9 ~@9]/2", Q: "~@3 b3@2 f#4@3, g#4@2 g#3@3 ~@3, ~ e3@4 ~@3",
  R: "g#4@4 b3@4 e4@5 ~@3", S: "d#4@2 a#3@3 ~@3", T: "c#4@7 ~",
})).s("gm_acoustic_guitar_steel").gain(0.18).pan(0.3)

// chords · pad choir
const pad_choir = note("<~@47 A@2 B C D E B C F C G H I@2 J C ~@59>".pickRestart({
  A: "[[b3,d#4] [a#3,c#4], f#3]/2", B: "[e3,g#3,b3]", C: "d#4 c#4, [f#3,a#3]", D: "[f#3,b3,d#4]", E: "[f#3,a#3,c#4]",
  F: "[c#4,e4,g#4]", G: "[a#3,d#4,f#4]", H: "e4 d#4, [g#3,c4]", I: "[e3,g#3,b3,d#4]/2", J: "[e3,g3,b3]",
})).s("gm_pad_choir").gain(0.25)

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

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@17 A@4 ~@34 B C D E F@2 G D H@5 ~@29 I C B C I C B C B C D E F@2 G D J@8 ~
>`.pickRestart({
  A: "b5/4", B: "g#5", C: "a#5", D: "f#6", E: "g#6", F: "d#6/2", G: "e6", H: "[b5@13 ~@3]/5", I: "b5", J: "b5/8",
})).s("gm_string_ensemble_1").gain(0.16)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@19 A@3 ~@20 B@3 C ~@23 D@2 ~@21 E@2 ~@28>".pickRestart({
  A: "[~@14 d#4@21 ~@13, ~@6 a#3@29 ~@13, ~@10 b3@25 ~@13]/3", B: "[~ g#4@2, ~@3 f#4@8 ~, ~@7 d#4@16 ~]/3",
  C: "~ b3, g4, ~ e4@3", D: "[~@7 d#4@8 ~, ~@3 a#3@12 ~, ~@5 b3@10 ~]/2",
  E: "[~@16 g#4@13 ~@3, ~@12 f#4@17 ~@3, ~@14 d#4@15 ~@3]/2",
})).s("gm_electric_guitar_clean").gain(0.16)

// other · electric guitar jazz
const electric_guitar_jazz = note("<~@54 A B C@2 D ~@2 E F ~@41 A B C@2 D ~@2 G ~@10>".pickRestart({
  A: "a#3@15 ~", B: "g#3@5 ~@3", C: "a#3@5 ~@3", D: "g#3@7 ~ d#3@7 ~", E: "g3", F: "f#3@15 ~", G: "g3@3 ~",
})).s("gm_electric_guitar_jazz").gain(0.25).pan(0.3)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@113
  [~@2 b3 ~@3 b3 ~@3 b3 ~ b3 ~ b3 ~]!3
  [~@2 b3 ~@3 b3 ~@3 b3 ~ b3 ~ f#3 g#3]
  [~@2 b3 ~@3 b3 ~@3 b3 ~ b3 ~ b3 ~]!2
  ~@3
>`).s("gm_electric_guitar_muted").gain(0.3).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@17 A B A ~ A B A ~ A C A C A ~ A C A C A C A@3 C A C A C A C@3 A C A C A@2 C D@2 E D E D C A B A F ~@2 A@3 B A ~ C G
  C H A ~ A C A C A C A@3 C A I A C A C@3 I C A C A@2 C D@2 E D E D@2 I C A C A@3 ~@2
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x ~@6 x", D: "x ~@2 x ~@3 x", E: "x ~@2 x ~@2 x ~", F: "~@3 x ~@4", G: "x ~@4 x ~ x",
  H: "x ~@4 x ~@2", I: "x ~@2 x",
})).gain(0.52)

// drums · snare
const snare = s("sd").struct("<~@31 A@15 ~ A@16 ~@8 A ~ A ~ A ~ A ~ A ~ A@38 ~@3>".pickRestart({
  A: "~ x",
})).gain(0.52)

// drums · low tom
const low_tom = s("lt").struct("<~@29 A B ~@15 C ~@14 D E ~@16 A F ~@15 G ~@7 D ~@7 C ~@3 D ~@5>".pickRestart({
  A: "~@7 x", B: "~@2 x ~@4 x", C: "~@6 x!2", D: "~ x", E: "~ x ~@2 x ~@3", F: "x ~@6 x", G: "x!2 ~@5 x",
})).gain(0.52)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@31 A B@15 A B@7 A B@7 ~@18 A B@15 A B@7 A B@7 A B@5 C ~@2>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x",
})).gain(0.26)

// drums · open hat
const open_hat = s("oh").struct("<~@38 [~@7 x] ~@49 [~@7 x] ~@33>").gain(0.39)

// drums · mid tom
const mid_tom = s("mt").struct("<~@29 A B ~@15 C ~@32 D B ~@14 E B ~@15 D ~@3 F ~@5>".pickRestart({
  A: "~ x", B: "~@3 x", C: "~@3 x ~ x ~@2", D: "~@5 x ~@2", E: "~@6 x!2", F: "~ x ~@6",
})).gain(0.52)

// drums · crash
const crash = s("cr").struct("<~@17 A ~@13 A ~@15 A ~@7 A ~@7 A ~@17 A ~@15 A ~@7 A ~@7 A ~@8>".pickRestart({
  A: "x",
})).gain(0.39)

// drums · high tom
const high_tom = s("ht").struct("<~@46 [~ x] ~@48 [~@5 x ~@2] ~@26>").gain(0.52)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@43 A ~ A ~ A ~ A ~@44
>`.pickRestart({
  A: "~ x",
})).gain(0.52)

// drums · bongos
const bongos = s("bongo:4").struct("<~@31 [~ x]!32 ~@18 [~ x]!38 ~@3>").gain(0.86)

// drums · bongos
const bongos_2 = s("bongo:18").struct(`<
  ~@31
  [~@3 x ~@2 x ~]!32
  ~@18
  [~@3 x ~@2 x ~]!23
  [~@3 x ~@4]
  [~@3 x ~@2 x ~]!14
  ~@3
>`).gain(0.86)

// drums · congas
const congas = s("conga:13").struct("<~@31 [~ x ~@2]!32 ~@18 [~ x ~@2]!38 ~@3>").gain(1.26)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~ A@18 B C A@2 B C A@3 C A@2 ~@32 A@3 D A@2 B A E A E A E A E A@3 ~@41
>`.pickRestart({
  A: "x!4", B: "x!3 ~ x ~ x ~", C: "x ~ x!3 ~ x ~", D: "x ~ x ~ x ~ x!2", E: "x!2 ~ x",
})).gain(1.33)

// drums · guiro
const guiro = s("guiro:4").struct("<~@30 [~@7 x] ~@49 [~@13 x ~@2] ~@41>").gain(8.32)

stack(
  piano, bass, pad_warm, acoustic_guitar_steel, pad_choir, synth_strings_1, string_ensemble_1, electric_guitar_clean,
  electric_guitar_jazz, electric_guitar_muted, kick, snare, low_tom, pedal_hat, open_hat, mid_tom, crash, high_tom,
  tambourine, bongos, bongos_2, congas, cabasa, guiro
)

More by Ramazzotti