Strudelify

Piccola stella senza cielo

LIGABUE

KeyD majorTempo116 bpm
0:00/0:00
// Piccola stella senza cielo — LIGABUE
// 116 bpm, 4/4, key D 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 114 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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 · electric bass pick · "Basso"
const bass = note(`<
  A B C D E B F G H I F J H I F J H I F J H I F J K L M N K L M N K L M N K L M N K L M N K L M N K L M N K L M N K L M
  N K L M N K L M N K L M N K L M N O P Q R O P Q R K L M N K L M N K L M N K L M N K L M N K L M N K L M N ~@2
>`.pickRestart({
  A: "b2 ~ b2@2 ~@10 g2 ~", B: "g2 ~ g2@2 ~@12", C: "d2 ~ d2 ~@13", D: "a2 ~ a2 ~@5 [g2,g#2] ~ g2 ~@5",
  E: "b2 ~ b2 ~@11 g2 ~", F: "d2 ~ d2@2 ~@12", G: "a2 ~ a2@2 ~@4 g2 ~ g2@2 ~@4", H: "b1 ~ b1@2 ~@10 g1 ~",
  I: "g1 ~ g1@2 ~@12", J: "a1 ~ a1@2 ~@4 g1 ~ g1@2 ~@4", K: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ a1 ~",
  L: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ b1 ~", M: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  N: "a1 ~ a1 ~ a1 ~ a1 ~ g1 ~ g1 ~ g1 ~ g1 ~", O: "b1 ~@2 b1 ~@2 b1@6 ~@4", P: "g1@2 ~ g1@2 ~ g1@7 ~@3",
  Q: "d2 ~@2 d2@2 ~ d2@9 ~", R: "a1 ~@2 a1@2 ~ a1 ~ g1@7 ~",
})).s("gm_electric_bass_pick").gain(0.4)

// chords · piano
const piano = note("<~@84 A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@2>".pickRestart({
  A: "[b3,d4,f#4]@11 ~ [b3,d4,f#4]@2 ~@2", B: "[g3,b3,d4]@11 ~ [g3,b3,d4]@2 ~@2",
  C: "[a3,d4,f#4]@12 [a3,d4] ~@3, ~@6 f#4 ~", D: "[c#4,e4,a4]@3 ~ [b3,d4,g4]@3 ~",
})).s("gm_piano").gain(0.54)

// chords · electric guitar clean · "Clean"
const electric_guitar_clean = note("<A@3 B C@6 ~@14 D E@8 F@8 G@16 H@2 I@6 E@8 J@5 ~@26 K@6 L@4>".pickRestart({
  A: "[d4@3 a4@3 ~@13 e4@3 d4@2, ~@12 d4@23 ~@13, ~@32 f#4@9 ~@7]/3", B: "~@3 d4@5, c#4",
  C: "[d4@3 a4@3 d4@10 ~@3 e4@3 ~@5 d4@16 ~@5, ~@16 f#4@6 d4@5 ~@21, ~@3 c#4@2 ~]/6",
  D: "~@3 d4, b3, ~ d4@5 ~@2, ~@3 b4@5",
  E: "[~@2 d4@3 ~@29 d4@3 ~@25 d4@2, g3@16 a3@5 g4@14 ~@5 d3@12 g3 g4 d4@2 b3 d4@2 b4@5, ~ b3@5 b3@11 a4@8 d4@2 b4@15 a3 d4@6 a4@15, ~@4 d3@6 g3 d4 b3@3 d4 g3@8 a3@8, ~@10 a3 d4@7 e4@15 b3@5 b3@12 e4@14]/8",
  F: "[~@4 d4@6 ~@58 d4@6 ~@38 [b4,d5,f#5]@3 [b4,d5,f#5]@3 [b4,d5,f#5]@3 [b4,d5,f#5]@2 [b4,d5,f#5]!4 d5, g3@16 a3@5 g4@14 ~@5 d3@12 g3 g4 d4@10, ~ b3@5 b3@11 a4@8 d4@2 b4@15 a3 d4@6 a4@15, ~@4 d3@6 g3 d4 b3@3 d4 g3@8 a3@8, ~@10 a3 d4@7 e4@15 b3@5 b3@12 e4@14]/8", // Bm
  G: "[[g4,b4,d5] ~@2 [g4,b4,d5]@3 [g4,b4,d5]@3 [g4,b4,d5]@2 [g4,b4,d5]!3 [b4,d5] ~ [a4,d5,f#5] ~@2 [a4,d5,f#5]@3 [a4,d5,f#5]@3 [a4,d5,f#5]@2 [a4,d5,f#5]!3 d5 ~ [a4,c#5,e5] ~@2 [a4,c#5,e5]@2 [a4,c#5,e5] [c#5,e5] ~ [g4,b4,d5] ~@2 [g4,b4,d5] ~ [g4,b4,d5]!2 [b4,d5] [b4,d5,f#5]@3 [b4,d5,f#5]@3 [b4,d5,f#5]@3 [b4,d5,f#5]@2 [b4,d5,f#5]!4 ~ [g4,b4,d5] ~@2 [g4,b4,d5]@3 [g4,b4,d5]@3 [g4,b4,d5]@2 [g4,b4,d5]!3 [b4,d5] ~ [a4,d5,f#5] ~@2 [a4,d5,f#5]@3 [a4,d5,f#5]@3 [a4,d5,f#5]@2 [a4,d5,f#5]!3 d5 ~ [a4,c#5,e5] ~@2 [a4,c#5,e5]@2 [a4,c#5,e5] [c#5,e5] ~ [g4,b4,d5] ~@2 [g4,b4,d5] ~ [g4,b4,d5]!2 [b4,d5] [b4,d5,f#5]@3 [b4,d5,f#5]@3 [b4,d5,f#5]@3 [b4,d5,f#5]@2 [b4,d5,f#5]!4 d5, ~@14 g4@3 ~@13 [a4,f#5]@3 ~@5 a4@3 ~@6 g4@17 ~@14 g4@3 ~@13 [a4,f#5]@3 ~@5 a4@3 ~@6 g4@17, ~@15 [b4,d5]@2 ~@14 d5@2 ~@6 [c#5,e5]@2 ~@22 d5@2 ~@14 [b4,d5]@2 ~@14 d5@2 ~@6 [c#5,e5]@2 ~@23]/8", // G Bm D A C#m G Bm G …
  H: "[[g4,b4,d5] ~@2 [g4,b4,d5]@3 [g4,b4,d5]@3 [g4,b4,d5]@2 [g4,b4,d5]!3 [b4,d5] ~ [a4,d5,f#5] ~@2 [a4,d5,f#5]@3 [a4,d5,f#5]@3 [a4,d5,f#5]@2 [a4,d5,f#5]!3 d5!2, ~@14 g4@3 ~@13 [a4,f#5]@2, ~@15 [b4,d5]@2 ~@15]/2", // G Bm D Bm
  I: "[[a4,c#5,e5] ~@2 [a4,c#5,e5]@2 [a4,c#5,e5] [c#5,e5] ~ [g4,b4,d5] ~@2 [g4,b4,d5] ~ [g4,b4,d5]!2 ~@21 d4@6 ~@50 d4@4, ~@6 a4@3 ~@6 g4@19 b3@10 b3@22 a4@8 g4@2 d4@4 b3@2 d4@4 b4@10, ~@7 [c#5,e5]@2 ~@6 d5@32 ~ d3@24 g3@24, ~@15 b4@3 d4@4 b4@30 a3@2 d4@14 e4@28, ~@4 b3@3 d4 g3@8 a3@8]/6", // A C#m G C#m
  J: "[~@2 d4@3 ~@19 [b4,d5,f#5]@16, g3@16 a3@5 g4@16 ~@3, ~ b3@5 b3@11 a4@5 d4@16 ~@2, ~@2 d3@3 g3@4 ~, ~@10 a3 d4@7 e4@16 ~@6]/5", // Bm
  K: "[~@27 d4@5 ~@6 d4@10, d4@6 d4@16 d4@5 ~@5 d4@6 ~@10, ~@3 a4@16 e4@16 ~@13, ~@16 f#4@16 ~@3 a4@13, ~@3 c#4@2 ~]/6",
  L: "[~@11 d4@5 d4@16, f#4 ~, ~@3 e4@16 ~@13, ~@6 d4@5 ~@21, ~ c#4@2 ~]/4",
})).s("gm_electric_guitar_clean").gain(0.05)

// chords · electric guitar clean · "Clean" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@7 A@3 ~@14 B@16 C@2 ~@2 C@2 ~@2 C@2 ~@2 C@2 ~@2 C@2 ~@2 B@16 ~@38
>`.pickRestart({
  A: "[~ a4@2, ~@7 e4@16 ~, ~@15 [f#4,g4]@32 ~]/3", // Gmaj7
  B: "[~@2 f#4@3 ~@29 f#4@3 ~@17 f#3@10, ~@5 f#4@16 ~@16 f#4@16 ~@11, ~@11 g4@16 ~@16 g4@16 ~@5, ~@26 d4@11 ~@5 a3@6 ~@42 d4@11 ~@5 a3@6 ~@16, ~@17 f#3@5 f#3@16 ~@11 f#3@5 ~@10]/8",
  C: "[~@15 f#5@2 ~@15]/2",
})).s("gm_electric_guitar_clean").gain(0.02)

// other · overdriven guitar · "El guitar"
const overdriven_guitar = note("<~@84 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C ~@10>".pickRestart({
  A: "d4 ~ d4 ~ a4@2 d4@3 ~ d4@2 a4@2 d4 ~", B: "d4 ~ d4@2 a4@2 d4@3 ~ e4@4 f#4 ~",
  C: "~ e4@4 ~ f#4@2 e4@4 d4@3 ~, f#4 ~@7",
})).s("gm_overdriven_guitar").gain(0.17)

// other · tenor sax · "Sax"
const tenor_sax = note("<~@76 A B@3 ~@34>".pickRestart({
  A: "~@10 g#4 f#4@3 a4 ~, ~@11 a4 ~@4", B: "[e4@12 ~@2 d4 ~ f#4@2 a4@12 [f#4,a4] b4@6 ~ a4@9 b4, ~@15 e4@2 ~@31]/3",
})).s("gm_tenor_sax").gain(0.42)

// chords · baritone sax · "Sax"
const baritone_sax = note("<~@80 A@2 B@4 ~@28>".pickRestart({
  A: "[~ d5@3]/2", B: "[e5@6 d5@8 [d#5,e5] e5@3 a5@43 ~@3, d#5 ~@14 d5 ~@48]/4",
})).s("gm_baritone_sax").gain(0.54)

// chords · pad bowed · "Soundtrack"
const pad_bowed = note("<A@8 ~@16 A@8 ~@8 A@8 ~@12 A@8 ~@8 A@16 ~@22>".pickRestart({
  A: "[d3,f#3,b3]/8", // Bm
})).s("gm_pad_bowed").gain(0.03)

// drums · rim
const rim = s("rim").struct("<~@39 x ~@35 x ~@27 x ~@10>").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C D E@2 F@2 ~ E G H F@3 ~ I F ~ D@19 E D@15 J K@3 L K@3 L E L E K D E@2
  F@2 ~ E G H F@3 ~ I F J E M E M N M E M ~@2
>`.pickRestart({
  A: "x!2 ~@5 x", B: "x!2 ~@6", C: "x!2 ~@2 x!2 ~@2", D: "x ~@2 x!2 ~@2 x", E: "x ~@2 x!2 ~@3", F: "x!2",
  G: "x ~@3 x!2 ~@2", H: "x ~@3 x ~@2 x", I: "x", J: "~@4 x!2 ~@2", K: "x ~@2 x ~@2 x ~@9", L: "x ~@2 x ~@2 x ~ x ~@7",
  M: "x ~ x!2 ~@2 x ~ x ~@7", N: "~@3 x!2 ~@3",
})).gain(0.8)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@25 A@2 B@2 C A B D B@3 C E B F ~@49 A@2 B@2 C A B D B@3 C E B ~@11>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@3 x", C: "x ~@2 x!2 ~@2 x", D: "~@3 x ~@4", E: "~@3 x!2 ~@2 x", F: "~@8 x ~ x ~@4 x",
})).gain(0.48)

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A B A C D E@2 F A B A C D E@2 F A B A C D E C ~@53 A B A C D E@2 F A B A C ~@26
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~@5 x", C: "~@5 x ~@2", D: "~@3 x ~@3 x", E: "~ x ~ x ~ x ~@2", F: "~@3 x ~ x ~@2",
})).gain(0.16)

// drums · open hat
const open_hat = s("oh").struct("<~@59 [~ x] ~@54>").gain(0.64)

// drums · ride
const ride = s("rd").struct("<x ~@7 x ~@105>").gain(0.72)

// drums · china
const china = s("cr").struct(`<
  A ~@7 A ~@14 B A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@19 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 B ~@3 B A ~@3 A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A C D ~ E D C F A ~
>`.pickRestart({
  A: "x", B: "~ x", C: "~ x ~ x", D: "~@3 x", E: "x ~@2 x", F: "~ x ~@2",
})).gain(0.8)

// drums · lt
const lt = s("lt").struct("<~@83 [~@3 x] ~@30>").gain(0.72)

stack(
  bass, piano, electric_guitar_clean, electric_guitar_clean_2, overdriven_guitar, tenor_sax, baritone_sax, pad_bowed,
  rim, kick, kick_soft, snare, hihat, hihat_soft, open_hat, ride, china, lt
)

More by LIGABUE