Strudelify

Crazy Times

Jars of Clay

KeyF♯ minorTempo89 bpm
0:00/0:00
// Crazy Times — Jars of Clay
// 89 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Dist. Gui, Dist. Gui.
setcpm(89/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.

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  A@3 B A@3 B A@3 C D E D E D E F B A@3 B A@3 C D E D E D E F B G@2 H@2 G@2 I@2 D E D J F A@3 B A@3 C ~@2 D E D E D E F
  B A@3 B A@3 K@3
>`.pickRestart({
  A: "[a3,c#4,f#4]@4 [a3,c#4,f#4]@3 [a3,c#4,f#4]!2 [a3,b3,f#4] [a3,b3,f#4]@2 [a3,b3,f#4]@2 [a3,b3,f#4]!2", // F#m B7
  B: "[g#3,c#4,f#4,g#4]!7 [b3,e4]", C: "[a3,c#4,e4]!4 [b3,e4] ~ [b3,e4]@2",
  D: "[a#3,c#4,f#4]@2 [a#3,c#4,f#4]@2 [a#3,c#4,f#4]@2 [a#3,c#4,f#4]!2 [d4,f#4]@2 [d4,f#4]@2 [d4,f#4]@2 [d4,f#4]!2", // F# D
  E: "[a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]!2 [b3,e4]@2 [b3,e4]@2 [b3,e4]@2 [b3,e4]!2", // A E5
  F: "[b3,d4,f#4]!8", G: "[d4,f#4]!8", H: "[c#4,f#4]!8", I: "[g#3,c#4,f4,g#4]!8",
  J: "[a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a3,c#4,e4]!2 [b3,d4,f#4]@2 [b3,d4,f#4]@2 [b3,d4,f#4]@2 [b3,d4,f#4]@2", // A Bm
  K: "[~@9 g#4@28 ~@11, g#3@11 ~, ~ c#4@20 ~@3, ~ f#4@6 ~]/3",
})).s("gm_acoustic_guitar_steel").gain(0.31)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel_2 = note(`<
  ~@11 A B C B C B C D ~@8 A B C B C B C D ~ E@2 F@2 E@2 ~@2 B C B G D ~@7 A ~@2 B C B C B C D ~@11
>`.pickRestart({
  A: "e3!4 [b2,e3,g#3] ~ [b2,e3,g#3]@2", B: "f#3@2 f#3@2 f#3@2 f#3!2 [d3,a3]@2 [d3,a3]@2 [d3,a3]@2 [d3,a3]!2",
  C: "e3@2 e3@2 e3@2 e3!2 [e2,b2,g#3]@2 [e2,b2,g#3]@2 [e2,b2,g#3]@2 [e2,b2,g#3]!2", D: "f#3!8", E: "[d3,a3]!8",
  F: "[f#3,a3]!8", G: "e3@2 e3@2 e3@2 e3!2 f#3@2 f#3@2 f#3@2 f#3@2",
})).s("gm_acoustic_guitar_steel").gain(0.31)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@4 A@3 B A@3 C D E D E D E F G A@3 B A@3 C D E D E D E F G H@2 I@3 J K@2 D E D L M ~@4 A@3 C D E D E D E D E F N ~@10
>`.pickRestart({
  A: "c#3@4 ~@3 b2", B: "g#2@3 ~ c#2@2 ~ b2", C: "a2!4 ~@2 e2 ~", D: "c#3!4 a2!4", E: "c#2!4 e2!3 f2", F: "d2!4 d2@3 ~",
  G: "c#2@4 ~@3 b2", H: "a2@3 ~ a2@3 ~",
  I: "[~@8 f#2@3 ~@5 d2@3 ~ d2@3 ~, f#2@3 ~ f#2@3 ~@5 f#2@3 ~@9, ~@2 f#3@3 ~ c#3@3 ~@5 c#2@3 ~@7]/3",
  J: "~@4 a2@3 ~, d2@3 ~", K: "[c#3@7 ~]/2", L: "c#2!4 d2@3 ~", M: "f#2@3 ~", N: "c#2 ~",
})).s("gm_electric_bass_finger").gain(0.36)

// chords · overdriven guitar · "Dist. Gui"
const overdriven_guitar = note("<~@19 A ~@15 A ~@20 B C D ~@7 A ~@10>".pickRestart({
  A: "~@4 f4@3 ~", B: "~@4 [f#4,f#5] ~ [f#4,f#5] ~", C: "~@4 [a#3,c#4,f#4]@2 [a#3,c#4,f#4]!2 ~@4 [d4,f#4]@2 [d4,f#4]!2",
  D: "~@4 [a3,c#4,e4]@2 [a3,c#4,e4]!2 ~@4 [b3,e4]@2 [b3,e4]!2", // A E5
})).s("gm_overdriven_guitar").gain(0.31)

// other · acoustic guitar steel · "Mandolin"
const acoustic_guitar_steel_3 = note("<~@71 A B C D@3>".pickRestart({
  A: "f#4@3 ~ e4 ~ f#4@2 ~ f#4@2 ~ f#4 ~ g#4 ~", B: "a4@2 ~ g#4@2 ~ f#4@2 ~@2 e4 ~ d4 ~ a3 ~",
  C: "c#4@2 ~ f#4@2 ~ a3@2 ~@2 f#4 ~ e4 ~ c#4 ~", D: "[~@9 g#4@28 ~@11, g#3@11 ~, ~@2 c#4@41 ~@5, ~ f#4@6 ~]/3",
})).s("gm_acoustic_guitar_steel").gain(0.36)

// other · overdriven guitar · "Guitar So"
const overdriven_guitar_2 = note("<~@38 A@3 ~@3 B C@2 D E F@2 ~@26>".pickRestart({
  A: "[~@2 f#5@3 ~ g#5@3 ~ a5@3 ~ b5@3 ~@7]/3", B: "a5@2 ~ a5@2 ~ a5@2",
  C: "[~@2 a5@4 ~@2 a5@4 ~@2 a5@4 e5@2 f#5@2 e5@2 a4@2 ~@2 f#4 e4 d4@2]/2", D: "e4!2 g#4 a4 b4@2 ~ b4",
  E: "c#5@2 ~ c#5 d5@2 ~ e5", F: "[f#5@7 ~, f5 ~@31]/2",
})).s("gm_overdriven_guitar").gain(0.36)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B C D C E B F G@3 H G@3 I A B C D C E B F G@3 H G@3 I G@3 J G@3 K G@4 L M ~@3 C E B F G@3 H G@5 I ~@10
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@4 x ~@2 x ~@3", C: "~@4 x ~@7 x ~@2 x", D: "~@2 x ~@3 x!2", E: "~@4 x ~@4 x ~@2 x ~@2 x",
  F: "~@2 x!3 ~ x ~", G: "~@4 x ~@2 x ~@4 x ~@2 x", H: "~@4 x ~@2 x ~@8", I: "~@4 x ~@2 x ~@4 x ~ x ~",
  J: "~@4 x ~@2 x ~@4 x!4", K: "~@4 x ~ x ~ x!8", L: "~@4 x!4", M: "x",
})).gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~@15 [~@3 x] ~@15 [~@3 x] ~@28 [~@3 x] ~@16>").gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@11 A ~@3 A ~@11 A ~@3 A ~@12 B ~ B ~@2 B ~@6 A ~@3 A ~@16>".pickRestart({
  A: "~@2 x!2", B: "x",
})).gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<~@12 A@3 B A@3 B ~@8 A@3 B A@3 B A@13 ~@8 A@3 B A@5 B ~@10>".pickRestart({
  A: "x!8", B: "x!4 ~@4",
})).gain(0.36)

// drums · high tom
const high_tom = s("ht").struct("<~@11 A ~@3 B ~@15 B ~@28 B ~@16>".pickRestart({
  A: "~@2 x!2", B: "~ x",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@11 A ~@15 A ~@16 B ~ B ~@2 B ~@6 A ~@20>".pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.36)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, bass, overdriven_guitar, acoustic_guitar_steel_3, overdriven_guitar_2,
  kick, snare, low_tom, mid_tom, open_hat, high_tom, crash
)