Strudelify

Sulla mia strada

LIGABUE

KeyE majorTempo138 bpm
0:00/0:00
// Sulla mia strada — LIGABUE
// 138 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(138/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 finger
const bass = note(`<
  ~@4 A B C D A E C D A F C D A F C D G F C H A F C D A F C@2 I@2 J K I@2 J L G F C D A F C D G M C H A F C D A F C@2
  N@2 O P N@2 O L G F C D A F C D ~@8 Q@2 R L Q@2 R L G S C D A F C D G B T U G F T L V@3
>`.pickRestart({
  A: "e1!8", B: "g#1!4 e1 g#1 e1 g#1", C: "a1!8", D: "a1!3 e1 g#1 a1 g#1 a1", E: "g#1!8", F: "g#1!7 e1",
  G: "e1!6 f#1 g1", H: "a1!2 c#2 e2 a2!4", I: "b1@5 ~ b1@5 ~ b1@3 ~", J: "a1@5 ~ a1@5 ~ c2@2 e2@2", K: "a2@3 a2!5",
  L: "a2!8", M: "g#1!4 f#1 g#1 f#1 g#1", N: "b1@3 b1@3 b1@2", O: "a1@3 a1@3 c2 e2", P: "a2@3 a2 a2@2 a2@2",
  Q: "b1 b1@2 b1!2 b1@2 b1", R: "a1!6 c2 e2", S: "g#1!5 e1 g#1 e1", T: "a1!6 c#2 e2", U: "a2!6 g#2 a2",
  V: "[e1@47 ~]/3",
})).s("gm_electric_bass_finger").gain(0.56)

// other · overdriven guitar
const overdriven_guitar = note("<~@76 A@2 B@2 A@2 C D ~@16 E@4 F G E@2 H@3>".pickRestart({
  A: "[g#4@21 ~ g#4@2 a4@6 g#4@2]/2", B: "[g#4@21 ~ g#4@2 ~ a4@5 g#4@2]/2", C: "g#4", D: "a4 b4 a4 e4",
  E: "a4@4 g#4@3 ~ g#4@4 e4@4", F: "a4@4 g#4@4 a4@3 ~ b4@3 ~", G: "a4 g#4 a4 b4", H: "[[e3,b3]@15 ~]/3",
})).s("gm_overdriven_guitar").gain(0.44)

// other · tenor sax
const tenor_sax = note(`<
  ~@12 A B C D@2 E@3 ~@4 A B C F@2 G@3 H I@3 J K L M@2 N O P Q@3 R ~@4 S B T D@2 U@3 H I@3 J K L M@2 N O P Q@3 R ~@8 H
  I@3 J K L M@2 N O P Q@3 R ~@11
>`.pickRestart({
  A: "~@3 g#4 a4@2 g#4 a4", B: "~@2 g#4@3 ~ b4@6 g#4 ~ a4@2", C: "~@2 g#4@2 ~@2 g#4 ~ b4@3 ~ g#4@2 a4@2",
  D: "[~@2 g#4@3 ~ g#4 ~ b4@4 g#4@2 a4@4 g#4@2 ~@2 g#4@2 b4@3 ~ g#4 ~ a4@2]/2",
  E: "[~@2 g#4@4 g#4 ~ b4@4 g#4 ~ a4@4 g#4@2 ~@2 g#4@2 b4@3 ~ g#4@2 a4@4 g#4@3 ~ f#4@3 ~ e4@4 ~@2]/3",
  F: "[~@2 g#4@3 ~ b4@4 ~@2 g#4@2 a4@4 g#4@2 ~@2 g#4@2 b4@3 ~ g#4 ~ a4@2]/2",
  G: "[~@2 g#4@4 g#4 ~ b4@4 g#4 ~ a4@4 g#4@2 ~@2 g#4@2 b4@3 ~ g#4@2 a4@4 a4 ~ g#4@3 ~ f#4@3 ~ e4@3 ~]/3",
  H: "d#5@8 b4@7 ~", I: "[a4@3 ~ g#4@4 a4@4 g#4@2 b4@13 ~ c5 ~ a4@11 ~@7]/3", J: "d#5@7 ~ b4@7 ~",
  K: "a4@4 g#4@4 a4@3 ~ g#4 ~ b4@2", L: "~@2 a4@7 ~@7", M: "[a4@2 g#4@2 a4@2 g#4 b4@2 g#4@2 ~ b4@2 g#4 a4]/2",
  N: "~@2 a4@2 g#4@3 ~ f#4@4 e4@4", O: "~@4 b4 g#4@2 a4", P: "~@2 g#4 ~ g#4@4 f#4@3 ~ g#4@4",
  Q: "[~@8 b4@4 g#4 ~ a4@6 ~@2 g#4 ~ b4@4 g#4 ~ a4@4 g#4@3 ~@3 b4@4 g#4@2 a4@2]/3", R: "~@2 a4@2 g#4@4 f#4@4 e4@3 ~",
  S: "~@3 g#4 b4@2 g#4 a4", T: "~@2 g#4@2 ~@4 b4@3 ~ g#4@2 a4@2",
  U: "[~@2 g#4@4 g#4 ~ b4@4 g#4 ~ a4@4 g#4@2 ~@2 g#4@2 b4@3 ~ g#4@2 a4@4 a4@2 g#4@3 ~ f#4@3 ~ e4@4]/3",
})).s("gm_tenor_sax").gain(0.4)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@3 A B C D E B C D F ~@8 G@4 ~@8 H I J K I@2 L@2 B C D E B C D F G@4 ~@8 H I J K I@2 L@2 B C D E B C D F ~@8 H I J K
  I@2 M@2 B C D E B C D F B C D E B C D F ~@3
>`.pickRestart({
  A: "~@7 [e2,b2,e3,g#3,b3,e4]", B: "[e2,b2,e3,g#3,b3,e4]@7 [e2,b2,e3,g#3,d#4]",
  C: "[e2,b2,e3,g#3,d#4]@14 ~ e4, ~@7 [e2,a2,e3,a3,c#4]", D: "[e2,a2,e3,a3,c#4,e4]@7 [e2,a2,e3,a3,c4,e4]",
  E: "~ e4@13 [e2,b2,e3,g#3,b3,e4]@2, [a2,a3,c4], [e2,e3]@7 ~", F: "~ e4@15, [e2,a2,e3,a3,c4]", G: "[e2,b2,e3]!8",
  H: "[f#2,b2,f#3,b3]@6 [f#2,b2,f#3,b3]@5 ~ [b2,f#3,b3]@4, ~@11 f#2@4 ~", // B5
  I: "[f#2,b2,f#3,b3]@3 [f#2,b2,f#3,b3]@3 [f#2,b2,f#3,b3]@2", J: "[e2,a2,e3,a3]@3 [e2,a2,e3,a3]@3 [e2,a2,e3,a3]@2",
  K: "[e2,a2,e3,a3]@6 ~ a3@5 [e2,a2,e3,a3]@4, ~@3 [e2,a2,e3]@3 ~@2", // A5
  L: "[[e2,a2,e3,a3]@6 [e2,a2,e3,a3]@6 [e2,a2,e3]@4 [e2,a2,e3] ~ [e2,a2,e3]@2 [e2,a2,e3,a3]@2 [e2,a2,e3,a3]@2 ~ e3 [e2,a2,e3]@2 ~ [a2,e3] ~ e2, ~@12 a3@8 ~@4 [e2,a2]@2 ~@3 [e2,a3]@3, ~@25 a3@4 ~ [a2,e3]@2]/2", // A5
  M: "[[e2,a2,e3,a3]@6 [e2,a2,e3,a3]@6 [e2,a2,e3]@4 [e2,a2,e3] ~ [e2,a2,e3]@2 [e2,a2,e3,a3] ~ [e2,a2,e3,a3]@2 ~ e3 [e2,a2,e3]@2 ~ [a2,e3] ~ e2, ~@12 a3@8 ~@4 [e2,a2]@2 ~@3 [e2,a3]@3, ~@25 a3@4 ~ [a2,e3]@2]/2", // A5
})).s("gm_distortion_guitar").gain(0.21)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  A@3 B C D E F G H I J K L M N K L M N A@3 O K L M N K L M P Q@2 R@2 Q@2 S@2 C D E F G H I T A@3 B K L M N K L M U Q@2
  R@2 Q@2 S@2 C D E F G H I V W@8 Q@2 R@2 Q@2 S@2 C D E F G H I F C D E F G H I X Y@3
>`.pickRestart({
  A: "[b3,e4]!8, a4 g#4 a4 b4", // E5
  B: "[b3,e4]@2 [b3,e4]@2 [b3,e4]@2 [b3,e4]@2 [b3,e4]@2 [b3,e4]@2 g#4 [e4,f4,g4] [a3,b3,c4,d4] [e3,f3,g3], a4 g#4 a4 ~", // E5 Em D7 Em
  C: "a4@3 g#4 g#4@3 e4", D: "e4@6 g#4@2 f#4@2 g#4@2 f#4@2 g#4 ~", E: "a4@6 g#4 ~ g#4@6 e4 ~",
  F: "e4@3 g#4 f#4 g#4 f#4 g#4", G: "b4@6 e4 ~ e4@5 ~ b4@2", H: "b4@6 e4@2 e4@6 a4 ~", I: "a4@6 g#4 ~ g#4@6 e4@2",
  J: "e4@3 g#4 g#4@3 ~", K: "[e2,e3,b3]", L: "[g#2,e3]@7 ~, b3", M: "[a2,e3,a3]@15 ~", N: "c4 e4 c4 e4, [a2,e3]",
  O: "[b3,e4]!5 [b3,e4]@3, a4 g#4 a4@2", P: "c4 e4 c4 e3, a2, e3@3 ~", Q: "b2/2", R: "a2/2",
  S: "[~@24 g#4@2 a4 ~ b4 ~ a4 ~, a2]/2", T: "e4@3 g#4 g#4@3 e4", U: "c4 e4 c4 e3, a2, e3@11 ~@5", V: "e4@3 g#4 g#4@4",
  W: "[e4@31 ~]/8", X: "e4@6 g#4 ~ g#4@5 ~ e4@2", Y: "b3/3",
})).s("gm_distortion_guitar").gain(0.48).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B C@8 A@3 B A@3 B A B A B A@3 B A@3 B C@8 A@3 B A@3 B D ~@7 A@3 B A@3 B
  A@3 B A@3 B A@3 B A@3 B D ~@2
>`.pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "x!2 ~ x ~ x ~ x", C: "x!4", D: "x",
})).gain(0.8)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A B ~@30 C@3 D C@3 E ~@20 C@3 F C@3 E ~@43>".pickRestart({
  A: "x!16", B: "x!9 ~@7", C: "~ x!5 ~ x!5 ~ x!3", D: "~ x!5 ~ x!5 ~ x ~@2", E: "~ x!3 ~ x!2 ~@9", F: "~ x!5 ~ x!5 ~@4",
})).gain(0.32)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@76 x ~@34>").gain(0.72)

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

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

stack(
  bass, overdriven_guitar, tenor_sax, distortion_guitar, distortion_guitar_2, kick, snare, snare_soft, pedal_hat,
  open_hat, crash
)

More by LIGABUE