Strudelify

Question

MihauDesu

KeyB♭ majorTempo88 bpm
0:00/0:00
// Question — MihauDesu
// 88 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5843445; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 33 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(88/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · slap bass 2 · "Voce"
const slap_bass_2 = note("<~@5 A B C D A B C E F G H I J K H I J K L M L N L M L N O ~>".pickRestart({
  A: "~ [f3,f4]!3 [f3,f4]@2 [f3,f4]!5 [f3,f4]@2 [f3,f4]!2 ~", // F
  B: "~ [g3,g4]!3 [g3,g4]@2 [g3,g4]!5 [g3,g4]@2 [g3,g4]!2 ~", // G
  C: "~ [bb3,bb4]!3 [bb3,bb4]@2 [bb3,bb4]!2 [bb3,bb4]@2 [bb3,bb4] [bb3,bb4]@2 [bb3,bb4] [bb3,bb4]@2", // Bb
  D: "[c4,c5] [d4,d5] ~@5 [bb3,bb4] [c4,c5] [d4,d5] ~@6", // C D Bb C D
  E: "[c4,c5] [d4,d5] ~@5 [bb3,bb4] [c4,c5] [d4,d5] ~@5 [bb3,bb4]", // C D Bb C D Bb
  F: "[c4,c5] [db4,db5] ~@5 [bb3,bb4] [c4,c5] [d4,d5] ~@5 [bb3,bb4]", // C Db Bb C D Bb
  G: "[c4,c5] [db4,db5]@2 [db4,db5]@2 [c4,c5] [bb3,bb4]@2 [f3,f4]@2 [g3,g4]@2 [bb3,bb4]@2 [c4,c5]@2", // C Db C Bb F G Bb C
  H: "[bb3,bb4] [c4,c5] [d4,d5] ~ [f4,f5] ~ [bb3,bb4] [c4,c5] [d4,d5] ~ [f4,f5] ~ [d4,d5] [c4,c5] [bb3,bb4]@2", // Bb C D F Bb C D F …
  I: "[a3,a4]@2 [g3,g4]@2 [a3,a4]@2 [bb3,bb4]!2 [c4,c5]@2 [bb3,bb4] ~ [d4,d5]@2 ~@2", // A G A Bb C Bb D
  J: "[bb3,bb4] [c4,c5] [d4,d5] ~ [f4,f5] ~ [bb3,bb4] [c4,c5] [d4,d5] ~ [f4,f5] ~ [bb3,bb4] [c4,c5] [d4,d5]@2", // Bb C D F Bb C D F …
  K: "[f4,f5]@2 [g4,g5]@2 [f4,f5]@2 [d4,d5] [c4,c5] [bb3,bb4] ~ [bb3,bb4] ~ [a3,a4]@2 [bb3,bb4] ~", // F G F D C Bb A Bb
  L: "[d4,d5] ~ [bb3,bb4] ~@2 [d4,d5] ~ [bb3,bb4] ~@3 [d4,d5]@2 [d4,d5] [bb3,bb4]@2", // D Bb D Bb D Bb
  M: "[a3,a4] ~ [g3,g4] ~@2 [a3,a4] ~ [g3,g4] ~@3 [a3,a4]@2 [a3,a4] [bb3,bb4]@2", // A G A G A Bb
  N: "[f4,f5]@2 [g4,g5]@2 [f4,f5]@2 [d4,d5] [c4,c5] [bb3,bb4]@2 [bb3,bb4]@2 [a3,a4]@2 [bb3,bb4]@2", O: "[f4,f5]",
})).s("gm_slap_bass_2").gain(0.5)

// other · overdriven guitar · "Chitarra elettrica"
const overdriven_guitar = note("<~ A B C@2 D E F ~ G E F ~@3 H I H I H I H I J@3 K J@3 K J L>".pickRestart({
  A: "c4 d4 bb4 ~ c5 d5 ~@2 c4 d4 g4 bb4@2 bb4 g4 f4", B: "c4 d4 bb4 ~ c5 d5 ~@2 c4 d4 g4 bb4@2 bb4 g4 d4",
  C: "c4 d4 bb4 ~ c5 d5 ~@2 c4 d4 g4 bb4@2 bb4 d5 d4", D: "f3", E: "e3@3 c4@3 e3@10", F: "eb3@3 bb3@3 eb3@10",
  G: "f3@3 bb3@3 f3@10", H: "[eb3,bb3] a3", I: "[d3,bb3] a3", J: "c4 d4 bb4 ~ c5 d5 ~@2 c4 d4 g4 bb4@2 bb4 c5 d5",
  K: "[f3,f4]@2 [g3,g4]@2 [f3,f4]@2 [d3,d4] [c3,c4] [bb2,bb3]@2 [bb2,bb3]@2 [a2,a3]@2 [bb2,bb3]@2", // F G F D C Bb A Bb
  L: "c4 d4 bb4 ~ c5 d5 c4 d4@9",
})).s("gm_overdriven_guitar").gain(0.3)

// bass · electric bass finger · "Basso elettrico"
const bass = note("<A B C D E F G H I F G J K L M B C D N B C O N P Q R S P Q R S B T>".pickRestart({
  A: "~@10 [g1,ab1,a1,bb1] [b1,c2,db2,d2,eb2,e2] [f2,gb2,g2] [db2,d2,eb2,e2] [a1,bb1,b1,c2] [g1,ab1]", // Abmaj7
  B: "eb1@2 eb1 eb1@2 eb1!3 eb1@2 eb1 eb1@2 eb1!3", C: "g1@2 g1 g1@2 g1!3 g1@2 g1 g1@2 g1!3",
  D: "eb2@2 eb2 eb2@2 eb2!3 f2@2 f2 gb2@2 gb2!3", E: "g1@2 g1 g2@2 g2 d2 c2 g1@2 g1 g2@2 g2 d2 c2", F: "g1@15 d2",
  G: "g2@15 d2", H: "g1@10 [g1,ab1,a1,bb1] [b1,c2,db2,d2,eb2,e2] [f2,gb2,g2] [db2,d2,eb2,e2] [a1,bb1,b1,c2] [g1,ab1]",
  I: "g1@2 g1 g1@2 g1 g1@2 g2@2 g2 f2@2 f2 d2 c2", J: "g1", K: "bb1 bb2 c3@2", L: "gb3@3 eb3@3 gb3@2 f3@3 d3@3 f2@2",
  M: "eb2@4 f1 g1 bb1 c2", N: "g1@2 g1 g1@2 g1!3 d2@2 d2 f2@2 f2 g2 d2", O: "eb1@2 eb1 eb1@2 eb1!3 f1@2 f1 gb1@2 gb1!3",
  P: "eb3!3 d3!3 c3!3 bb2!3 a2!2 bb2!2", Q: "g2!7 d2 g1!6 d2!2", R: "eb2!8 f2!4 gb2!4", S: "g1!11 a1!3 bb1!2",
  T: "g1@2 g1 g1@2 g1!2 g2@9",
})).s("gm_electric_bass_finger").gain(0.45)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@4 [~@15 x] ~@25 [~@15 x] ~@2>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~ A@3 B A@2 B C A@2 B ~@3 D@3 E D@3 F D@3 E D@3 F A G>".pickRestart({
  A: "x!16", B: "x!12 ~@4", C: "x!8", D: "~ x ~ x ~ x ~ x", E: "~ x ~ x ~ x ~@2", F: "~ x ~ x ~@4",
  G: "x ~ x ~ x!3 ~@9",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@2 B ~@3 B ~@10 B ~@7 C ~ D>".pickRestart({
  A: "~@13 x!2 ~", B: "~@14 x!2", C: "~@7 x", D: "~ x ~ x ~@12",
})).gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~@8 [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x] ~@24>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@7 A ~@3 B ~@10 B ~@7 A ~ C>".pickRestart({
  A: "~@13 x ~@2", B: "~@12 x!2 ~@2", C: "~ x ~ x ~@12",
})).gain(0.45)

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

stack(slap_bass_2, overdriven_guitar, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash)