Strudelify

Church of the Poison Mind

Culture Club

KeyG minorTempo130 bpm
0:00/0:00
// Church of the Poison Mind — Culture Club
// 130 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 6 drawbar organ (copy of ch 4 music box)
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · acoustic bass · ""Church Of"
const bass = note("<~@64 A B C B C B D E ~@56>".pickRestart({
  A: "a2", B: "g2@6 d2 e2", C: "f2", D: "f2@5 ~ f2@2", E: "g2@7 ~ g2@6 ~@2",
})).s("gm_acoustic_bass").gain(0.46)

// bass · fretless bass · "The Poison"
const bass_2 = note(`<
  A ~ A B C D A E F G F H I J F K F G F H I G F K L M L M N M O P F G F H I G F K F G F H I G F K L M L M N M O P Q R S
  T U R S T V W X W X W Y Z F G F H I G F K F G F H I G F K L M L M N M O P F G F H I G F K F G F H I G F K F G F H I G
  F K F G F H I G F K
>`.pickRestart({
  A: "c2 ~ c2 ~@5", B: "~@6 g2@3 ~ g2 ~ f2@2 ~@2", C: "c2@3 ~ c2@3 ~@9", D: "~@6 g2@2 ~@2 g2@2 a2@2 c3 ~",
  E: "~@6 g2@3 ~ g2@2 f2@2 ~@2", F: "c2 ~ c2 ~ c2 d2 e2 g2", G: "~@2 g2@2 ~@2 g2@2 ~@2 g2@2 f2@2 g2 ~",
  H: "~@2 g2@2 ~@2 g2@2 ~@2 g2@2 a2@2 c3 ~", I: "c2 ~ c2 ~ c2 d2 e2 f2", J: "~@2 g2@2 ~@2 g2@2 ~@2 g2@2 g2@2 g2 ~",
  K: "~@2 g2@2 ~@2 g2@2 ~@2 g2 ~ f2@2 ~@2", L: "f1 ~ f1 ~ f1 c1 f1 c1", M: "g1 ~ g1 ~ g1 d1 g1 d1",
  N: "f1 ~ f1 ~ f1 c1 f1 [bb0,c1]", O: "~ f1@2 ~ f1@2 ~@2 f1@2 c1@2 f1@2 c1@2",
  P: "g1@2 ~@2 g1@2 ~@2 g1@2 d1@2 g1@2 d1 ~", Q: "c2@3 ~ c2@2 ~@2 c2@2 g1@2 a1@2 bb1@2", R: "~ bb1 ~ bb1 ~ g1 bb1 c2",
  S: "c1@3 ~ c2@2 ~@2 c2@2 g1@2 a1@2 bb1@2", T: "~@2 bb1@2 ~@2 bb1 ~ bb1 ~ bb1@2 a1@2 ~@2", U: "c2 ~ c2 ~ c2 g1 a1 bb1",
  V: "a1", W: "g1@6 d1 e1", X: "f1", Y: "f1@5 ~ f1@2", Z: "g1@7 ~ g1@6 ~@2",
})).s("gm_fretless_bass").gain(0.51)

// other · guitar harmonics · "Paul"
const guitar_harmonics = note("<A B A B A B A B A B A C A B D B ~@56 A B A C A B D B ~@48>".pickRestart({
  A: "g6 ~@5 g6 ~@5 g6 ~@3", B: "~@2 g6 ~@5 g6 ~@3 c6 ~@3", C: "bb7 ~ [g6,a7]@2 ~@2 f7@2 g6 ~ g7@2 c6 ~@3",
  D: "g6 ~@5 g6 ~@5 g6 ~ c8@2",
})).s("gm_guitar_harmonics").gain(0.51)

// other · harmonica · "Rodger"
const harmonica = note("<~@7 A B@2 C@2 D E F@2 ~@56 B@2 C@2 D E F@2 ~@31 A B@2 C@2 D E G@2 H@2 ~@6>".pickRestart({
  A: "~@13 g4 c5 ~", B: "[f5@22 ~@2 f5@3 ~ f5@3 ~]/2", C: "[e5@2 c5@2 ~@2 g4@23 g4 c5 ~]/2", D: "f5",
  E: "~@2 a5@3 ~ bb5@6 a5@3 ~", F: "[g5 ~ d5@4 c5@21 ~@5]/2", G: "[g5 ~ d5@4 c5@21 ~@2 g4 c5 ~]/2",
  H: "[f5@22 ~@2 f5@3 ~@5]/2",
})).s("gm_harmonica").gain(0.8)

// other · harmonica · "Rodger" · soft notes
const harmonica_soft = note("<~@7 A ~@3 A ~@63 A ~@35 A ~@3 A ~@3 A ~ B C@2 D E F@2>".pickRestart({
  A: "~@15 e5", B: "~@12 f5@3 ~", C: "[e5@2 c5@2 ~@2 g4@23 g4 c5 e5]/2", D: "f5", E: "~@2 a5@3 ~ bb5@6 a5@3 ~",
  F: "[g5 ~ d5@4 c5@21 ~@5]/2",
})).s("gm_harmonica").gain(0.4)

// chords · guitar harmonics · "(London UK)"
const guitar_harmonics_2 = note(`<
  ~@8 A B C B C B C B A B C B C B C B D E D E D E D E A B C B C B C B A B C B C B C B D E D E D E D E A B C B C B C B
  ~@8 A B C B C B C B A B C B C B C B D E D E D E D E A B C B C B C B A B C B C B C B A B C B C B C B A B F ~@5
>`.pickRestart({
  A: "~@2 [c6,e6] ~@3 [c6,e6] ~", B: "~@4 [bb5,d6] ~@7 [bb5,d6] ~@3", C: "~@4 [c6,e6] ~@7 [c6,e6] ~@3",
  D: "~@4 [c5,f5] ~@7 [c5,f5] ~@3", E: "~@4 [d5,g5] ~@7 [d5,g5] ~@3", F: "~@4 [c6,e6] ~@11",
})).s("gm_guitar_harmonics").gain(0.46)

// chords · guitar harmonics · "(London UK)" · soft notes · C Bb C Bb C Bb
const guitar_harmonics_soft = note(`<
  ~@122
  [~@12 [c6,e6] ~@3]
  [~@4 [bb5,d6] ~@7 [bb5,d6] ~@3]
  [~@4 [c6,e6] ~@7 [c6,e6] ~@3]
  [~@4 [bb5,d6] ~@7 [bb5,d6] ~@3]
  [~@4 [c6,e6] ~@7 [c6,e6] ~@3]
  [~@4 [bb5,d6] ~@7 [bb5,d6] ~@3]
>`).s("gm_guitar_harmonics").gain(0.15)

// other · overdriven guitar
const overdriven_guitar = note("<A B A B A B A B ~@56 C D E D F D G H ~@56>".pickRestart({
  A: "c5 ~ c5 ~ c5 g4 a4 bb4", B: "~ bb4 ~ bb4 d5 bb4 c5 ~", C: "e4", D: "g4@3 e4", E: "f4", F: "f4@3 e4",
  G: "f4@11 ~ f4@4", H: "g4@3 ~",
})).s("gm_overdriven_guitar").gain(0.12)

// chords · percussive organ
const percussive_organ = note(`<
  ~@4 A@4 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 F@2 G@4 H@2 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 F@2 G@4 H@2 B@2 C@2 D@2 E@2 ~@8
  B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 F@2 G@4 H@2 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 B@2 C@2 D@2 E@2 B@2 I@2 ~@4
>`.pickRestart({
  A: "[[g4,c5]@13 ~ [g4,bb4]@17 ~]/2", B: "[[g4,c5]@12 [g4,c5] ~ [g4,bb4]@13 ~ [g4,c5]@3 ~]/2",
  C: "[[g4,c5]@11 ~ [g4,c5] ~ [g4,bb4]@13 ~ [g4,c5]@3 ~]/2", D: "[[g4,c5]@11 ~ [g4,c5] ~ [g4,bb4]@17 ~]/2",
  E: "[[g4,c5]@11 ~ [g4,c5] ~ [g4,bb4]@18]/2", F: "[[f4,a4]@13 ~ [g4,b4]@13 ~ [g4,b4]@3 ~]/2",
  G: "[[f4,a4]@11 ~ [f4,a4] ~ [g4,b4]@17 ~]/2", H: "[[f4,a4]@13 ~ [g4,b4]@16 ~@2]/2",
  I: "[[g4,c5]@11 ~ [g4,c5] ~ [g4,bb4]@13 ~@5]/2", // C5 Gm
})).s("gm_percussive_organ").gain(0.41)

// chords · percussive organ · soft notes
const percussive_organ_soft = note("<~@123 A B@2 C@2>".pickRestart({
  A: "~@12 [g4,c5]@3 ~", B: "[[g4,c5]@11 ~ [g4,c5] ~ [g4,bb4]@17 ~]/2", C: "[[g4,c5]@11 ~ [g4,c5] ~ [g4,bb4]@18]/2",
})).s("gm_percussive_organ").gain(0.15)

// other · brass section
const brass_section = note(`<
  ~@31 A ~@3 A ~@3 A ~@15 A ~@3 B ~@3 A ~@7 C ~@3 A ~@3 D ~@15 A ~@3 E ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@8
>`.pickRestart({
  A: "~@4 [g4,g5] ~ [g4,g5] ~", B: "~@4 g4 ~ g4 ~, ~@8 g5 ~@3 g5 ~@3", C: "~@4 [g4,b4,d5] ~ [g4,b4,d5] ~",
  D: "~@4 g4 ~ [g4,g5] ~, ~@8 g5 ~@7", E: "~@4 [g4,g5] ~ [g4,g5,a5] ~",
})).s("gm_brass_section").gain(0.51)

// other · brass section · soft notes · G
const brass_section_soft = note("<~@123 [~@4 [g4,g5] ~ [g4,g5] ~] ~@4>").s("gm_brass_section").gain(0.15)

// drums · kick
const kick = s("bd").struct("<[~@5 x ~ x]!64 [x ~@6 x]!7 [x!2] [~@5 x ~ x]!56>").gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  A@7 B A@7 B A@15 B A@7 B A@15 B A@8 C D E D C@2 F G A@7 B A@15 B A@7 B A@7 B A@7 B A@3 H ~@4
>`.pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x ~ x!3 ~ x ~", C: "~@8 x!4 ~@4", D: "~@8 x!2 ~@6", E: "~@8 x!2 ~ x ~@4",
  F: "~@8 x ~@2 x ~@4", G: "~@8 x ~@2 x!2 ~ x ~", H: "x",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@65 A B A ~@2 C ~@52 D E@3 F>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~@5 x ~@2", C: "~@9 x!2 ~@5", D: "~ x!3", E: "x!4", F: "x ~@3 x ~@3 x ~ x!3 ~ x ~",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@64 [~@6 x!2]!7 ~@57>").gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  A ~@3 A ~@3 A ~@7 A ~@15 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A@9 ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3
>`.pickRestart({
  A: "x",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct("<[x!8]!122 [x!6 ~@2] ~@5>").gain(0.8)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@122 [~@6 x!2] [x!8]!5>").gain(0.24)

stack(
  bass, bass_2, guitar_harmonics, harmonica, harmonica_soft, guitar_harmonics_2, guitar_harmonics_soft,
  overdriven_guitar, percussive_organ, percussive_organ_soft, brass_section, brass_section_soft, kick, snare,
  snare_soft, low_tom, crash, tambourine, tambourine_soft
)

More by Culture Club