Strudelify

miasma

Ghost

KeyE majorTempo150 bpm
0:00/0:00
// miasma — Ghost
// 150 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 3/4 at bar 154, 2/4 at bar 155, 4/4 at bar 156, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 1 "Electric Guitar 1" named as a guitar, played on electric guitar clean (its church organ patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5754255; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 185 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Electric Guitar 2.
setcpm(150/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.

// chords · electric guitar clean · "Electric Guitar 1"
const electric_guitar_clean = note(`<
  ~@15 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 D@4 E@7 F@2 G H@2 I@2 J@2 K@2 L@2 I@2 M@2 N@2 D@4 E@7 F@2 G O@2 P@2 Q@2 R@2 O@2
  P@2 Q@2 R@2 D@4 E@7 F@2 G S@10 T@10 U V W@3 X Y Z@2 AA AB@5 AC@5 S@5 AD@3 AE AF AG@5 AH@5 AI@5 AJ@8 ~ AK@6
>`.pickRestart({
  A: "[a2!3 [e3,e5]@2 [d3,d5] [e3,e5]@4 [a2,a4] [b2,b4] [c3,c5] [d3,d5] [e3,e5] [f#3,f#5], a4@3 ~@13]/2", // E D E A B C D E …
  B: "[[g3,g5]@3 [f#3,f#5]@3 [e3,e5]@3 [d3,d5]@7]/2", // G F# E D
  C: "[[e2,e4]!3 [g3,g5]@2 [f#3,f#5] [g3,g5]@4 [e2,e4] [f#2,f#4] [g2,g4] [a2,a4] [b2,b4] [d3,d5]]/2", // E G F# G E F# G A …
  D: "[a4@6 b4 c5@7 d5 c5@8 b4@9, [f2,c3,f3]@7 [c3,g3,c4]@8 [g2,d3,g3]@17]/4", // F5 C5 G5
  E: "[[a2,e3,a3]!5 ~ [e3,b3,e4,b4] c5@7 d5 ~ [a2,e3,a3]!5 ~ [e3,b3,e4,g5] a5@7 b5 ~ [a2,e3,a3]!5 ~ [e3,b3,e4,d6] c6@7 d6 ~ [e3,b3,e4]!8, a4@6 ~ [f3,c4,f4]@9 ~@7 [f3,c4,f4]@9 ~@7 [f3,c4,f4]@9 ~@8, ~@15 e5@7 ~@9 c6@7 ~@9 c6@9]/7", // A5 E5 A5 Em A5 E7 E5 F5
  F: "[[e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4]@2 [e3,b3,e4,g5]@2 [e3,b3,e4]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 ~ [a#5,b5] ~ [c#6,d6] ~ [e6,f6] ~ [g6,g#6], c6@2 b5@2 a5@2 ~ a5@5 [a2,e3,a3,a5] [a2,e3,a3,c6] [a2,e3,a3,d#6] [a2,e3,a3,f#6]]/2", // E5 Em E5 A5 Bmaj7 Dmaj7 Fmaj7 G#maj7 …
  G: "[a2,e3,a3]!4 [a2,e3,a3]@4, a6", H: "[~@3 a4@2 g4 ~@4 a3 d4 e4 g4 a4 g4, ~@3 a4@4 ~]/2",
  I: "[b4@3 a4@3 a4@3 g4@7]/2", J: "[~@3 b4@2 a4 b4@4 e3 a3 b3 d4 e4 g4]/2", K: "[b4@3 a4@3 g4@3 f#4@7]/2",
  L: "[~@3 c5@2 b4 c5@4 a3 d4 e4 g4 a4 g4]/2", M: "[~@5 d5 e5@4 e3 a3 b3 d4 e4 g4, ~@3 e5@3 ~@10]/2",
  N: "[d5@3 a4@3 g4@3 f#4@7]/2", O: "[a2,e3,a3,a4,e5,a5]/2",
  P: "[[g2,d3,g3,g4,d5,g5]@3 [d3,a3,d4,d5,a5,d6]@3 e5@3 d5@7, ~@3 [c3,g3,c4,c5,g5]@5]/2", Q: "[e2,b2,e4,b4]/2",
  R: "[[d3,a3,d4,d5,a5,d6]@3 [d3,a3,d4,d5,a5,d6]@3 [e5,a5,d6]@3 [d5,a5,d6]@7, ~@3 [d3,a3,d4]@5]/2", // D5 Dsus2 D5
  S: "[[a2,e3,a3,a4]@7 g4@2 d5 [f2,c3,f3,f4]@5 c5@2 g5 [g2,d3,g3,g4]@5 d5@2 a5 [a2,e3,a3,a4]@5 c5@2 g5 [g2,d3,g3,g4]@6, ~@7 [g2,d3,g3]@3 ~@5 [c3,g3,c4]@3 ~@5 [d3,a3,d4]@3 ~@5 [c3,g3,c4]@3 ~@6]/5", // A5 F5 G5 A5 G5 C5 D5 C5
  T: "[c4@2 e4@2 e4 c4@2 [d4,g4]@2 [e4,d5] [c4,f4]@5 [g4,c5]@2 [a4,g5] [d4,g4]@5 [b4,d5]@2 [c5,a5] a4@5 c5@2 [b4,g5] [g4,d5]@6, a4@7 ~@33]/5", // G5 E7 F5 C5 A7 G5 Bm F …
  U: "d4 e4 e4@2 e4 d4 a3 d4", V: "d4 c4 c4@4 b3 c4",
  W: "[c4@2 ~ c4 b3@2 c4@2 d4@4 ~@2 d4@4 ~ d4 a3@2 d4@2 e4@6 d4@4 e4@2 c4@2 [d4,g4]@8 ~@2, ~ d4 ~@7 e4 ~@14]/3", // G5
  X: "e4 a4 b4 c5 e4 a4 b4 c5 e4 a4 b4 c5 e5 c5 b4 a4", Y: "e4 a4 ~ c5 e5 c5 b4 a4 e4 a4 b4 c5 e5 c5 b4 a4, ~ b4 ~@6",
  Z: "[e4 b4 ~ d5 g5@6 g5@2 a5@2 e5@6 b5@2 c6@2 b5@2 a5@2 e5@2 e5@2, ~ c5 ~@14]/2",
  AA: "~ [g4,c5] g4@2 [g4,c5] [g4,b4]@3, ~@2 c5 ~@5", // C5 G
  AB: "[e5 a5 e5 d6 e6 c6 e5 a5 d6 a5 e5 a5 c6 a5 e5 g5 c6 g5 d5 g5 b5 g5 e5 a5 d6 a5 e5 a5 c6 a5 e5 a5 e6 f6 e6 d6 c6 b5 a5 g5, [a2,e3,a3]@7 [g2,d3,g3]@3 [f2,c3,f3]@5 [c3,g3,c4]@3 [g2,d3,g3]@5 [d3,a3,d4]@3 [a2,e3,a3]@5 [c3,g3,c4]@3 [g2,d3,g3]@6]/5", // A5 G5 F5 C5 G5 D5 A5 C5 …
  AC: "[e5@2 a5@2 e5@2 d6@2 e6@2 c6@2 e5@2 a5@2 d6@2 a5@2 e5@2 a5@2 c6@2 a5@2 e5@2 g5@2 c6@2 g5@2 d5@2 g5@2 b5@2 g5@2 e5@2 a5@2 d6 a5 e5 a5 d6 a5 e5 a5 c6 a5 e5 a5 b5 a5 e5 g5 c6 g5 d5 g5 b5 e6 g6@8 ~@2, [a2,e3,a3]@7 [g2,d3,g3]@3 [f2,c3,f3]@5 [c3,g3,c4]@3 [g2,d3,g3]@5 [d3,a3,d4]@3 [a2,e3,a3]@5 [c3,g3,c4]@3 [g2,d3,g3]@6]/5", // A5 G5 F5 C5 G5 D5 A5 C5 …
  AD: "[[a2,e3,a3,a4]@7 g4@2 d5 [f2,c3,f3,f4]@5 c5@2 g5 [g2,d3,g3,g4]@5 ~, ~@7 [g2,d3,g3]@3 ~@5 [c3,g3,c4]@3 ~@6]/3", // A5 F5 G5 C5
  AE: "[a4,c5] [e4,b4] [c4,g4] [a3,e4]@3 [g4,c5] [d4,b4]", AF: "[b3,g4] d4@6 ~, ~ g3@3 ~@4",
  AG: "[[a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!3 [g2,d3,g3,g4]@2 [f2,c3,f3,d5] [f2,c3,f3]@2 [f2,c3,f3]!3 [c3,g3,c5]@2 [g2,d3,g3,g5] [g2,d3,g3]@2 [g2,d3,g3] [g2,c3,g3] [g2,d3,g3] [d3,a3,d5]@2 [a2,e3,a3,a5] [a2,e3,a3]@2 [a2,e3,a3]!3 [c3,g3,c5]@2 [g2,d3,g5] [g2,d3]@2 [g2,d3]!4, a4@7 ~@3 f4@5 ~@3 g4@5 ~@3 a4@5 ~@3 g4@6]/5", // A5 G5 Dm7 F5 C5 G5 C5 G5 …
  AH: "[[a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!3 [g2,d3,g4]@2 [f2,c3,d5] [f2,c3]@2 [f2,c3]!3 [c3,g3,c5]@2 [g2,d3,g5] [g2,d3]@2 [g2,d3]!3 [d3,a3,d5]@2 [a2,e3,a3,a5] [a2,e3,a3]@2 [a2,e3,a3]!3 [f3,c4,c5]@2 [g2,d3,g5] [g2,d3]@2 [g2,d3]!4, a4@7 ~@3 f4@5 ~@3 g4@5 ~@3 a4@5 ~@3 g4@6]/5", // A5 G5 Dm7 F5 C5 G5 D5 A5 …
  AI: "[f4@2 c4 ~ c4 a3 ~ [b3,g4]@2 [c4,d5] [a3,f4]@5 [c4,c5]@2 [d4,g5] [b3,g4]@5 [f4,d5]@2 [g4,a5] [e4,a4]@5 [c4,c5]@2 [d4,g5] g4@6, a4@7 ~@33]/5", // Em Csus2 Dm C G5 Em Dm Gsus2 …
  AJ: "[f4@2 c4 ~ c4 a3 ~ [b3,g4]@2 [c4,d5] [a3,f4]@5 [c4,c5]@2 [d4,g5] [b3,g4]@5 [f4,d5]@2 [g4,a5] [e4,a4]@5 [c4,g4]@3 [d4,b4]@2 [g4,d5]@22 ~@6, a4@7 ~@57]/8", // Em Csus2 Dm C G5 Em Dm Gsus2 …
  AK: "[~@15 [a2,e3,a3,e4]@68 [a2,a3]@2 ~@11]/6", // A5 A
})).s("gm_electric_guitar_clean").gain(0.45)

// chords · electric guitar clean · "Electric Guitar 1" · soft notes
const electric_guitar_clean_2 = note(`<
  A B@2 C@6 B@2 D@4 ~@30 E@2 F@2 G@2 H@2 I@2 F@2 J@2 H@2 ~@64 K@5 L@5 ~@50
>`.pickRestart({
  A: "[a2,a4,e5,a5]", B: "[[g3,g5,d6,g6]@3 [f#3,f#5,c#6,f#6]@3 [e3,e5,b5,e6]@3 [d3,d5,a5,d6]@7]/2",
  C: "[e3 d3 a2, [e5,b5,e6]]/6", D: "[e3 d3, [e5,b5,e6]]/4", E: "[[a4,e5]@3 [b4,e5]@3 e5@10]/2",
  F: "[[d4,g4]@3 d4@3 c4@10, ~@6 g4@3 ~@7]/2", G: "[[e4,b4]@3 e5@3 e4@8 ~@2]/2", H: "[g4@3 ~@3 b4@3 d5@4 ~@3, d4]/2",
  I: "[[a4,e5]@3 e5@3 e5@10, ~@3 b4@2 ~ a4@8 ~@2]/2", J: "[e4@3 ~@3 e4@8 ~@2, b4]/2",
  K: "[a4@7 g4@2 d5 f4@5 c5@2 g5 g4@5 d5@2 a5 a4@5 c5@2 g5 g4 ~@5]/5",
  L: "[a4 ~@13 g4@4 d5@2 f4@10 c5@4 g5@2 g4@10 d5@4 a5@2 a4@10 c5@4 g5@2 ~@12]/5",
})).s("gm_electric_guitar_clean").gain(0.25)

// chords · overdriven guitar · "Electric Guitar 2"
const overdriven_guitar = note(`<
  ~@15 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 ~@14 D E F@2 G@2 H@2 D E F@2 G@2 H@2 ~@54 I@2 J@3 I@2 J@3 K L@4 M@5 ~@10 N O P Q
  R N O P ~@12 S@5 T@4 ~@11
>`.pickRestart({
  A: "[~@3 a3@2 g3 a3@4 ~ d3 e3 g3 a3 g3]/2", B: "[b3@3 a3@3 g3@3 f#3@7]/2",
  C: "[~@3 b3@2 a3 b3@4 a2 b2 d3 e3 g3 a3]/2", D: "~@5 d4 ~@2", E: "~@2 e3 f#3 g3 a3 b3 d4",
  F: "[~@3 f#4@3 e4@3 d4@7]/2", G: "[~@3 g4@2 f#4 g4@4 ~ f#3 g3 a3 b3 d4]/2", H: "[~@3 f#4@3 e4@3 ~@7]/2",
  I: "[~@2 c4@2 c4 a3@2 b3@2 c4 a3@5 ~]/2", J: "[~ d4 b3@5 f4@2 g4 e4@5 e4@2 d4 ~@6]/3", K: "e3@7 ~",
  L: "[~@7 g3@3 d3@5 a3@3 e3@5 g3@3 d3@6]/4", M: "[~@7 d3@3 c3@5 g3@3 d3@5 a3@3 e3@5 g3@3 d3@6]/5",
  N: "~@2 [g4,c5] ~ [g4,c5] [e4,a4]@2 ~", O: "[g4,c5] ~ g4 [c4,f4,a4]@4 ~", P: "~@2 c5 ~ [g4,c5] [g4,b4]@2 ~",
  Q: "[g4,c5] ~ [g4,c5] [e4,a4]@4 ~", R: "b3 c4 ~ g4@4 ~",
  S: "[~@2 e4@2 e4 d4 c4 d4@2 e4 c4@5 g4@2 a4 d4@5 b4@2 c5 ~@5 g4@2 ~ b4@6]/5",
  T: "[~@2 e4@2 e4 d4 c4 d4@2 e4 c4@5 g4@2 a4 d4@5 b4@2 c5 ~@6]/4",
})).s("gm_overdriven_guitar").gain(0.45)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  ~@15 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E@4 F@6 G H I J A@2 B@2 C@2 K@2 A@2 L@2 C@2 M@2 E@4 F@6 G H I J N@2 O@2 P@2 Q@2
  N@2 O@2 P@2 R S E@4 F@6 G H I J T@5 U@5 T@5 U@5 T@5 U@5 T@5 U@5 V@5 W X Y Z AA AB AC AD@2 AE AB AC AF AG AH AI AJ AK
  AL AM AN@8 ~ AO@6
>`.pickRestart({
  A: "[a1!3 e2!2 d2 e2@4 a1 b1 c2 d2 e2 f#2]/2", B: "[g2@2 g2 d2@2 d2 c2@3 c2 c2@2 c2@2 c2@2]/2",
  C: "[e1!3 e2@2 d2 e2@4 e1 f#1 g1 a1 b1 c#2]/2", D: "[d2@2 d2 d2@2 d2 d2@3 d2 d2@2 d2@2 d2@2]/2",
  E: "[f1@7 c2@8 g1@6 c2 d2 g2@2 g2 g2@2 g2@4]/4",
  F: "[a1@2 a1@2 a1@2 a1@2 a1@2 ~@2 e2@2 f2@4 f2@2 f2@4 e2 f2@3 f2@4]/2", G: "e2@3 e2 e2@2 e2!2",
  H: "~ e2 e2@2 e2@2 e2@2", I: "d2!4", J: "d3!2 d3@2",
  K: "[d2@4 d2@2 d2@4 d2@2 d2@6 d2@2 d2@4 c3 d3 d3@2 c3 d3 d3@2]/2",
  L: "[g2@4 g2@2 d2@4 d2@2 c2@6 c2@2 c2@4 b2 c3 c3@2 b2 c3 c3@2]/2", M: "[d2@2 d2 d2@2 d2 d2@3 d2 d2@2 a2@4]/2",
  N: "[a1@3 a1@2 a1 a1@3 a1 a1@2 a1@4]/2", O: "[g1@3 d2@3 c2@3 c2 c2@2 c2@4]/2",
  P: "[e1@3 e1@2 e1 e1@3 e1 e1@2 e1@4]/2", Q: "[c2 d2@7 d2@4 d2@2 d2@4 d2@2 d2@4 d2@8]/2", R: "c2 d2@7 d2@4 c2 d2@3",
  S: "~ d2@2 d2@4 d2@9",
  T: "[a1@2 a1@2 a1@2 a1 g1@2 d2 f1@2 f1@2 f1 c2@2 g2 g1@2 g1@2 g1 d2@2 a2 a1@2 a1@2 a1 c2@2 g2 g1@2 g1@2 g1@2]/5",
  U: "[a1@2 a1@2 a1@2 a1 g1@2 d2 f1@2 f1@2 f1 c2@2 g2 g1@2 g1@2 g1 d2@2 a2 a1@2 a1@2 a1 f2@2 c2 g2@2 g2@2 g2@2]/5",
  V: "[a1@2 a1@2 a1@2 a1 g2@2 g2 f2@2 f2@2 f2 c3@2 g2 g2@2 g2@2 g2 d3@2 d3 a2@2 a2@2 a2 c3@2 c3 g2@2 g2@2 g2@2]/5",
  W: "a2!4", X: "a2@2 a2 f2@3 f2@2", Y: "g2!4", Z: "a3 e3 c3 a2@3 g3 d3", AA: "b2 g2@7", AB: "a1@2 a1@2 a1@2 a1 g1",
  AC: "g1@2 f1@2 f1@2 f1 c2", AD: "[c2@2 g1@2 g1@2 g1 d2@3 a1@2 a1@2 a1 c2]/2", AE: "c2 g1!3",
  AF: "c2@2 g1@2 g1@2 g1 d2", AG: "d2@2 a1@2 a1@2 a1 f2", AH: "f2 g2!3", AI: "a2@2 a2@2 a2@2 a2 g2",
  AJ: "g2 a2 f2@2 f2@2 f2 c3", AK: "c3 d3 g2@2 g2@2 g2 d3", AL: "d3 e3 a2@2 a2@2 a2 f3", AM: "f3 g3 g3@2 g3@2 g3@2",
  AN: "[[e3,a3]@14 g3@4 a3 g3 f3@10 c4@4 d4 c4 g3@10 f3@4 g3 f3 e3@10 [f2,c3]@6 [g2,d3]@4 [g2,d3]@44 ~@12]/8", // A5 F5 G5
  AO: "[~@15 a1@68 a1@2 ~@11]/6",
})).s("gm_electric_bass_finger").gain(0.5)

// drums · kick
const kick = s("bd").struct("<~@14 A B C@7 B C@81 A D@48 E D@15 C@5 F G H I J ~@5>".pickRestart({
  A: "~ x", B: "x!4 ~@2 x ~", C: "x", D: "x!2", E: "x ~ x!2", F: "x!4", G: "x!2 ~ x!4 ~ x!4 ~ x!3",
  H: "x ~ x!3 ~@5 x ~@5", I: "x ~@2 x ~@2 x ~", J: "~@3 x ~@11 x",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@14 A B@90 C@49 D C@15 B@5 E F G H I ~@4 J>".pickRestart({
  A: "~@5 x ~@2", B: "~ x", C: "~ x ~ x", D: "~@4 x ~@4 x ~@3 x ~@2", E: "~ x ~@3 x ~@3 x ~@3 x ~@2",
  F: "~ x ~@4 x ~@4 x ~@4", G: "x ~@4 x ~@5 x ~@4", H: "~ x ~@5 x ~@5 x ~@2", I: "~@3 x ~@4", J: "x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~@176 [~@10 x!2 ~ x!3] [x ~ x!2 ~@12] ~@7>").gain(0.5)

// drums · low tom
const low_tom = s("lt").struct("<~@154 A ~@20 B C D E F ~@4 G>".pickRestart({
  A: "~@11 x ~@3 x", B: "~@3 x ~@3 x ~@3 x ~@3 x", C: "~@4 x ~@4 x ~@4 x ~", D: "~@3 x!2 ~@3 x ~@5 x ~",
  E: "~@2 x ~@2 x ~@2", F: "~ x ~@10 x ~@3", G: "~ x ~@6",
})).gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct("<~@13 A B ~@139 C ~@20 D E F G H ~@4 I>".pickRestart({
  A: "~@2 x!3 ~ x!2", B: "x!4 ~@4", C: "~@5 x ~ x", D: "~ x ~ x ~ x ~ x", E: "~@3 x ~@4 x ~@4 x ~@2",
  F: "~@2 x ~@4 x ~@5 x ~@2", G: "~@3 x ~@5 x ~@5 x", H: "~@9 x ~@6", I: "~ x ~@14",
})).gain(0.5)

// drums · open hat
const open_hat = s("oh").struct("<~@15 A B@7 A B@81 C D@47 E F C D@14 B@5 ~@10>".pickRestart({
  A: "~ x!3", B: "x!4", C: "~ x!7", D: "x!8", E: "~ x!5 ~ x", F: "x!4 ~@4",
})).gain(0.5)

// drums · high tom
const high_tom = s("ht").struct("<~@13 [x!3 ~@13] ~@171>").gain(0.5)

// drums · crash
const crash = s("cr").struct("<~@15 A ~@7 A ~@81 A ~@47 B ~ A ~@20 A C ~ D ~@5>".pickRestart({
  A: "x", B: "x ~@2 x", C: "~ x ~@2", D: "~@15 x",
})).gain(0.5)

// drums · ride
const ride = s("rd").struct("<~@176 [~ x ~ x!4 ~ x!2 ~@6] ~@8>").gain(0.5)

stack(
  electric_guitar_clean, electric_guitar_clean_2, overdriven_guitar, bass, kick, snare, hihat, low_tom, mid_tom,
  open_hat, high_tom, crash, ride
)