Strudelify

Miss Mondo '99

LIGABUE

KeyA minorTempo115 bpm
0:00/0:00
// Miss Mondo '99 — LIGABUE
// 115 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 16 distortion guitar (copy of ch 3 electric guitar clean)
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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 D A B C D E F G D A B C D H I J K L M N O P Q R S T U V S A B C D A B C D E F G D A B C D H I J K L M N O P
  Q R J K L M N O P Q R W V X Y W V Z AA@3 ~
>`.pickRestart({
  A: "a1@3 b1@3 c2@2", B: "g1@3 e2@5", C: "f1@15 ~", D: "c2@5 ~ c2 ~ b1@5 ~ b1@2", E: "a1@5 ~ a1@9 ~",
  F: "g1@5 ~ g1@8 ~@2", G: "f1@5 ~ f1@9 ~", H: "d2@5 ~ d2@8 a1 ~", I: "d2@5 ~ d2@4 a2@2 d3@4",
  J: "c2@4 c2@2 c2@3 ~ c2 ~ c2 ~ c2@2", K: "f1@4 f1 ~ f1@4 f1 ~ f1 ~ f1 ~", L: "a1@4 a1 ~ a1@3 ~ a1@2 a1 ~ a1 ~",
  M: "g1@3 ~ g1@2 g1@4 g1 ~ g1@2 e1@2", N: "e2@3 ~ e2@2 e2@3 ~ e2@2 d2@2 e2@2", O: "f2@3 ~ f2@2 f2@3 ~ f2@2 f2@2 g1@2",
  P: "a2@2 g2 a2@2 g2 e2!2", Q: "d2@2 c2 d2@2 c2 a1 g1", R: "d2@2 c2 d2@2 c2 a1 e1",
  S: "c2@2 c2@2 c2 ~ c2@2 b1@2 b1 ~ b1@2 e1@2", T: "a1@2 g1 a1@2 a1!2 g1", U: "c2@2 c2@2 c2 ~ c2@2 b1@2 b1 ~ b1@2 b1@2",
  V: "a1@2 g1 a1@2 g1 a1 g1", W: "c2@2 c2 ~ c2 ~ c2@2 b1 ~ b1@2 b1 ~ b1@2",
  X: "c2@2 c2 ~ c2 ~ c2@2 b1@2 b1@2 b1@2 e1@2", Y: "b2@2 c3 g3@4 e1", Z: "c2@2 c2 ~ c2 ~ c2@2 b1@2 b1@2 b1@2 b1@2",
  AA: "[a1@5 ~ a2@41 ~]/3",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@4 A B A B C@4 D@4 E F G@6 H@3 I@4 J K@4 L@2 M@6 D@4 E F N@6 O@3 I@4 J K@4 I@4 J K@4 L@2 P@2 Q@6 ~
>`.pickRestart({
  A: "~ e4 g4 e4 ~@3 b3, c4@2 b3 g4, ~@5 g3@3", B: "a3 ~ e4 d4@2 ~ c4@2, ~@2 g3@7 ~ g3@5 ~",
  C: "[~@2 e4@2 g4@2 e4@2 ~@8 d4@6 c4@4 a3@5 ~ c4@6 ~@10 d4@6 ~@6 f3@4, c4@8 b3@4 g4@3 [a2,e3]@17 ~@6 b3@9 a3@10 ~ a3@6, ~@10 g3@6 ~@15 [g2,d3]@15 f3@13 ~@5, ~@7 b3 ~@8 g3@8 ~@3 c4@5]/4", // A5 G5
  D: "[~@4 c4@4 ~@4 c4@3 ~ d4@6 c4@4 a3@5 ~ c4@6 ~@10 d4@6 ~@6 f3@4, c3@7 ~ b2@7 [a2,e3]@17 g3@15 a3@10 ~ a3@6, ~@2 g3@6 ~@2 g3@6 ~@15 [g2,d3]@15 f3@13 ~@5, ~@19 b3@5 ~@3 c4@5]/4", // A5 G5
  E: "~ c4 ~ c4, c3@7 ~ b2@8, ~ g3@3 ~ g3@3", F: "c4@3 b3@5, [a2,e3]@15 ~",
  G: "[~@4 c4@2 d4@4 c4@2 a3@3 ~@5 a3@4 g3@8 ~@4 c4@4 ~@4 c4@3 ~ d4@6 c4@4 a3@5 ~ c4@6 ~@10 d4@6 ~@6 f3@4, [g2,d3]@16 c3@15 ~ c3@7 ~ b2@7 [a2,e3]@17 g3@15 a3@10 ~ a3@6, ~@2 a3@4 ~@9 f2@18 ~ g3@7 ~ g3@6 ~@15 [g2,d3]@15 f3@13 ~@5, ~@35 b3@5 ~@3 c4@5]/6", // G5 A5 G5
  H: "[~@4 c4@4 ~@8 d4@31 ~, c3@7 ~ b2@7 [g3,a3]@32 ~, ~ g3@3 ~ g3@2 d3@16 ~, ~@3 c4 ~@8]/3", // Gsus2
  I: "~ g4@2 ~ g4@2 ~ g4, c4@5 ~ c4@5 ~ c4@4", J: "~ d5@2 ~ d5@2 g4 d5, g4@2 ~ g4@2 ~@3",
  K: "[~@2 c5@4 g4@2 ~@2 g4 ~@4 g3@3 a3@2 ~@22 g4@4 ~@2 g4@4 ~@2 g4@4 ~@2 g4@4, g4@4 ~@4 c5@4 g4@3 d4@7 c4@9 a3@33, ~@7 a2@8 d3@17, ~@14 c5@2 ~@4 g3@8 ~ g3@2 d4@8 ~ d4@5 ~ d4@6 d4@5 ~ d4@6, ~@16 g4@5 ~@11]/4",
  L: "[b3@2 c4@2 g4@2 b3@2 c4@2 g4@4 [d4,e4] ~@3 c4@4 b3@4 g3@5 ~, ~@15 d4@17]/2", // Dsus2
  M: "[b3@2 c4@2 g4@2 b3@2 c4@2 g4@4 [d4,e4] ~@3 c4@4 b3@4 g3@4 [d4,e4] ~@3 c4@4 b3@4 g3@5 ~ d4@6 c4@4 a3@5 ~ c4@6 ~@10 d4@6 ~@6 f3@4, ~@15 d4@14 ~@2 d4@16 [a2,e3]@16 [g2,d3]@15 f3@13 ~@5, ~@64 g3@15 a3@10 ~ a3@6, ~@35 b3@5 ~@3 c4@5]/6", // Dsus2 A5 G5
  N: "[~@4 c4@2 d4@4 c4@2 a3@3 ~@5 a3@4 g3@8 ~@10 d4@2 c4@3 ~ d4@6 c4@4 a3@5 ~ c4@6 e4@2 g4@2 ~@6 d4@6 ~@6 f3@4, [g2,d3]@16 c3@15 ~ c3@6 e4@4 ~@5 [a2,e3]@17 ~@10 e5@5 a3@10 ~ a3@6, ~@2 a3@4 ~@9 f2@17 g4@4 a4@13 ~@21 b3@10 ~@6 c4@10, ~@34 g3@6 b2@8 ~@15 [g2,d3]@15 f3@13 ~@5, ~@36 c4@5 ~ g3@6 ~@16 g3@16 ~@16]/6", // G5 A5 G5
  O: "[~@4 [c4,f4]@4 ~@8 d4@31 ~, c3@7 ~ b2@7 [g3,a3]@32 ~, e4 ~ e4 [c4,d4] ~@8, ~ g3@3 ~ g3@2 d3@16 ~]/3", // F5 Gsus2 Csus2
  P: "[b3@2 c4@2 g4@2 b3@2 c4@2 g4@4 [d4,e4] ~@3 c4@4 b3@4 g3@6, ~@15 d4@17]/2", // Dsus2
  Q: "[b3@2 c4@2 g4@2 b3@2 c4@2 g4@4 [d4,e4] ~@3 c4@4 b3@4 g3@4 d4 e4 ~@2 c4@4 b3@4 g3@4 d4 e4 ~@2 c4@4 b3@42, ~@15 d4@14 ~@2 d4@14 ~@2 d4@49]/6", // Dsus2
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.6)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@24 A B@2 C D E F G H I J@2 K@5 ~@15 A B@2 C D E F G H I J@2 L D E F G H I J@2 M@6 N@4 ~
>`.pickRestart({
  A: "~@7 [a2,d3]", B: "[[a2,d3]@7 [a2,d3]@2 [a2,d3,a3,d4]@2 [a2,d3,a3,d4]@2 [a2,d3,a3,d4]@3, a3@9 ~@7]/2",
  C: "[c3,e3,g3,c4,e4]", D: "[f2,c3,f3,g3,c4,f4]", E: "[e2,a2,e3,a3,c4,e4]@3 [e2,a2,e3,a3,c4,e4]@5",
  F: "[g2,b2,d3,g3,b3]@3 [g2,b2,d3,g3,b3]@5", G: "[e2,b2,e3,g3,b3,e4]",
  H: "[f2,c3,f3,g3,c4,f4]@3 [f2,c3,f3,g3,c4,f4]@5", I: "[e2,a2,e3,a3,c4,e4]@5 [a2,e3,a3,c4,e4]@3, ~@10 e2@3 ~@3",
  J: "[[a2,d3,a3,d4,g4]@3 [a2,d3,a3,d4]@4 [a2,d3,a3,d4]@4 [a2,d3,a3,d4,g4]@5, ~@3 g4@8 e2@4 ~]/2", // Dsus4 D5 Dsus4
  K: "[~@57 a3@6 ~@15 a3@2, [c3,e3,g3]@3 e2 c4@12, g2@11 ~@4 a2@16 ~ c3@16 [e2,a2]@15 [g2,c3]@6 e2@11, ~@2 c4@16 a3@20 e3@10 ~@6 e3@9 ~ e3@6 a2@10, ~@16 e3@16 g2@8 g3@14 ~@11 g3@8 ~ e3@6]/5", // C A5 C5
  L: "[c3,e3,g3,c4,e4], g2@11 ~@5", // C
  M: "[c3@2 ~@6 c4@7 ~@73 e4@7 [g2,c3,e3], g2@12 ~@3 [a2,e3]@17 [g2,c3]@9 c4@9 a3@14 [c3,e3]@15 e2@15 ~@2, e3@4 e3@11 e2@9 e4@28 c4@20 g3@8 [a2,e3]@15 ~, ~@2 c3@14 ~@6 c4@16 g3@9 e2@7 e4@32 c4@10, ~@6 g3@9 ~ a3@19 e3@13 [a2,e3]@15 g2@10 c4@10 ~ a3@12]/6", // C A5 C5 C A5
  N: "[~@15 c4@6 ~@2 c4@40 ~, g3@6 a2@14 ~ a2@42 ~, ~ c4@9 a3@11 ~@43, ~@5 e2@58 ~, ~@7 e3@14 ~ [e3,a3]@42]/4", // A5
})).s("gm_distortion_guitar").gain(0.14)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@25 A@2 B C D E F C D G@2 H@2 I@2 J ~@16 A@2 B C D E F C D G@2 B C D E F C D G@2 K@4 L@2 M N@3 ~
>`.pickRestart({
  A: "[d3,a3,d4,g4]/2", B: "[c3,c4,e4,g4]", C: "[f2,a3,c4,g4]", D: "[a2,a3,c4,g4]", E: "[g2,c4,d4,g4]",
  F: "[e2,b3,d4,g4]@15 ~", G: "[[d3,a3,d4,g4]@31 ~]/2", H: "[c3@8 b2@8 a2@15 ~, [g3,c4,e4]]/2",
  I: "[c3@7 ~ b2@8 a2@16, [g3,c4,e4]]/2", J: "c3 b2, [g3,c4,e4]", K: "[c3 b2 a2@2, [c4,e4,g4]]/2",
  L: "[c3 b2 a2@2, [c4,e4,g4]@31 ~]/2", M: "c3@7 ~ b2@8, [c4,g4]", N: "[g4@11 ~ g3@33 ~@3, [a2,c4,e4]@15 ~]/3",
})).s("gm_synth_strings_1").gain(0.32)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@84 [~ x ~@6] ~@3>").gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<A@35 B A@31 B A@8 B A@7 C ~@3>".pickRestart({
  A: "x!4", B: "x ~ x ~ x!3 ~", C: "x",
})).gain(0.48)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@9 A B A B A B A B A B A B A B A B A B A B A B A B A B A@2 B A B A@2 B A B A B A B A B A B A B A B A B A B A B A B A
  B A@2 B A B A B A B A@2 B A B A B A ~@4
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~ x",
})).gain(0.56)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@9 A B A B A B A B A B A B A B A B A B A B A B A B A B A@2 B A B A@2 B A B A B A B A B A B A B A B A B A B A B A B A
  B A@2 B A B A B A B A@2 B A B A B A ~@4
>`.pickRestart({
  A: "~@9 x ~@6", B: "~@9 x ~@3 x ~@2",
})).gain(0.32)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<A B A B A B A B A ~@79>".pickRestart({
  A: "~@5 x ~ x", B: "~@5 x ~@2",
})).gain(2.07)

// drums · jingle bells · soft notes
const jingle_bells_soft = s("sleighbells:4").struct("<A B A B A B A B A ~@79>".pickRestart({
  A: "~@9 x ~@3 x ~@2", B: "~@9 x ~@6",
})).gain(1.04)

stack(
  bass, electric_guitar_clean, distortion_guitar, synth_strings_1, kick, snare, low_tom, open_hat, crash, tambourine,
  tambourine_soft, jingle_bells, jingle_bells_soft
)

More by LIGABUE