Strudelify

Bar Mario

LIGABUE

KeyA♭ majorTempo136 bpm
0:00/0:00
// Bar Mario — LIGABUE
// 136 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 132 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(136/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.

// other · piano
const piano = note(`<
  ~@9 A B@2 C@2 D E@2 A C@4 F E@2 ~@8 A B@2 G@2 F E@2 A C@2 G@2 F H@2 ~@22 A C@2 G@2 I H@2 A C@2 J@2 F H@2 ~@12 K L M
  C@4 F H@2 A C@2 G@2 F N@2 ~@15
>`.pickRestart({
  A: "~ ab2 eb3 c3 db3@4", B: "[c3@3 db3@2 ab2@4 ab2 eb3 c3 db3@3 ab2]/2", C: "[c3@3 db3@2 ab2@4 ab2 eb3 c3 db3@4]/2",
  D: "c3@3 db3", E: "[c3 bb2 ab2@2 bb2@2 ab2@8 ~@2]/2", F: "c3@3 db3@5",
  G: "[c3@3 db3@2 c3 db3 c3@2 ab2 eb3 c3 db3@4]/2", H: "[c3@3 ab2@4 ~]/2", I: "c3@3 ab3 ab2 db3@3",
  J: "[c3@3 db3@6 ab2 eb3 c3 db3@4]/2", K: "~@2 db3 c3 db3 c3 db3 c3", L: "db3@2 c3 db3@2 c3 bb2@2",
  M: "ab2@2 eb3 c3 db3@4", N: "[c3@3 ab2@2 ~@3]/2",
})).s("gm_piano").gain(0.05)

// other · distortion guitar
const distortion_guitar = note("<A@2 ~@61 B@2 C@2 D@2 E@2 F@2 ~@59>".pickRestart({
  A: "[~@16 ab2 ~@15, ~@7 g2@2 ~@7]/2", B: "[ab4 eb5@2 ab4 eb5@2 ab4 eb5@2 ab4 eb5@2 [c5,db5] c5 bb4 ab4]/2",
  C: "[ab4@2 eb5@4 ab4@2 eb5@4 ab4@2 eb5@4 ab4@2 eb5@4 db5@2 c5@2 bb4@2 ab4 eb4]/2",
  D: "[f4@6 eb4@6 bb4@5 ~ db5 ~ c5@2 bb4@2 eb5@5 [db5,d5] [b4,c5] [eb4,bb4], ~@17 c5@2 ~@13]/2", // Dmaj7 Cmaj7 Eb5
  E: "[f4@3 eb4@3 bb4@7 ~ eb5@2]/2", F: "[db5@15 ~]/2",
})).s("gm_distortion_guitar").gain(0.56).pan(0.4)

// chords · piano
const piano_2 = note(`<
  ~@55 A B A C D B D C A ~@14 C A ~@6 C E ~@5 A B A C D B D C F G@2 H@2 G@2 H@2 G@2 H@2 G@2 I@2 ~@5 A B A C D B D C J
>`.pickRestart({
  A: "[eb4,ab4,c5]@15 ~", B: "[eb4,ab4,db5]@2 ~ [eb4,ab4,c5]@2 ~ [eb4,ab4,db5] ~",
  C: "[eb4,ab4,db5]@5 ~ [eb4,ab4,c5]@3 ~@3 [eb4,ab4,db5]@2 ~@2", D: "[eb4,ab4,db5]@15 ~", E: "[g4,bb4,eb5]@15 ~",
  F: "~ eb4 ~ eb4 ~ ab4@2 eb4, ~@2 ab4@2 eb4@3 ~",
  G: "[~ eb4 ~ ab4@2 eb4 ~ eb4@2 eb4 ~ eb4 ~ ab4@2 eb4, ab4@2 eb4@2 ~@2 ab4@3 ~ ab4@2 eb4@3 ~]/2",
  H: "[~ eb4 ~ ab4@2 eb4 ~ eb4@2 eb4 ~ eb4 ~ ab4@2 eb4, ab4@4 eb4@4 ~@4 ab4@5 ~@3 ab4@4 eb4@6 ~@2]/2",
  I: "[~ eb4 ~ ab4@2 eb4 ~ eb4@2 ~@7, ab4@4 eb4@4 ~@4 ab4@5 ~@15]/2", J: "[eb4,ab4,c5] ~@7",
})).s("gm_piano").gain(0.24).pan(0.7)

// chords · lead 5 charang
const lead_5_charang = note(`<
  A@3 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 B@2 C@2 D@2 F G F G H I F J F G F G H K F L M@2 N@2 ~@2 E@2 B@2
  C@2 O@2 E@2 B@2 C@2 O@2 P G F G H I F J F G F G H K F L M@2 N@2 ~@2 E@2 B@2 C@2 O@2 Q ~@14 R M@2 N@2 ~@2 E@2 B@2 C@2
  O@2 Q
>`.pickRestart({
  A: "[~@16 ab2 ~ ab2@2 ab3@2 ~@2 ab3@6 ~@2 ab2 ~ ab2 ~ ab3@2 ~@4 d3 ~ eb3@2 gb3@2, ~@7 g2@2 ~@6 g2@2 ~@2 db3@3 ~@2]/3",
  B: "[ab2@2 ab2@2 ab3@2 ~@2 ab3@5 ~@3 ab2 ~ ab2 ~ ab3@2 ~@4 d3 ~ eb3@2 gb3@2, ~@7 g2@2 ~@2 db3@3 ~@2]/2",
  C: "[db3@2 db3@2 ab3@2 ~@2 ab3@6 ~@2 db3 ~ db3 ~ ab3@2 ~@4 d3 ~ eb3@2 gb3@2, ~@7 c3@2 ~@2 db3@3 ~@2]/2",
  D: "[ab2@2 ab2@2 ab3@2 ~@2 ab3@6 ~@2 ab2 ~ ab2@2 ab3@2 ~@4 d3 ~ eb3@2 gb3@2, ~@7 g2@2 ~@2 db3@3 ~@2]/2",
  E: "[ab2@2 ab2@2 ab3@2 ~@2 ab3@6 ~@2 ab2 ~ ab2 ~ ab3@2 ~@4 d3 ~ eb3@2 gb3@2, ~@7 g2@2 ~@2 db3@3 ~@2]/2",
  F: "[ab2,eb3]@2 [ab2,eb3] ~ [eb3,ab3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [eb3,ab3] ~ [ab2,eb3]@2 [eb3,ab3] ~", // Ab5
  G: "[ab2,eb3] ~ [ab2,eb3] ~ [eb3,ab3] ~ [ab2,eb3]@2 [ab2,eb3] ~ [eb3,ab3] ~ [ab2,eb3] ~ [eb3,ab3] ~", // Ab5
  H: "db3@2 db3 ~ ab3 ~ db3 ~ db3 ~ ab3 ~ db3@2 ab3 ~", I: "db3@2 db3 ~ ab3 ~ db3@2 db3 ~ ab3 ~ db3 ~ ab3 ~",
  J: "[ab2,eb3]@2 [ab2,eb3] ~ [eb3,ab3] ~ [ab2,eb3]@2 [ab2,eb3] ~ [eb3,ab3] ~ [ab2,eb3] ~ [eb3,ab3] ~", // Ab5
  K: "db3 ~ db3 ~ ab3 ~ db3@2 db3 ~ ab3 ~ db3 ~ ab3 ~",
  L: "[ab2,eb3]@2 [ab2,eb3] ~ [eb3,ab3] ~ [ab2,eb3]@2 [ab2,eb3] ~ [eb3,ab3] ~ [ab2,eb3] ~ [eb3,bb3,eb4]!2", // Ab5 Eb5
  M: "[eb3,bb3,eb4]/2", N: "[[db3,ab3,db4]@31 ~]/2",
  O: "[db3@2 db3@2 ab3@2 ~@2 ab3@6 ~@2 db3 ~ db3@2 ab3@2 ~@4 d3 ~ eb3@2 gb3@2, ~@7 c3@2 ~@2 db3@3 ~@2]/2",
  P: "[ab2,eb3] ~ [ab2,eb3] ~ [eb3,ab3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [eb3,ab3] ~ [ab2,eb3]@2 [eb3,ab3] ~", Q: "ab2 ~@7",
  R: "~@14 [eb3,bb3,eb4]!2", // Eb5
})).s("gm_lead_5_charang").gain(0.48)

// bass · electric bass finger
const bass = note(`<
  ~@25 A@3 B C D A E A F A B C D A E A F A B C D A@2 G@2 H@2 ~@2 A@3 B C@3 I A E A B C D C I A F A B C D A E A F A B C D
  A@2 G@2 H@2 ~@2 A@3 B C@3 I J@2 K@2 L@2 M@4 K@2 L@2 N@2 G@2 H@2 ~@2 A@3 B C@3 I O
>`.pickRestart({
  A: "ab1!8", B: "ab1!7 c2", C: "db2!8", D: "db2!7 c2", E: "ab1!5 eb2 f2 eb2", F: "ab1!5 f1 gb1 g1", G: "[eb2@31 ~]/2",
  H: "db2/2", I: "db2!2 f1!2 gb1!2 g1!2", J: "[ab1@12 ~ eb2!2 f2]/2", K: "[ab2@13 eb2 f2 eb2]/2",
  L: "[db2@25 ~ eb2@2 eb2@2 f2@2]/2", M: "[ab2@13 eb2!2 f2]/2", N: "[ab2@13 ~@3]/2", O: "ab1 ~@7",
})).s("gm_electric_bass_finger").gain(0.49)

// chords · rock organ
const rock_organ = note(`<
  ~@24 A B@4 C@2 D@2 ~@16 E@2 F@2 ~ A B@4 G@4 B@4 H@4 I@16 E@2 F@2 ~ A B@4 G@4 ~@8 J K@2 L@2 K@2 M E@2 F@2 ~ A B@4 G@4 N
>`.pickRestart({
  A: "~@13 gb4 [ab4,bb4,c5] [db5,eb5,f5,gb5]", B: "[eb5,ab5,eb6]/4", C: "[[db5,ab5,db6]@31 [f5,gb5]]/2",
  D: "[[eb5,ab5,eb6]@28 [eb5,ab5] [bb4,c5,db5,f5,gb5] [eb4,f4,gb4,ab4] [c4,db4]]/2", E: "[g5,bb5,eb6]/2",
  F: "[f5,ab5,db6]/2", G: "[[db5,ab5]@61 gb4 [ab4,bb4,c5] [db5,eb5,f5,gb5], [db6,eb6]@63 ~]/4",
  H: "[[db5,ab5,db6,eb6]@60 [eb5,ab5] [bb4,c5,db5,f5,gb5] [eb4,f4,gb4,ab4] [c4,db4]]/4", // Dbsus2 Ab5 Gbmaj7 Fm7 Dbmaj7
  I: "[~@16 db6 ~@11 db6 ~@19 db6 ~@11 db6 ~@31 db6 ~@3 c6@16 db6@6 ~@6 db6 ~@3, ab6, eb6@64 f6@33 ~@21 c6@10, c6@11 c6@5 c6@11 c6@16 c6@5 eb6@16]/8",
  J: "[ab5,c6]@5 ~@11", K: "[c6@2 ~ c6@2 ~ db6@2 c6@2 ~@6, ab5@5 ~@3, db6 ~@31]/2",
  L: "[c6@2 ~ c6@2 ~ c6@2 c6@2 ~@6, ab5@21 ~@11, db6 ~@11 db6 ~@19]/2", M: "c6@2 ~ c6@2 ~ c6@2, ab5, db6 ~@11 db6 ~@3",
  N: "[eb5,ab5,eb6] ~@7", // Ab5
})).s("gm_rock_organ").gain(0.22).pan(0.6)

// chords · piano
const piano_3 = note(`<
  ~@55 A B A C D B D C A ~@14 C A ~@6 C E ~@5 F G F H I G I H F ~@21 A B A C D B D C J
>`.pickRestart({
  A: "[eb4,ab4,c5]@15 ~", B: "[eb4,ab4,db5]@2 ~ [eb4,ab4,c5]@2 ~ [eb4,ab4,db5] ~",
  C: "[eb4,ab4,db5]@5 ~ [eb4,ab4,c5]@3 ~@3 [eb4,ab4,db5]@2 ~@2", D: "[eb4,ab4,db5]@15 ~", E: "[g4,bb4,eb5]@15 ~",
  F: "[eb5,ab5,c6]@15 ~", G: "[eb5,ab5,db6]@2 ~ [eb5,ab5,c6]@2 ~ [eb5,ab5,db6] ~",
  H: "[eb5,ab5,db6]@5 ~ [eb5,ab5,c6]@3 ~@3 [eb5,ab5,db6]@2 ~@2", I: "[eb5,ab5,db6]@15 ~", J: "[eb4,ab4,c5] ~@7",
})).s("gm_piano").gain(0.27).pan(0)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@101 A@16 ~@15>".pickRestart({
  A: "[ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 [ab3,eb4] [ab3,ab4] [ab3,eb4], ~ [ab3,eb4]@2 ~ [ab3,eb4]@2 ~ [ab3,eb4]@2 ~ [ab3,eb4]@2 ~@4, ~@4 ab4@5 ~ ab4@5 ~ ab4@5 ~ ab4@5 ~@5]/2", // Ab5 Ab Ab5
})).s("gm_electric_guitar_clean").gain(0.34)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@33 A B A B C D A B A B A B C E A B ~@22 F B A B C D A B A B A B C E A B ~@45
>`.pickRestart({
  A: "ab2@2 ab2 ~ ab3 ~ ab2 ~ ab2 ~ ab3 ~ ab2@2 ab3 ~", B: "ab2 ~ ab2 ~ ab3 ~ ab2@2 ab2 ~ ab3 ~ ab2 ~ ab3 ~",
  C: "db3@2 db3 ~ ab3 ~ db3 ~ db3 ~ ab3 ~ db3@2 ab3 ~", D: "db3 ~ db3@2 ab3 ~ db3@2 db3 ~ ab3 ~ db3 ~ ab3 ~",
  E: "db3 ~ db3 ~ ab3 ~ db3@2 db3 ~ ab3 ~ db3 ~ ab3 ~", F: "ab2 ~ ab2 ~ ab3 ~ ab2 ~ ab2 ~ ab3 ~ ab2@2 ab3 ~",
})).s("gm_electric_guitar_muted").gain(0.27)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B C B A B C B C B C B D B C B C B C B E ~ A F A F A F A G A F A F A F A H A F A F A F A G I@3 J ~@2 K F A F K
  F@2 L A F@2 M A F@2 N A F A F A F A H A F A F A F A O I@3 P ~ Q K F A F K F R ~ S T S T S T S ~ D F A K D F A G I@4 S
  U K F A F K F@2 ~ S
>`.pickRestart({
  A: "x!2", B: "x ~@2 x ~ x ~@2", C: "x!2 ~ x!2 ~@3", D: "x!2 ~@2 x ~@3", E: "x!2 ~ x!2 ~@2 x", F: "x ~@3 x!2 ~ x",
  G: "x!2 ~ x ~@4", H: "x ~ x!2 ~ x ~@2", I: "x!4", J: "x ~ x ~ x ~@2 x", K: "x ~@3 x!2 ~@2", L: "~@2 x ~@3 x!2 ~@8",
  M: "~@7 x", N: "~ x ~@2", O: "x ~ x ~@4 x ~@8", P: "x ~ x ~ x ~ x!2", Q: "~ x!2 ~ x!2 ~ x", R: "x ~@7 x ~ x ~@4 x",
  S: "x", T: "~@5 x ~ x", U: "~@3 x ~@4",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~ A@3 B A@3 B A B A B A B A B A B A B A B A C A@7 D A@7 E A@7 F ~@4 G H A@7 I A@3 G A@3 J A@7 E A@7 K ~@4 G L A@7 M
  A@7 N A@3 O A@3 P ~@3 Q G R A@7 S ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "x!4 ~@2 x!4 ~@2 x!4", D: "~@4 x ~@3 x!3 ~ x!4", E: "~@2 x ~@5 x ~@3 x ~ x!2",
  F: "~@4 x ~@3 x!2 ~@4 x!2", G: "x", H: "x ~@2 x", I: "x ~@3 x ~@3 x!3 ~@2 x!3", J: "x!4 ~ x!5 ~ x!5",
  K: "~@4 x ~@3 x!2 ~@6", L: "x ~@2 x ~@2 x ~", M: "x!4 ~@12", N: "~@2 x ~@2 x!3", O: "~@4 x ~@7 x ~ x!2",
  P: "~@4 x ~@2 x!2 ~@7", Q: "x ~@3 x ~ x ~@2 x ~@2 x ~ x!2", R: "~ x", S: "x!2 ~@2 x!6 ~@6",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@120 [~@2 x!2 ~@4 x ~@7] ~@8 [~@15 x] [~@2 x!2 ~@12] ~>").gain(0.48)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@33 A B C A@2 B C D A B C A@2 B C E F@3 G H ~@17 A B C A@2 B C D A B C A@2 B C E F@3 G H ~@25 F@3 G H ~@10
>`.pickRestart({
  A: "x!6 ~ x", B: "x!2 ~ x!3 ~ x", C: "x!8", D: "x!6 ~@2", E: "x!3 ~@2 x ~@2", F: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2",
  G: "~@2 x!2 ~@2 x!2 ~@8", H: "x",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 A ~@23 B ~@5 C ~@7 D ~@3 E ~@3 B ~@15 F ~@13 G ~@15 H ~@13 I ~>".pickRestart({
  A: "~@5 x ~@4 x!2 ~@4", B: "~@5 x ~@2", C: "~@7 x!2 ~@7", D: "~@3 x", E: "~ x!6 ~", F: "~@12 x!2 ~@2",
  G: "~@7 x!6 ~@3", H: "~@11 x!4 ~", I: "~@12 x!4",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@33 A B ~ A@2 B ~ A@2 B ~ A@2 B ~ C D@3 E ~ A ~@16 A B ~ A@2 B ~ A@2 B ~ A@2 B ~ C D@3 E ~@26 D@3 E ~@11
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@3 x ~@2 x ~", D: "x!4", E: "x ~ x ~ x!3 ~",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@7 A ~@7 B ~@29 B ~@31 C ~@13 D ~@15 E ~@5 F ~@7 C ~>".pickRestart({
  A: "~@6 x!2", B: "~ x ~@2", C: "~@10 x!2 ~@4", D: "~@4 x!3 ~@9", E: "~@9 x!2 ~@5", F: "~@5 x ~@2",
})).gain(0.72)

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

// drums · ride
const ride = s("rd").struct("<~@25 A@8 ~@22 A@16 ~@22 A@8 ~@22 A@8 ~>".pickRestart({
  A: "x!8",
})).gain(0.48)

stack(
  piano, distortion_guitar, piano_2, lead_5_charang, bass, rock_organ, piano_3, electric_guitar_clean,
  electric_guitar_muted, kick, snare, snare_soft, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride
)

More by LIGABUE