Strudelify

Thanks

dai

KeyA majorTempo90 bpm
0:00/0:00
// Thanks — dai
// 90 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/2283531; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 48 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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.

// chords · piano
const piano = note("<A B C D A B C E ~ F ~@3 F ~@2 G H I J ~@2 I H ~@8 G H ~@4 G H K L M N ~@2 K L>".pickRestart({
  A: "[c#3,a3,c#4] [d3,f#3,a3]", B: "[c#3,a3,e4] [d3,f#3,a3]", C: "c#3 b2", D: "a2 c#3 e3 f#3 e2 a2 e3 f#3",
  E: "a2 c#3 e3 f#3 [a2,e3,a3]@4", F: "[g#2,b2,e3,g#3] [f#2,a2,c#3]", G: "[a2,c#3,e3] [a2,d3,f#3]",
  H: "[g#2,b2,e3] [f#2,a2,e3]", I: "[a2,c#3,e3] [a2,c#3,f#3]", J: "[g#2,b2,e3]@4 [f#2,a2,e3]@3 ~",
  K: "[a#2,d3,f3] [a#2,d#3,g3]", L: "[a2,c3,f3] [g2,a#2,f3]", M: "[a#2,d3,f3] [a#2,d3,g3]",
  N: "[a2,c3,f3]@4 [g2,a#2,f3]@3 ~", // F Gm7
})).s("gm_piano").gain(0.25)

// chords · piano · soft notes
const piano_soft = note("<~@8 A ~ B C D ~@2 E ~@3 F G H ~@2 I J K L M N O P ~@11 Q R S ~@2>".pickRestart({
  A: "d3 [e3,g#3]", B: "a3 e3", C: "a3 b3", D: "d4@15 ~", E: "~@2 [e2,g#2,b2] [c#2,g#2,c#3]", F: "~@14 a3 e4",
  G: "f#4@2 ~@2 a4@2 ~@2 a4 ~ f#4 ~ c#5@2 ~@2", H: "b4@2 ~@2 g#4@2 ~@2 a4 ~ e4 ~ c#4@2 ~@2", I: "[a2,c#3] [f#2,d3]",
  J: "[g2,b2] [e2,a2]", K: "[g2,b2] [d3,f#3]", L: "[e3,g#3] [c#3,f#3]", M: "a2 b2", N: "c#3 e3", O: "[e3,g#3] f#3",
  P: "a3 f#3 e3 g#3", Q: "~@14 a#3 f4", R: "g4@2 ~@2 a#4@2 ~@2 a#4 ~ g4 ~ d5@2 ~@2",
  S: "c5@2 ~@2 a4@2 ~@2 a#4 ~ f4 ~ d4@2 ~@2",
})).s("gm_piano").gain(0.15)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  ~@34
  [x!3 ~ x!5 ~ x!5 ~]
  [x!3 ~ x!3 ~ x!7 ~]
  [x ~ x ~ x!5 ~ x ~ x!4]
  [x ~ x ~ x!3 ~ x ~ x ~ x ~ x!2]
  ~@10
>`).gain(0.29)

stack(piano, piano_soft, woodblocks)