Strudelify

The Chattering Lack of Common Sense

GHOST (Ghost-and-Pals)

KeyF majorTempo140 bpm
0:00/0:00
// The Chattering Lack of Common Sense — GHOST (Ghost-and-Pals)
// 140 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 42, 4/4 at bar 42, 2/4 at bar 52, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: ch 1 "Piano" named as a piano, played on piano (its slap bass 2 patch is not one); ch 2 "Piano" named as a piano, played on piano (its distortion guitar patch is not one); ch 3 "Piano" named as a piano, played on piano (its guitar harmonics patch is not one); ch 4 "Piano" named as a piano, played on piano (its distortion guitar patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5960962; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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(`<
  A B@8 C@3 ~ C@3 ~ B@8 D E F G D E F G H I H I H I H I J K@2 L M K@2 L N O P ~@4 Q R Q S T@2 B@6 U V W V W V W V W V W
  V W V W V X@3 Y X@3 Z AA@2 H I H I H I H I AB AC AB AC AB AC AB AC AB AC AB AC AB AC AB AC
>`.pickRestart({
  A: "~@3 ab5 ~@2 c5!2, f5!2 f5@2, ~@2 ab5@4 ~@3 ab5@7, ~@5 g5@3",
  B: "[~@3 ab5 ~@2 c5 ~@4 ab5 ~@2 c6!2, f5!2 f5@2 f5!2 f5@2, ~@2 ab5@4 ~@3 ab5@9 ab5@4 ~@3 ab5@7, ~@5 g5@8 g5@3, ~@7 c5@9]/2",
  C: "[~@11 c6, c6@11 c6 ab5@8 e6@4, ~ f6@2 f6@4 f5@5, ~@2 ab6@6 c6 f6@3, ~@3 bb5@5]/3", D: "ab5!2 g5 ab5 f5!2 e5 f5",
  E: "c5!2 bb4 c5 ab4!2 g4 f4", F: "ab5!2 g5 ab5 c6!2 bb5 c6", G: "f6!2 e6 c6 bb5@2 ab5@2",
  H: "f5 ab5 f5 g5 e5 ab5 c5 f5", I: "f5 ab5 f5 g5 e5 ab5 c6 ab5", J: "f5@2 ab5@2 f5@2 g5@2 c6@3 bb5 ab5@2 g5@2",
  K: "f5 ~ f5 ~ c5@2 c5@2 c6@3 bb5 ab5@2 g5@2", L: "f5 ~ f5 ~ c5@2 c5@2 b4@2 c5 ~ b4@2 c5 ~",
  M: "b4@2 c5 ~ b4@2 c5 ~ c6@3 bb5 ab5@2 g5@2", N: "b4@2 c5 ~ f5@4 b4@2 c5 ~ b4@2 c5 ~",
  O: "b4@2 c5 ~ f5!4 b4@2 c5 ~ b4@2 c5 ~", P: "b4@2 c5 ~ f5!4 ~@8", Q: "f4@2 ab4 ~ f4@2 ab4 ~ f4@2 ab4 ~ g4@4",
  R: "f4@2 ab4 ~ f4@2 ab4 ~ f4@2 ab4 ~ c5 ~ c5@2",
  S: "f4@2 ab4 ~ f4@2 ab4 ~ f4@2 ab4 ~ [bb6,c7] [e6,f6,g6,a6] [a5,bb5,c6,d6] [d5,e5,f5,g5]", // Bbsus2 Fmaj7 D7 Em7
  T: "[[bb4,c5] ~@5 ab5@2 ~@4 c5@2 ~@8 ab5@2 ~@4 c6@2 c6@2, f5!2 f5@2 f5!2 f5@2, ~@2 ab5@4 ~@3 ab5@9 ab5@4 ~@3 ab5@7, ~@5 g5@8 g5@3, ~@7 c5@9]/2", // Bbsus2
  U: "f5@2 ab5@2 f5@2 ab5@2 f5 ab5 g5@2 c5@2 c5!2", V: "f5@2 ab5@2 f5@2 ab5@2 f5 ab5 g5@2 c6@2 c6!2, c5 ~@15",
  W: "f5@2 ab5@2 f5@2 ab5@2 f5 ab5 g5@2 c5@2 c5!2, c6 ~@15", X: "c6@3 bb5 ab5@2 g5@2 f5 ~ f5 ~ c5@2 c5@2",
  Y: "b4@2 c5 ~ b4@2 c5 ~ b4@2 c5 ~ b4@2 c5 ~", Z: "b4@2 c5 ~ b4@2 c5 ~ b4@2 c5 ~ f5@4",
  AA: "b4@2 c5 ~ b4@2 c5 ~ b4@2 c5 ~ f5!4", AB: "f5@3 ab5 f5@2 e5@2 c5@2 f5@2 c5 e5 f5 g5",
  AC: "g5@3 ab5 f5@2 e5@2 c6@2 ab5@2 bb5 ab5 g5 f5",
})).s("gm_piano").gain(0.64)

// chords · piano
const piano_2 = note(`<
  ~ A B A B A B A B ~@8 A B A B A B A B ~@8 C D C D C D C D E F G H I F G H J K L ~@8 A B A B A B A B ~@8 M N M N M N M
  N O P O Q O P O R S@2 C D C D C D C D T U T U T U T U T U V W ~@4
>`.pickRestart({
  A: "[f4,f5]@2 ~ f4 [f4,f5]@2 [f4,ab4,ab5]@2 [f4,f5] [ab4,ab5] ~ c4 [c4,c5]@2 [c4,c5]@2, ~ [ab4,ab5] ~@2 c4 [g4,g5] ~@2", // F Fm F Ab C Ab G
  B: "[f4,f5]@2 ~ f4 [f4,f5]@2 [f4,ab4,ab5]@2 [f4,f5] [ab4,ab5] [g4,g5]@2 [c5,c6]@2 [c5,c6]@2, ~ [ab4,ab5] ~@2 g4 ~@3", // F Fm F Ab G C Ab
  C: "f5 ab5 f5 g5 e5 ab5 c5 f5", D: "f5 ab5 f5 g5 e5 ab5 c6 ab5",
  E: "f5@2 ab5@2 f5@2 g5@2 [f3,c5,c6]@3 [bb4,bb5] [f3,ab4,ab5]@2 [g4,g5]@2", // F5 Bb Fm G
  F: "[f4,f5] ~ [f4,f5] ~ [c3,c4,c5]@2 [c4,c5]@2 [bb2,c5,c6]@3 [bb4,bb5] [bb2,ab4,ab5]@2 [g4,g5]@2, c3 ~@7", // F C Bbsus2 Bb Bb7 G
  G: "[f4,f5] ~ [f4,f5] ~ [c3,c4,c5]@2 [c4,c5]@2 [f3,c5,c6]@3 [bb4,bb5] [f3,ab4,ab5]@2 [g4,g5]@2, c3 ~@7", // F C F5 Bb Fm G
  H: "[f4,f5] ~ [f4,f5] ~ [c3,c4,c5]@2 [c4,c5]@2 [f3,b3,b4]@2 [c4,c5] ~ [f3,b3,b4]@2 [c4,c5] ~, c3 ~@7", // F C Fdim C Fdim C
  I: "[g3,b3,b4]@2 [c4,c5] ~ [b3,c4,b4]@2 [c4,c5] ~ [f3,c5,c6]@3 [bb4,bb5] [f3,ab4,ab5]@2 [g4,g5]@2", // G C Cmaj7 C F5 Bb Fm G
  J: "[g3,b3,b4]@2 [c4,c5] ~ [f4,f5]@4 b4@2 c5 ~ b4@2 c5 ~, ~@2 c4 ~@5", K: "b4@2 c5 ~ f5!4 b4@2 c5 ~ b4@2 c5 ~",
  L: "b4@2 c5 ~ f5!4 ~@8", M: "f3@2 ~ f3!2 ~ f3@2 c3@2 ~ c3!2 ~ c3@2", N: "f3@2 ~ f3!2 ~ f3@2 g3@2 ~@2 c4@2 ~@2",
  O: "[f3,c5,c6]@3 [bb4,bb5] [f3,ab4,ab5]@2 [g4,g5]@2 [f4,f5] ~ [f4,f5] ~ [c3,c4,c5]@2 [c4,c5]@2, ~@4 c3 ~@3", // F5 Bb Fm G F C
  P: "[bb2,c5,c6]@3 [bb4,bb5] [bb2,ab4,ab5]@2 [g4,g5]@2 [f4,f5] ~ [f4,f5] ~ [c3,c4,c5]@2 [c4,c5]@2, ~@4 c3 ~@3", // Bbsus2 Bb Bb7 G F C
  Q: "[f3,b3,b4]@2 [c4,c5] ~ [f3,b3,b4]@2 [c4,c5] ~ [g3,b3,b4]@2 [c4,c5] ~ [b3,c4,b4]@2 [c4,c5] ~", // Fdim C Fdim C G C Cmaj7 C
  R: "[f3,b3,b4]@2 [c4,c5] ~ [f3,b3,b4]@2 [c4,c5] ~ [g3,b3,b4]@2 [c4,c5] ~ [f4,f5]@4, ~@6 c4 ~", // Fdim C Fdim C G C F
  S: "b4@2 c5 ~ b4@2 c5 ~ b4@2 c5 ~ f5!4",
  T: "[ab3,f5]@3 [ab3,ab5] f5@2 [ab3,e5]@2 [g3,c5]@2 ~ g3 [g3,c5] e5 f5 g5, ~@4 ab3 ~@5 f5@2 ~@2 g3@2", // Db Ab Dbm C5
  U: "[bb3,g5]@3 [bb3,ab5] f5@2 [bb3,e5]@2 [c4,c6]@2 ab5@2 bb5 ab5 g5 f5, ~@4 bb3 ~@7 g3@2 ~@2", // Eb Bb7 Bbdim C
  V: "[ab3,f5]@3 [ab3,ab5] f5@2 e5@2 c5@2 f5@2 c5 e5 f5 g5", W: "g5@3 ab5 f5@2 e5@2 ~@8",
})).s("gm_piano").gain(0.48)

// chords · piano · soft notes · C Db Ab Dbm C5 Eb Bb7 Bbdim …
const piano_soft = note(`<
  ~@112
  [~@4 ab3 ~ ab3@2 g3@2 ~ g3!2 ~ g3@2]
  [bb3@2 ~ bb3!2 ~ bb3@2 [c4,c6]@2 ab5@2 bb5 ab5 g5 f5, ~@6 g3 ~]
  [[ab3,f5]@3 [ab3,ab5] f5@2 [ab3,e5]@2 [g3,c5]@2 ~ g3 [g3,c5] e5 f5 g5, ~@4 ab3 ~@5 f5@2 ~@2 g3@2]
  [[bb3,g5]@3 [bb3,ab5] f5@2 [bb3,e5]@2 [c4,c6]@2 ab5@2 bb5 ab5 g5 f5, ~@4 bb3 ~@7 g3@2 ~@2]
  [[ab3,f5]@3 [ab3,ab5] f5@2 [ab3,e5]@2 [g3,c5]@2 ~ g3 [g3,c5] e5 f5 g5, ~@4 ab3 ~@5 f5@2 ~@2 g3@2]
  [[bb3,g5]@3 [bb3,ab5] f5@2 [bb3,e5]@2 [c4,c6]@2 ab5@2 bb5 ab5 g5 f5, ~@4 bb3 ~@7 g3@2 ~@2]
>`).s("gm_piano").gain(0.18)

// other · piano
const piano_3 = note(`<
  ~ A B A B A B A B C D E F C D E F A B A B A B A B G H I J G H I J K L K L K L K L M N O N P N O N Q@2 R S D E ~ S D E
  F A B A B A B A B ~@8 T U T V T U T V W X W Y W X W Y Z AA Z AA Z AA Z AA Z AA AB AC AB AC AB AC AB AC AB AC AB AC AB
  AC AB AC
>`.pickRestart({
  A: "f5@2 ab5@2 f5@2 ab5@2 f5 ab5 g5@2 c5@2 c5@2", B: "f5@2 ab5@2 f5@2 ab5@2 f5 ab5 g5@2 c6@2 c6@2",
  C: "[c4,c5] [bb3,bb4]", D: "[g3,g4] [ab3,ab4]", E: "[bb3,bb4] [c4,c5]", F: "[f4,f5] [e4,e5]", G: "[ab3,ab4] [g3,g4]",
  H: "[e3,e4] [f3,f4]", I: "[ab3,ab4] [c4,c5]", J: "[b3,b4] [bb3,bb4]", K: "f5 ab5 f5 g5 e5 ab5 c5 f5",
  L: "f5 ab5 f5 g5 e5 ab5 c6 ab5", M: "f5 ab5 f5 g5 [f4,f5]@4", N: "[c4,c5] [f4,f5]", O: "[g4,g5] [c5,c6] [f4,f5]@2",
  P: "[g4,g5] [f4,f5] [f4,f5]@2", Q: "[[g4,g5] [f4,f5] f4@4 g4@2]/2", R: "c5 ~", S: "[c4,c5] [f3,f4]", T: "c5 g4",
  U: "c5 ab4 g4 bb4", V: "c5 ab4 g4 c5", W: "[f4,f5] [c4,c5]", X: "[f4,f5]@2 [g4,g5] [c5,c6]",
  Y: "[f4,f5]@2 [g4,g5] [f4,f5]", Z: "f4", AA: "g4 c5", AB: "[ab4,ab5] [g4,g5]", AC: "[bb4,bb5]@2 [c5,c6] [g4,g5]",
})).s("gm_piano").gain(0.36)

// bass · fretless bass · "Sähköbasso"
const bass = note(`<
  ~ A B A B A B A B C D E F C D E F A B A B A B A B G H I J G H I J K L K L K L K L M N O N O N O N P ~@2 Q D E ~ Q D E
  F A B A B A B A B ~@8 R S R T R S U V W X W X W X W X ~@10 Y Z Y Z Y Z Y Z Y Z Y Z Y Z Y Z
>`.pickRestart({
  A: "f2@2 ab2 ~ f2@2 g2 ~ c2@2 d2 ~ c2@2 db2 ~", B: "bb1@2 b1 ~ bb1@2 b1 ~ c2@2 d2 ~ c2@2 d2 ~",
  C: "c2@2 ~ c2!2 ~ c2@2 bb1@2 ~ bb1!2 ~ bb1@2", D: "g1@2 ~ g1!2 ~ g1@2 ab1@2 ~ ab1!2 ~ ab1@2",
  E: "bb1@2 ~ bb1!2 ~ bb1@2 c2@2 ~ c2!2 ~ c2@2", F: "f2@2 ~ f2!2 ~ f2@2 e2@2 ~ e2!2 ~ e2@2",
  G: "ab1@2 ~ ab1!2 ~ ab1@2 g1@2 ~ g1!2 ~ g1@2", H: "e1@2 ~ e1!2 ~ e1@2 f1@2 ~ f1!2 ~ f1@2",
  I: "ab1@2 ~ ab1!2 ~ ab1@2 c2@2 ~ c2!2 ~ c2@2", J: "b1@2 ~ b1!2 ~ b1@2 bb1@2 ~ bb1!2 ~ bb1@2",
  K: "bb1 c2 f2 c2 bb1 c2 f2 c2", L: "bb1 c2 f2 c2 f2 ab2 c3 bb2", M: "~@8 f2@2 ab2 ~ f2@2 ab2 ~",
  N: "bb1@2 b1 ~ bb1@2 b1 ~ ab1@2 a1 ~ ab1@2 a1 ~", O: "bb1@2 b1 ~ bb1@2 c2 ~ f2@2 ab2 ~ f2@2 ab2 ~",
  P: "bb1@2 b1 ~ bb1@2 c2 ~@9", Q: "c2@2 ~ c2!2 ~ c2@2 f1@2 ~ f1!2 ~ f1@2", R: "ab2@2 f2@2 ab2 g2 e2 f2",
  S: "ab2 f2 g2 c3", T: "ab2 g2 e2 f2 ab2 bb2 c3@2", U: "c3@2 ~ ab2 f2 ~ f2!2 ab2@2 g2@2 e2@2 f2@2", V: "c3 g2 ab2 c3",
  W: "f2@2 ab2 ~ f2@2 ab2 ~ bb1@2 b1 ~ bb1@2 b1 ~", X: "ab1@2 a1 ~ ab1@2 a1 ~ bb1@2 b1 ~ bb1@2 c2 ~",
  Y: "ab2@2 ~ ab2!2 ~ ab2@2 g2@2 ~ g2!2 ~ g2@2", Z: "bb2@2 ~ bb2!2 ~ bb2@2 c3@2 ~@2 g2@2 ~@2",
})).s("gm_fretless_bass").gain(0.64)

// bass · lead 2 sawtooth · "Efektisyntetisaattori"
const bass_2 = note("<~@72 A@8 B@4 ~@34>".pickRestart({
  A: "c1/2", B: "c2/2",
})).s("gm_lead_2_sawtooth").gain(0.6)

// drums · kick
const kick = s("bd").struct("<~ A@40 B A@7 C ~@2 A@3 ~ A@36 ~@10 A@16>".pickRestart({
  A: "x!4", B: "~@2 x!2", C: "x!2 ~@2",
})).gain(0.45)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@113 [~@8 x ~ x!3 ~ x ~] [x ~ x!3 ~ x ~ x ~ x!3 ~ x ~]!4>").gain(0.15)

// drums · clap
const clap = s("cp").struct(`<
  A B C B C B C B C ~@8 B C B C B C B C ~@8 A@8 D B@3 E B@3 F ~@10 B C B C B C B C ~@8 A@4 ~@4 B@3 C B@3 C ~@10 B@3 C
  B@3 C B@3 G ~@4
>`.pickRestart({
  A: "x!4", B: "~ x ~ x ~ x ~ x", C: "~@2 x ~@3 x ~@3 x!3 ~ x ~", D: "~@5 x ~ x", E: "~@2 x!3 ~ x ~@3 x ~@3 x ~",
  F: "~@2 x!3 ~ x ~@9", G: "~ x ~ x ~@4",
})).gain(0.3)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@113 [~@10 x!3 ~ x ~] [~ x ~ x ~ x ~ x]!3 [~@2 x ~@3 x ~@3 x!3 ~ x ~]>").gain(0.15)

// drums · low tom
const low_tom = s("lt").struct("<~@68 [x!4]!8 ~@42>").gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<~@68 [x!4]!8 ~@42>").gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~ A@32 ~@8 B A@7 C ~@2 A@3 ~ A@12 ~@8 D@4 A@12 ~@10 A@11 C ~@4>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@5 x ~ x", C: "~ x ~ x ~@4", D: "x!4",
})).gain(0.4)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@113 [~@5 x ~ x] [~ x ~ x ~ x ~ x]!4>").gain(0.15)

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

stack(
  piano, piano_2, piano_soft, piano_3, bass, bass_2, kick, snare, snare_soft, clap, clap_soft, low_tom, mid_tom,
  open_hat, open_hat_soft, crash
)