Strudelify

All Cats Are Grey

The Cure

KeyA majorTempo110 bpm
0:00/0:00
// All Cats Are Grey — The Cure
// 110 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 148 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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("<~@100 A ~@7 B ~@3 B ~@3 A ~@11 B ~@3 C D E@2 C D E@2 F@2 E@2 F@2 E@2>".pickRestart({
  A: "g2", B: "a2", C: "a2 g2", D: "~@2 b1 c2", E: "[f1@3 ~]/2", F: "[a2@2 g2@4 b1 c2]/2",
})).s("gm_piano").gain(0.47)

// other · orchestral harp
const orchestral_harp = note("<~@64 A@2 B C D@2 E F@2 G H I J K L@2 M N O P@2 Q R S@2 ~@59>".pickRestart({
  A: "[~@2 b4@2 a4 g#4@2 f#4@2 a4@2 g#4@2 f#4@2 ~]/2", B: "f#4@2 ~ d4@2 ~ d4@2", C: "~@7 g#4",
  D: "[g#4@2 a4 g#4@2 a4@2 b4@2 ~@7]/2", E: "~@7 b4", F: "[c#5 b4@2 a4@2 g#4@2 g#4@2 ~@3 g#4!2 g#4@2]/2",
  G: "g#4@2 ~ b4@2 ~@3", H: "~@3 b4", I: "c#5@2 ~ b4@2 a4@2 g#4", J: "a4@2 ~ g#4@2 ~ e4@2", K: "~@5 g#4 g#4@2",
  L: "[a4@2 ~ g#4@2 f#4@2 f#4@8 ~]/2", M: "~@2 g4!2 g4@2 g4@2", N: "a4@2 g4 g4@2 ~@3", O: "~@2 g4!2 g4@2 ~ g4",
  P: "[a4 a4@2 a4@2 b4@2 b4@2 ~@5 b4!2]/2", Q: "c5@3 b4@2 ~@2 b4", R: "b4@2 a4 a4@2 ~ g4@2",
  S: "[g4@2 f#4 f#4@2 ~ e4 e4@2 ~@7]/2",
})).s("gm_orchestral_harp").gain(0.8)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@8 A B C D A B C D A B C D A B C D B E F E F E F E G@4 A B C D A B C D A B C D A B C D B E F E F E F E G@4 A B C D A
  B C D A B C D A B C D B E F E F E F E G@12 F@4 G@4 F@4 G@4 F@4 G@4 F@4 G@7 ~@13
>`.pickRestart({
  A: "g#1", B: "e2", C: "d2", D: "b1", E: "f#2", F: "g2", G: "a2",
})).s("gm_fretless_bass").gain(0.64)

// bass · fretless bass
const bass_2 = note(`<
  ~@8 A B C D A B C D A B C D A B C D E F E F E F E F G@4 A B C D A B C D A B C D A B C D E F E F E F E F G@4 A B C D A
  B C D A B C D A B C D E F E F E F E F G@12 E@4 G@4 E@4 G@4 E@4 G@4 E@4 G@7 ~@13
>`.pickRestart({
  A: "g#1!8", B: "e2!8", C: "d2!8", D: "b1!8", E: "g2!8", F: "f#2!8", G: "a2!8",
})).s("gm_fretless_bass").gain(0.64)

// other · pad warm · "Synth"
const pad_warm = note(`<
  ~@8 A B C D A B C D A B E D A B E D F C G H F C I J H@4 A B C D A B C D A B E D A B E D F C G H F C I J H@4 A B C D A
  B C D A B E D A B E D F C G H F C I J H@4 K@2 L@2 K@2 M@2 G@3 N O@4 P@2 G N Q@4 G@4 R G R N S@4 H@4 ~@16
>`.pickRestart({
  A: "b4", B: "g#4", C: "f#4", D: "d4", E: "f#4@8 [b3,d4]@3 [b3,e4]@2 [b3,f#4]@3", F: "e4@6 d4 e4", G: "g4", H: "a4",
  I: "g4@6 f#4 g4", J: "[a3,a4]", K: "[a4 g4@3]/2", L: "[g4@3 g4]/2", M: "[g4@6 g4 a4]/2", N: "e5@3 d5@3 e5@2",
  O: "[a4@3 ~@5 e5@3 d5@3 e5@2, ~@3 g4@6 ~@7]/2", P: "[a4@3 g4@12 ~]/2",
  Q: "[a4@3 ~@5 a4@3 ~@5 a4@3 ~@5 a4@3 g4@3 a4@2, ~@3 g4@6 ~@2 g4@6 ~@2 g4@6 ~@7]/4", R: "a4 g4",
  S: "[a4@3 ~@5 a4@3 ~@5 a4@3 ~@5 e5@3 d5@3 e5@2, ~@3 g4@6 ~@2 g4@6 ~@2 g4@6 ~@7]/4",
})).s("gm_pad_warm").gain(0.64)

// other · pad warm · "Synth" · soft notes
const pad_warm_soft = note("<~@12 A@2 B C A@2 ~@22 A@2 B C A@2 ~@22 A@2 B C A@2 ~@58 D@8 ~@8>".pickRestart({
  A: "e4", B: "d4", C: "a3", D: "a4",
})).s("gm_pad_warm").gain(0.32)

// other · percussive organ
const percussive_organ = note(`<
  ~@8 A B C D A B C D A B C D A B C D E C F G F C F G H G@3 A B C D A B C D A B C D A B C D E C F G F C F G H G@3 A B C
  D A B C D A B C D A B C D E C F G F C F G H G@3 I@2 J@2 I@2 K@2 F@3 L M@4 N@2 F L O F O F@5 P F P L Q@4 G@4 ~@16
>`.pickRestart({
  A: "b4", B: "g#4", C: "f#4", D: "d4", E: "e4", F: "g4", G: "a4", H: "[a3,a4]", I: "[a4 a4@3]/2", J: "[a4@3 a4]/2",
  K: "[a4@6 g4 a4]/2", L: "e5@3 d5@3 e5@2", M: "[a4@3 ~@5 e5@3 d5@3 e5@2, ~@3 g4@6 ~@7]/2", N: "[a4@3 g4@12 ~]/2",
  O: "a4@3 g4@4 ~", P: "a4 g4", Q: "[a4@3 ~@5 a4@3 ~@5 a4@3 ~@5 e5@3 d5@3 e5@2, ~@3 g4@6 ~@2 g4@6 ~@2 g4@6 ~@7]/4",
})).s("gm_percussive_organ").gain(0.64)

// other · percussive organ · soft notes
const percussive_organ_soft = note("<~@132 a4!8 ~@8>").s("gm_percussive_organ").gain(0.16)

// drums · kick
const kick = s("bd").struct("<[x ~@4 x ~ x]!139 ~@9>").gain(0.35)

// drums · snare
const snare = s("sd").struct("<[~ x ~@2]!139 ~@9>").gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@4 x!4]!3 [~@4 x!2 ~@2] [~@4 x!4]!3 [~@4 x!2 ~@2] [~@4 x!4]!131 ~@9>").gain(0.26)

// drums · high tom
const high_tom = s("ht").struct("<[~@3 x ~@4]!3 [~@3 x ~@2 x!2] [~@3 x ~@4]!3 [~@3 x ~@2 x!2] [~@3 x ~@4]!131 ~@9>")
  .gain(0.26)

// drums · splash
const splash = s("cr").struct(`<
  ~@8 A ~@23 A ~@3 A ~@15 A ~@7 A ~@3 A ~@15 A ~@7 A ~@11 A ~@11 A ~@15 A ~@3 A ~@15
>`.pickRestart({
  A: "x",
})).gain(0.35)

// drums · congas
const congas = s("conga:33").struct("<[~@3 x!5]!139 ~@9>").gain(1.4)

// drums · lt
const lt = s("lt").struct("<[~ x!2 ~@5]!139 ~@9>").gain(0.44)

stack(
  piano, orchestral_harp, bass, bass_2, pad_warm, pad_warm_soft, percussive_organ, percussive_organ_soft, kick, snare,
  mid_tom, high_tom, splash, congas, lt
)

More by The Cure