Strudelify
Justified and Ancient cover art

Solid State Logik 1

Justified and Ancient

The KLF

KeyC♯ minorTempo118 bpm
0:00/0:00
// Justified and Ancient — The KLF
// 118 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 6 "Ch  6" Deep Snare -> synth drum; ch 12 "Ch 12" Funny Vox -> lead 6 voice
// note: Full arrangement: all 98 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): Ch 13.
// note: The whole transcription plays 49 ms behind the beat; the grid follows it, so its parts stay together.
setcpm(118/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, A@4 for four bars: edit a riff to change every repeat.

// bass · synth bass 2 · "Ch  1"
const bass = note(`<
  ~@4 A B@7 C D E F G D E F ~@8 A B@11 C D E F G D E F ~@8 A B@7 H ~@7 A B@6 I A B@15 H ~
>`.pickRestart({
  A: "~@2 c#2 ~ c#2 ~ g#1 ~ b1 c#2 ~ c#2!2 ~ g#1 ~", B: "b1 ~ c#2 ~ c#2 ~ g#1 ~ b1 c#2 ~ c#2!2 ~ g#1 ~",
  C: "b1 ~ e2@5 ~@2 e2 ~@2 e2@4", D: "~@2 g#1@5 ~@2 g#1 ~@2 g#1@4", E: "~@2 a1@5 ~@2 a1 ~@2 a1@4",
  F: "~@2 b1@5 ~@2 b1 ~@2 b1@4", G: "~@2 e2@5 ~@2 e2 ~@2 e2@4", H: "b1 ~@15", I: "b1 ~ c#2 ~@13",
})).s("gm_synth_bass_2").gain(0.58)

// chords · string ensemble 2 · "Ch  2"
const string_ensemble_2 = note("<A@8 B@3 ~ C@8 D@8 E@8 F@4 C@8 D@8 E@8 ~@8 G@8 E@8 H@8 I@2>".pickRestart({
  A: "[~ [b5,c#6,e6,g#6]@32 [c#5,e5,g#5,c#6]@16 [f#4,a4,c#5,f#5]@15]/8", B: "[~ [c#5,e5,g#5,c#6]@16 ~@7]/3",
  C: "[~ [e4,g#4,b4]@8 [d#4,g#4,b4]@8 [c#4,e4,a4]@8 [d#4,f#4,b4]@8 [e4,g#4,b4]@8 [d#4,g#4,b4]@8 [c#4,e4,a4]@8 [d#4,f#4,b4]@7, ~ e6@32 e6@31]/8", // E G#m A B E G#m A B
  D: "[~ [a4,c#5,e5]@8 [b4,e5,g#5]@8 [a4,c#5,e5]@8 [e5,g#5,b5]@8 [a4,c#5,e5]@8 [e5,g#5,b5]@8 [b4,d#5,f#5]@15]/8", // A E A E A E B
  E: "[~ [c#5,e5,g#5,c#6]@16 [f#4,a4,c#5,f#5]@16 [c#5,e5,g#5,c#6]@16 [f#4,a4,c#5,f#5]@15]/8", // C#m F#m C#m F#m
  F: "[~ [c#5,e5,g#5]@16 [f#4,a4,c#5]@15]/4", // C#m F#m
  G: "[~ [c#5,e5,g#5]@16 [f#5,a5,c#6]@16 [c#5,e5,g#5]@16 [f#5,a5,c#6]@8 ~@7]/8", // C#m F#m C#m F#m
  H: "[~ [c#5,e5,g#5]@16 [f#4,a4,c#5]@16 [c#5,e5,g#5]@16 [f#4,a4,c#5]@15]/8", I: "[~ [e5,g#5,b5,c#6]@8 ~@7]/2",
})).s("gm_string_ensemble_2").gain(0.19)

// other · tubular bells · "Ch  3"
const tubular_bells = note(`<
  ~@4 A B C D E ~ F D G H I J K H I J L M ~@4 N@2 A B C D O B C D O B C D G H I J K H I J L M ~@4 N@2 A B C D O B C D E
  ~@3 P Q@9 R S A B C D O B C D O B C D O B C D T U
>`.pickRestart({
  A: "~@2 a#6!14", B: "a#6!16", C: "a#6!2 f#5!14", D: "f#5!16", E: "f#5!2 ~@14", F: "~@2 f#5!14", G: "f#5!2 c6!14",
  H: "c6!16", I: "c6!2 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6", J: "~ c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6 ~ c6", K: "~ c6!15",
  L: "~ c6 a5!14", M: "a5!2 ~@14", N: "[~ [b3,b4,b5]@8 ~@7]/2", O: "f#5!2 a#6!14", P: "~@2 c#6!14", Q: "c#6!16",
  R: "c#6!2 d6!14", S: "d6!3 ~@13", T: "f#5!2 c#5!14", U: "c#5!2 ~@14",
})).s("gm_tubular_bells").gain(0.4)

// chords · piano · "Ch  4"
const piano = note(`<
  ~@4 A ~@2 B ~@12 C D E D E D ~@2 A ~@2 B A ~@2 B A ~@2 B ~@8 C D E D E D ~@2 A ~@2 B A ~@2 B ~@16 A ~@2 B A ~@2 B A
  ~@2 B A ~@2 B ~@2
>`.pickRestart({
  A: "~@2 [g#3,c#4,e4]@3 ~@11", B: "~@9 [a3,c#4,f#4] ~@2 [a3,c#4,f#4]@4", C: "~ [a3,c#4,e4]@2 ~@5",
  D: "~@11 [g#3,b3,e4] ~@2 [g#3,b3,e4]@2", E: "~@2 [a3,c#4,e4]@5 ~@9",
})).s("gm_piano").gain(0.52)

// chords · distortion guitar · "Ch  5"
const distortion_guitar = note(`<
  ~@4 A B ~@2 A B ~@17 C D B ~@2 A B ~@21 C D B ~@2 A B ~@2 E@3 F E@3 F E@3 F E@3 G A B ~@2 A B ~@11 H
>`.pickRestart({
  A: "~@2 c#4@3 ~ g#3@3 ~ e3@2 ~@2 f#3 e3", B: "c#3 ~ c#4@2 ~@2 g#3@2 ~@8", C: "~@12 g#3 ~ b3 ~",
  D: "c4 ~ c#4@3 ~ g#3@3 ~ e3@2 ~@2 f#3 e3", E: "~@2 [c#2,c#3,g#3] ~@6 [c#2,c#3,g#3] ~@2 [c#2,c#3,g#3] ~@3",
  F: "~@2 [c#2,c#3,g#3] ~@6 [c#2,c#3,g#3] ~ [c#2,c#3,g#3]!2 ~@3", G: "~@2 [c#2,c#3,g#3] ~@13", H: "~ [c#2,c#3] ~@6",
})).s("gm_distortion_guitar").gain(0.49)

// chords · distortion guitar · "Ch  5" · soft notes
const distortion_guitar_soft = note("<~@5 A ~@3 A ~@19 A ~@3 A ~@23 A ~@3 A ~@19 A ~@3 A ~@12>".pickRestart({
  A: "~@5 e3 ~ c#3",
})).s("gm_distortion_guitar").gain(0.33)

// other · synth drum · "Ch  6"
const synth_drum = note("<~@4 A B@15 C ~ D ~ D ~ D ~ A B@19 C ~ D ~ D ~ D ~ A B@7 C ~@15 A B@15 C ~>".pickRestart({
  A: "~@9 d3 ~ d3!2 ~@3", B: "d3 ~@8 d3 ~ d3!2 ~@3", C: "d3 ~@15", D: "e0 ~ e0@8 ~@6",
})).s("gm_synth_drum").gain(0.8)

// other · french horn · "Ch  9"
const french_horn = note("<~@14 A@3 ~ B@5 C@8 ~@11 A@3 ~ D@8 E ~@43>".pickRestart({
  A: "[~ a3@8 b3@8 ~@7]/3", B: "[~ a3@8 b3@8 c#5@8 e5@3 d5@3 b4@2 c#5@7]/5",
  C: "[~ e5@8 c#5@8 ~@4 d#5@3 e5 b4 ~@38, ~ d5@63, ~@17 e5@5 ~@42]/8",
  D: "[~ a3@8 b3@8 c#5@8 e5@3 ~@3 b4@2 c#5@8 e5@8 c#5@8 ~@4 d#5@3, ~@56 d5@26 d5@3 ~@29 e5@10 ~@4]/8", E: "e5 b4 ~@6",
})).s("gm_french_horn").gain(0.26)

// drums · kick
const kick = s("bd").struct("<~@4 A@16 ~@6 B ~ A@20 ~@6 B ~ A@8 C@8 A@4 D@3 B A@16 ~@2>".pickRestart({
  A: "~ x ~ x ~ x!3", B: "~ x ~@6", C: "~@2 x ~@6 x ~@2 x ~@3", D: "~ x ~ x ~ x ~ x",
})).gain(0.8)

// drums · rim
const rim = s("rim").struct("<~@64 [~@3 x ~@3 x]!15 ~@19>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@4 A@16 ~@8 A@20 ~@8 A@8 ~@12 A@3 ~ A@16 ~@2>".pickRestart({
  A: "~@3 x ~@3 x",
})).gain(0.56)

// drums · clap
const clap = s("cp").struct("<~@4 A@16 ~@8 A@20 ~@8 A@8 ~@12 A@3 ~ A@16 ~@2>".pickRestart({
  A: "~@3 x ~@3 x",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@97 [~ x ~@6]>").gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [~@2 x!14] [x!16]!74 [x!3 ~@13] [~@2 x!14] [x!16]!15 [x!2 ~@14] ~>").gain(0.72)

// drums · bongos
const bongos = s("bongo:18").struct("<~@80 x ~@17>").gain(1.68)

// drums · congas
const congas = s("conga:13").struct("<~@79 [~@11 x!4 ~] ~@18>").gain(2.05)

// drums · shaker
const shaker = s("sh").struct("<~@4 [~ x!3] [x!4]!74 x [~ x!3] [x!4]!15 x ~>").gain(0.72)

// drums · guiro
const guiro = s("guiro:0").struct("<~@79 [~@15 x] ~@18>").gain(13.52)

stack(
  bass, string_ensemble_2, tubular_bells, piano, distortion_guitar, distortion_guitar_soft, synth_drum, french_horn,
  kick, rim, snare, clap, crash, tambourine, bongos, congas, shaker, guiro
)

More by The KLF