Strudelify

witchcraft

Jeremy Attard

KeyF minorTempo85 bpm
0:00/0:00
// witchcraft — Jeremy Attard
// 85 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 "Trombone" trombone (copy of ch 1 "Alto Saxophone" alto sax)
// note: Transcription provider: pdmx. https://musescore.com/score/772481; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 87 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(85/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 · trumpet · "Bb Trumpet"
const trumpet = note(`<
  ~@16 A@8 B C B D B C B E ~@8 A@8 B C B D B C B E ~@14 B C B D B C B E B C B D B C B E F
>`.pickRestart({
  A: "[~@2 f4@2 ab4@2 eb5 c5@3 ab4@2 g4@2 f4 bb4@3 ab4@2 bb4@2 c5 f4@5 eb5!2 f5@2]/2",
  B: "~@3 f4 g4 f4 eb4 f4 ~@2 g4@2 ab4@4", C: "~@3 f4 g4 f4 eb4 f4 db5@2 c5 bb4 c5@2 ab4@2",
  D: "~@3 f4 g4 f4 eb4 f4 ~@2 db5@2 c5@2 ab4@2", E: "f4@8 db5@3 eb4@5", F: "f5 ~@7",
})).s("gm_trumpet").gain(0.3)

// chords · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note(`<
  A B A B A B A B C D E F B A B C G H G H G H G H I J I@3 J I K ~@4 L@4 G H G H G H G H I J I@3 J I K ~@4 L@4 ~@2 M N M
  N I J I@3 J I K I J I J I J I K J
>`.pickRestart({
  A: "f2 c3 c4 ab3 db3 ab3 eb4 c4", B: "eb3 ab3 eb4 bb3 bb2 f3 c4 bb3", C: "f3 ab3 eb4 ab3 f3 ab3 eb4 ab3",
  D: "eb3 bb3 eb4 bb3 eb3 bb3 eb4 bb3", E: "eb3 ab3 c4 ab3 eb3 ab3 c4 ab3", F: "eb3 ab3 eb4 ab3 eb3 bb3 f4 bb3",
  G: "[f2,c3,f3]!8 [db3,ab3,db4]!8", H: "[eb2,bb2,eb3]!8 [bb2,f3,bb3]!8", I: "[f2,c3,f3] ~@3 [f2,c3,f3] ~@3",
  J: "[f2,c3,f3] ~@7", K: "[f2,c3,f3]!8 [db3,ab3,db4]!3 [eb2,bb2,eb3]!5",
  L: "ab3@2 ab4 ab3 c5@2 ab4@2 ab3@2 ab4 ab3 c5@2 ab4@2",
  M: "[f2,c3,f3] ~@2 [f2,c3,f3] ~@4 [db3,ab3,db4] ~@2 [db3,ab3,db4] ~@4", // F5 Db5
  N: "[eb2,bb2,eb3] ~@2 [eb2,bb2,eb3] ~@4 [bb2,f3,bb3] ~@2 [bb2,f3,bb3] ~@4", // Eb5 Bb5
})).s("gm_electric_guitar_clean").gain(0.3)

// other · cello · "Violoncello"
const cello = note(`<
  ~@14 A B C D C D C D C D E F E G E F E H C D C D C D C D C D C D C D C D E F E G E F E H C D C D C D C D C D C D C D E
  F E G E F E H E F E G E F E H I
>`.pickRestart({
  A: "f2!4 g2!4", B: "ab2!4 bb2!4", C: "f2!8 db3!8", D: "eb2!8 bb2!8", E: "~@3 f3 g3 f3 eb3 f3 ~@2 g3@2 ab3@4",
  F: "~@3 f3 g3 f3 eb3 f3 db4@2 c4 bb3 c4@2 ab3@2", G: "~@3 f3 g3 f3 eb3 f3 ~@2 db4@2 c4@2 ab3@2",
  H: "f2!8 db3!3 eb2!5", I: "f2 ~@7",
})).s("gm_cello").gain(0.3)

// chords · epiano1 · "Electric Piano"
const epiano1 = note(`<
  ~@16 A@8 B C B D B C B E ~@8 A@8 B C B D B C B E ~@14 B C B D B C B F B C B G B C B H I
>`.pickRestart({
  A: "[f2!6 [f2,eb5] f2 db3!6 [db3,f4] db3 eb2!6 [eb2,c5] eb2 bb2!4 [bb2,eb5]!2 bb2!2, ~@2 f4@2 ab4@2 ~ c5@3 ab4@2 g4@2 ~ bb4@3 ab4@2 bb4@2 ~ f4@5 ~@2 f5@2]/2", // F7 Db Cm Eb5
  B: "[f2,c3,f3]@2 ~ f4 g4 f4 eb4 f4 [f2,c3,f3]@2 g4@2 ab4@4", // F5
  C: "[f2,c3,f3]@2 ~ f4 g4 f4 eb4 f4 db5@2 c5 bb4 c5@2 ab4@2", // F5
  D: "[f2,c3,f3]@2 ~ f4 g4 f4 eb4 f4 [f2,c3,f3]@2 db5@2 c5@2 ab4@2", E: "f2!8 db3!3 eb2!5",
  F: "[f2,c3,f3]!8 [db3,ab3,db4]!3 [eb2,bb2,eb3]!5", G: "[f2,c3,f3]@2 ~ f4 g4 f4 eb4 f4 ~@2 db5@2 c5@2 ab4@2",
  H: "[f2,c3,f3]!8 [db3,ab3,db4]!3 [eb2,bb2,eb3]!5, f4@8 db5@3 eb4@5", I: "[f2,c3,f3,f5] ~@7",
})).s("gm_epiano1").gain(0.3)

stack(trumpet, electric_guitar_clean, cello, epiano1)