Strudelify

Spooky

Classics IV

KeyB minorTempo108 bpm
0:00/0:00
// Spooky — Classics IV
// 108 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 28, 4/4 at bar 28, 2/4 at bar 37, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 3 electric guitar muted (copy of ch 2 piano)
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/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.

// bass · electric bass pick
const bass = note(`<
  ~ A B A B A B A B A B A B C D E F A B G H A B A B A B A B C D E F A B G H A B A B A B A B C D E F A B G H A B A B A B
  A B C D E F A B G H A B A B A B A B I ~
>`.pickRestart({
  A: "e1@5 ~ e1@2 b1 ~ b1@3 ~ g#1@2", B: "a1 ~ a1@2 ~@2 a1@3 ~ b1@2 e2 d2 b1 ~", C: "e1@5 ~ e1@2 b1 ~ b1@3 ~ b1 ~",
  D: "e1 ~ e1@3 ~ b1@4 e1@2 b1 ~ b1 ~", E: "a1 ~@15", F: "a#1 ~@3 a#1@10 ~@2", G: "e1@5 ~ e1@2 b1 ~ b1@4 a#1@2",
  H: "b1 ~ b1@3 ~ b1@3 ~ b1@3 ~ b1 ~", I: "e1",
})).s("gm_electric_bass_pick").gain(0.36)

// chords · piano
const piano = note(`<
  ~ A B A C A B A C A B A C D E F G H I J K A B A C A B A C D E F G H I J K A B A C A B A C D E F G H I J K L M N M N O
  N M D E F G H I J K A B A C A B A C P ~
>`.pickRestart({
  A: "~@4 [d4,g4,b4]@2 ~@2 [d4,g4,b4] ~ [d4,g4,b4]@4 ~@2", B: "[c#4,f#4,a4] ~ [c#4,f#4,a4]@2 ~@2 [c#4,f#4,a4]@10",
  C: "[c#4,f#4,a4] ~ [c#4,f#4,a4]@2 ~@2 [c#4,f#4,a4]@7 ~@3", D: "~@4 [d4,g4,b4]@2 ~@2 [d4,g4,b4] ~ [d4,g4,b4]@5 ~",
  E: "[d4,g4,b4] ~ [d4,g4,b4]@3 ~ [d4,g4,b4]@6 ~@4", F: "[c#4,f#4,a4] ~@15",
  G: "[e4,g4,a#4] ~ [c#4,e4,g4,a#4]@5 ~, c#4 ~@15", H: "~@4 [d4,g4,b4]@3 ~ [d4,g4,b4] ~ [d4,g4,b4]@4 ~@2",
  I: "[c#4,f#4,a4] ~ [c#4,f#4,a4]@2 ~@2 [c#4,f#4,a4]@8 ~@2", J: "~@4 [d4,g4,b4]@3 ~ [d4,g4,b4] ~ [d4,g4,b4]@3 ~@3",
  K: "~@2 [a3,d4,f#4]@2 ~ [a3,d4,f#4]@2 ~ [a3,d4,f#4]@2 ~ [a3,d4,f#4]@2 ~ [a3,d4,f#4] ~", // D
  L: "~@2 [e4,g4,b4,d5] ~ [e4,g4,b4]@4 ~ [e4,g4,b4,d5] ~@2 [e4,g4,b4]@2 ~@2, ~@4 d5 ~@7 d5 ~@3", // Em7 Em Em7 Em
  M: "~@2 [c#4,f#4,a4,c#5] ~ [c#4,f#4,a4]@3 ~ c#5 [c#4,f#4,a4] ~@2 [c#4,f#4,a4]@2 ~@2, ~@4 c#5 ~@7 c#5 ~@3", // F#m
  N: "~@2 [e4,g4,b4,d5] ~ [e4,g4,b4]@4 d5 [e4,g4,b4] ~@2 [e4,g4,b4]@2 ~@2, ~@4 d5 ~@7 d5 ~@3", // Em7 Em
  O: "~@2 [c#4,f#4,a4,c#5] ~ [c#4,f#4,a4]@3 ~ c#5 [c#4,f#4,a4] ~@2 [c#4,f#4,a4,c#5]@2 ~@2, ~@4 c#5 ~@11", // F#m
  P: "[d4,g4,b4]", // G
})).s("gm_piano").gain(0.27)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~@5 A B C D A B C D E@2 F G A D C H A B C D A B C D E@2 F G A D C H A B C D A B C D E@2 F G A D C H A B C D A B C D
  E@2 F G A D C H A B C D A B C D ~@2
>`.pickRestart({
  A: "[b5,e6,g6]", B: "[a5,c#6,f#6]", C: "[b5,e6,g6]@15 ~", D: "[a5,c#6,f#6]@15 ~", E: "[b5,e6,g6]/2",
  F: "[a5,c#6,f#6] ~@15", G: "[e6,a#6]@2 ~@2 [e6,g6,a#6]@11 ~, g6 ~@15", H: "[f#5,b5,d6]@15 ~",
})).s("gm_drawbar_organ").gain(0.14)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A B A B A B A B A B C D A B E F A B A B A B A B A B C D A B E F E F E F E F E F E F C D E F E F A B A B A B
  A B A B C D A B E F E F E F E F E F C ~
>`.pickRestart({
  A: "x!2 ~ x!2 ~@3", B: "x!2 ~ x ~@3 x", C: "x", D: "x!2 ~@2", E: "x!2 ~ x!3 ~@2", F: "x!2 ~ x ~ x ~ x",
})).gain(0.37)

// drums · rim
const rim = s("rim").struct("<~ A@14 ~@2 A@3 B A@10 ~@2 A@3 B ~@16 A@10 ~@2 A@3 B ~@10>".pickRestart({
  A: "~@2 x ~@2 x ~ x", B: "~ x ~@2",
})).gain(0.37)

// drums · snare
const snare = s("sd").struct("<~@16 A ~@3 B ~@11 A ~@3 B C@10 ~ A C@3 D ~@11 A ~@3 B C@7 D ~@2>".pickRestart({
  A: "~@12 x!4", B: "~@13 x!3", C: "~@2 x ~@2 x ~ x", D: "~@4 x ~@8 x!3",
})).gain(0.37)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@16 A ~@3 B ~@11 A ~@3 B ~@11 A ~@3 B ~@11 A ~@3 B ~@7 B ~@2>".pickRestart({
  A: "~@11 x ~@4", B: "~@10 x!3 ~@3",
})).gain(0.14)

// drums · low tom
const low_tom = s("lt").struct("<~@16 A ~@15 A ~@15 A ~@15 A ~@14>".pickRestart({
  A: "x",
})).gain(0.37)

// drums · hihat
const hihat = s("hh").struct("<A@15 B ~ A@14 B ~ A@14 B ~ A@14 B ~ A@12 ~@2>".pickRestart({
  A: "x!4", B: "~ x!3",
})).gain(0.37)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ A@14 ~@2 A@14 ~@2 A@14 ~@2 A@14 ~@2 A@12 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.14)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@15 A ~@15 A ~@15 A ~@15>".pickRestart({
  A: "~@14 x!2",
})).gain(0.37)

// drums · open hat
const open_hat = s("oh").struct("<~@77 x ~>").gain(0.37)

// drums · crash
const crash = s("cr").struct("<~@16 A ~@15 A ~@15 A ~@15 A ~@14>".pickRestart({
  A: "~ x ~@2",
})).gain(0.37)

// drums · ride
const ride = s("rd").struct("<~@37 A@10 ~@2 A@2 B A ~@16 A@6 B A C ~>".pickRestart({
  A: "x!8", B: "x!4 ~ x!3", C: "x",
})).gain(0.37)

// drums · tambourine
const tambourine = s("tb").struct("<~ A@14 ~@2 A@14 ~@2 A@14 ~@2 A@14 ~@2 A@12 ~@2>".pickRestart({
  A: "~ x ~ x",
})).gain(0.37)

stack(
  bass, piano, drawbar_organ, kick, rim, snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom, open_hat, crash, ride,
  tambourine
)

More by Classics IV