Strudelify
Balliamo sul mondo cover art

Ligabue

Balliamo sul mondo

LIGABUE

KeyD majorTempo160 bpm
0:00/0:00
// Balliamo sul mondo — LIGABUE
// 160 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 166 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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(`<
  ~@9 A B C@2 A B C@2 A B C@2 A B D E A B C@2 A B D E A B F E A B F E A B G H@3 A B I J A B I J A B C@2 A B D E A B C@2
  A B D E A B F E A B F E A B G H@3 A B I J A B I J A B I J A B I J K L M@2 K L M@2 K L M@2 K L M@2 N O F E N O F E N O
  F E N O G H A B F E A B F E A B G H@3 A B I J A B I J A B I J A B I J P@2 ~
>`.pickRestart({
  A: "d2!7 a1", B: "g1!3 g1@2 g1@2 b1", C: "[c2!3 c2@2 c2@4 a1 b1 a1 c2 a1 c#2 a1]/2", D: "c2!3 c2@2 c2@2 a1",
  E: "a1!8", F: "c2!7 b1", G: "c2!7 g2", H: "a2!8", I: "c2!8", J: "c2 a1 b1 a1 c2 a1 c#2 a1", K: "d2@7 a1",
  L: "g1@7 b1", M: "[c2@9 a1 b1 a1 c2 a1 c#2 a1]/2", N: "d2!7 f#2", O: "g2!7 d2", P: "d2/2",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@9 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 A@2 B@2 A@2 C@4 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 A@2 B@2 A@2 C@4 A@2 ~@6 A@2 B@2 A@2 B@2
  ~@32 A@2 B@2 A@2 B@2 A@2 C@4 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 D@2 ~
>`.pickRestart({
  A: "[[d4,f#4,a4]@3 [a3,d4,f#4]@4 [b3,d4,g4]@9]/2", B: "[[d4,e4,a4]@3 [d4,e4,f#4]@4 d4@4 c4@5, ~@7 [a3,e4]@9]/2",
  C: "[[d4,e4,a4]@3 [d4,e4,f#4]@4 d4@4 c4@20 ~, ~@7 [a3,e4]@24 ~]/4", D: "[d4,f#4,a4]/2",
})).s("gm_electric_guitar_clean").gain(0.33).pan(0.3)

// chords · pad warm · "il Cinque for"
const pad_warm = note(`<
  ~@33 A@2 B@2 A@2 B@2 A@2 C@4 A@2 B@2 A@2 B@2 ~@16 A@2 B@2 A@2 B@2 A@2 C@4 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@32 A@2 B@2
  A@2 B@2 A@2 C@4 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 D@2 ~
>`.pickRestart({
  A: "[d3 g3, a3]/2", B: "[e3,g3]/2", C: "[e3,g3]/4", D: "[d3,a3]/2",
})).s("gm_pad_warm").gain(0.4)

// chords · distortion guitar
const distortion_guitar = note(`<
  A B C B D B C B D B C B D B C B D E F G H E F I@2 J F K L J F I@2 B C B D B C B D B C B M@3 B C B D B C B N J F K L J
  F I@2 J F K L J F I@2 B C B D B C B D B C B M@3 O P@2 Q@7 R@2 S T U V W X ~@14 Y@2 Z@2 Y@2 Z@2 Y@2 Z@2 Y@2 Z@2 B C B D
  B C B D B C B M@3 B C B D B C B D B C B D B C B D AA@2 ~
>`.pickRestart({
  A: "~@7 d4", B: "a4 d4 g4 d4 f#4 d4 g4 d4", C: "f#4 d4 g4 f#4@2 d4@2 d4", D: "f#4 d4 g4 [c4,e4]@4 d4",
  E: "[d3,a3] ~ d3 ~ [d3,a3] ~ d3 ~ [d3,a3] ~ d3 ~ [d3,a3] ~ [a2,e3] ~", // D5 A5
  F: "[g2,d3] ~ g2 ~ [g2,d3] ~ g2 ~ [g2,d3] ~ g2 ~ [g2,d3] ~ b2 ~", // G5
  G: "[c3,g3] ~ c3 ~ [c3,g3] ~ c3 ~ [c3,g3] ~ c3 ~ [c3,g3] ~ a2 ~", // C5
  H: "[a2,e3] ~ a2 ~ [a2,e3] ~ a2 ~ [a2,e3] ~@3 [a2,e3] ~ a2 ~", // A5
  I: "[[c3,g3] ~ c3 ~ [c3,g3] ~ c3 ~ [c3,g3] ~ c3 ~ [c3,g3] ~ [a2,e3]@4 c#3@4 [a2,e3]@4 c#3@6]/2", // C5 A5
  J: "[d3,a3] ~ [d3,a3] ~ [d3,a3] ~ d3 ~ [d3,a3] ~ d3 ~ [d3,a3,d4]@2 [d3,a3,d4]@2", // D5
  K: "[c3,g3] ~ c3 ~ [c3,g3] ~ c3 ~ [c3,g3] ~ c3 ~ [c3,g3,c4]@2 [c3,g3,c4]@2", // C5
  L: "[a2,e3] ~ a2 ~ [a2,e3] ~ a2 ~ [a2,e3] ~ a2 ~ [a2,e3] ~ a2 ~", M: "[f#4 d4 g4 [c4,e4]@12 [d4,a4,d5]@9]/3",
  N: "f#4 d4 g4 [c4,e4]@4 ~", O: "[d4,a4,d5]@7 a3", P: "[c4@7 d5@8 a2]/2",
  Q: "[c3@14 a4@4 a4@2 g4 f4 d4@6 f4 g4 a4@4 a4@2 g4 f4 d4@6 f4 g4 a4@4 g4@2 f4@2 d4@6 d4@2 c4@4 a4@4 g4@4 d5@20 a5@16 f#4@2]/7",
  R: "[b4@6 c5@6 d5@18 [d4,g4]!2, g4@29 ~@3]/2", // G5
  S: "[d4,g4]@2 [d4,g4]!2 [d4,g4]@2 [d4,g4]!3 [d4,a4] [d4,a4]@3 [d4,g4]!3", // G5 D5 G5
  T: "[d4,g4]@2 [d4,g4]!2 [d4,g4]@2 [d4,g4]!3 [d4,a4] [d4,a4]@4 [d4,g4]!2", // G5 D5 G5
  U: "[d4,g4]@2 [d4,g4]!2 [d4,g4]@2 [d4,g4]!3 [d4,a4] [d4,a4]@4 d5!2", V: "d5@4 d5@4 d5@4 d5@2 d5!2",
  W: "d5@3 ~ d5@3 ~", X: "d5@3 ~@5", Y: "[d4@3 a4@3 g4@10]/2", Z: "[c4@3 c5@3 g4@10]/2", AA: "[d4,a4,d5]/2",
})).s("gm_distortion_guitar").gain(0.43).pan(0.6)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note(`<
  ~@17 A B C D A B E ~ F B E G F B E ~@23 F B E G F B E ~ F B E G F B E ~@96
>`.pickRestart({
  A: "~@2 a3 ~@3 a3 ~@3 a3 ~@5", B: "~@2 d3 ~@3 d3 ~@3 d3 ~@3 f#3 ~", C: "~@2 g3 ~@3 g3 ~@3 g3 ~@3 e3 ~",
  D: "~@2 e3 ~@3 e3 ~@3 [a2,e3] ~@3 e3 ~", E: "~@2 g3 ~@3 g3 ~@3 g3 ~@5", F: "~@6 a3 ~@3 a3 ~@5",
  G: "~@2 e3 ~@3 e3 ~@3 e3 ~@3 e3 ~",
})).s("gm_distortion_guitar").gain(0.24).pan(0.6)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@20 B@2 ~@15 A ~@20 B@2 ~@8 C ~@3 C ~@47 B@2 ~@19>".pickRestart({
  A: "~@7 x", B: "x!2 ~@2 x!2 ~@2", C: "x",
})).gain(0.64)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@45 [x ~@3 x!2 ~@2]!2 ~@36 [x ~@3 x!2 ~@2]!2 ~@60 [x ~@3 x!2 ~@2]!2 ~@19>")
  .gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@2 A B A B A B ~@8 A ~@7 C ~@20 D@2 ~@7 E ~@7 C ~@20 D@2 ~@7 F ~@3 F ~@3 G ~ A B A B A B ~@2 A B A B A B ~@4 H ~@3 H
  ~@3 H ~@16 D@2 ~@19
>`.pickRestart({
  A: "~@7 x", B: "x", C: "~@5 x ~@2", D: "~ x ~ x", E: "~@5 x ~ x", F: "~@15 x", G: "~@12 x!4", H: "~@6 x!2",
})).gain(0.48)

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

// drums · high tom
const high_tom = s("ht").struct("<~@100 [~@10 x!2 ~@4] ~@65>").gain(0.64)

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

// drums · ride
const ride = s("rd").struct("<~@85 A B A B A B@3 C B A B@4 D ~@65>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x ~ x!2", D: "x!3 ~",
})).gain(0.72)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@85 A B A B A B@2 C D B A B@4 E ~@65>".pickRestart({
  A: "~@3 x ~ x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~@2", D: "~ x ~@3 x ~ x", E: "~ x ~ x ~@4",
})).gain(0.4)

stack(
  bass, electric_guitar_clean, pad_warm, distortion_guitar, distortion_guitar_soft, kick, snare, low_tom, low_tom_soft,
  hihat, mid_tom, open_hat, high_tom, crash, ride, ride_soft
)

More by LIGABUE