Strudelify

Crimson & Clover

Tommy James

KeyC majorTempo90 bpm
0:00/0:00
// Crimson & Clover — Tommy James
// 90 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 59 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · electric guitar jazz · C A# F G
const electric_guitar_jazz = note(`<
  ~@20
  [[g3,c4,e4] ~ [g3,c4,e4]@4 [g3,c4,e4]@2 [f3,a#3,d4] ~ [f3,a#3,d4]@2 [a3,c4,f4]@2 [a3,c4,f4] f4]!5
  [[b3,d4,g4]!8]
  [[b3,d4,g4]]
  ~@32
>`).s("gm_electric_guitar_jazz").gain(0.35).pan(0.7)

// other · orchestral harp
const orchestral_harp = note("<~@39 A B A B A B ~@2 C D ~@10>".pickRestart({
  A: "e4 g4 c5 e4 d4 g4 b4 d4", B: "c4 f4 a4 c4 d4 g4 b4 g4", C: "[g3,c4,e4]@2 [g3,c4,e4]!2 [g3,b3,e4] d4 [g3,b3,d4]@2",
  D: "[a3,c4,f4]@2 [a3,c4,f4] e4 [g3,b3,e4] d4 [g3,b3,d4]@2", // F Em G
})).s("gm_orchestral_harp").gain(0.45).pan(0.7)

// bass · fretless bass
const bass = note(`<
  ~ A B C B C B C D A B C B C B C B C ~@2 E@5 F G A B C B C B C B C H ~@2 I J I J I J K L K L K L M N M N M N O@2
>`.pickRestart({
  A: "[c2,g2,c3]@2 ~ [c2,g2,c3]!2 [g1,g2]!2 [f1,f2]", B: "[f1,f2] [g1,g2]",
  C: "[c2,c3]@3 [c2,g2,c3]!2 [g1,g2]!2 [f1,f2]", D: "[f1,f2]@3 [f1,f2] [g1,g2]@2 [g1,g2]!2",
  E: "[c2,g2,c3] ~ [c2,g2,c3]@4 [c2,g2,c3]@2 [a#1,f2,a#2] ~ [a#1,f2,a#2]@2 [f1,f2]@2 [f1,f2]@2", F: "[g1,g2]!8",
  G: "[g1,g2]", H: "[f1,f2]@3 [f1,f2] [f1,f2]@2 [f1,f2]@2", I: "[c2,g2,c3]@3 [c2,g2,c3] [g1,g2]@3 [g1,g2]",
  J: "[f1,f2]@3 [f1,f2] [g1,g2]@3 [g1,g2]", K: "[c2,g2,c3]@2 [c2,g2,c3]!2 [g1,g2]!2 [g1,g2]@2",
  L: "[f1,f2]@2 [f1,f2]!2 [g1,g2]!2 [g1,g2]@2", M: "[c2,g2,c3]@2 [c2,g2,c3]!2 [g1,g2]@2 [g1,g2]!2",
  N: "[f1,f2]@2 [f1,f2]!2 [g1,g2]@2 [g1,g2]!2", O: "[c2,g2,c3]/2",
})).s("gm_fretless_bass").gain(0.57).pan(0.4)

// bass · slap bass 2 · F G
const bass_2 = note(`<
  ~@18
  [[f1,f2]@3 [f1,f2] [f1,f2]@2 [f1,f2]!2]
  [[g1,g2]@3 [g1,g2]!5]
  ~@17
  [[g1,g2]@3 [g1,g2] [g1,g2]@2 [g1,g2]!2]
  [[g1,g2]@2 [g1,g2]!6]
  ~@20
>`).s("gm_slap_bass_2").gain(0.64).pan(0.4)

// other · vibraphone
const vibraphone = note("<~@9 A B@4 C@4 ~@41>".pickRestart({
  A: "g4@5 ~@3", B: "[~@5 f4!3 f4@2 e4@2 d4@2 d4@4 c4@4 ~@10]/2", C: "[~@4 f4 e4 d4 d4@2 e4@2 ~@5]/2",
})).s("gm_vibraphone").gain(0.5).pan(0.6)

// chords · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~ A B C B C D C E F B C B C D C D C G H ~@7 A B C B C B C D C D I@2 ~@4 J K ~@6 L M L M L M N@2
>`.pickRestart({
  A: "[e3,g3,c4]@2 ~ [g3,c4,e4]!2 [g3,b3,d4]!2 [f3,a3,c4]", B: "[f3,a3,c4] ~@3",
  C: "~@3 [g3,c4,e4]!2 [g3,b3,d4]!2 [f3,a3,c4]", D: "[f3,a3,c4] ~", E: "[f3,a3,c4] [g3,b3,d4]",
  F: "[g3,c4,e4,g4]@2 ~ [g3,c4,e4]!2 [g3,b3,d4]!2 [f3,a3,c4]", G: "[f3,a3,c4]", H: "[g3,b3,d4]",
  I: "[~ [g3,b3,d4]@15]/2", J: "e4 g4 c5 e4 d4 g4 b4 d4", K: "c4 f4 a4 c4 d4 g4 b4 g4",
  L: "[c4,e4,g4]@2 [c4,e4,g4]!2 [c4,e4,a4]@2 [c4,e4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]!2 [b3,d4,a4]@2 [b3,d4,g4]@2", // C Am C G Bm7 G
  M: "[a3,c4,f4,g4]@2 [a3,c4,f4,g4]!2 [a3,c4,f4,a4]@2 [a3,c4,f4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]!2 [b3,d4,a4]@2 [b3,d4,g4]@2", // F G Bm7 G
  N: "[c4,e4,g4,c5]/2", // C
})).s("gm_lead_8_bass_lead").gain(0.39).pan(0.7)

// chords · pad sweep
const pad_sweep = note("<~ A@4 B@2 A@6 B@2 A@2 C@2 D ~@7 A@4 B@2 A@2 E@2 ~@22>".pickRestart({
  A: "[[e3,g3,c4,e4]@5 [g3,b3,d4,g4]@2 [f3,a3,c4,f4]@5 [g3,b3,d4,g4]@4]/2", // C G F G
  B: "[[e3,g3,c4,e4]@4 ~ [g3,b3,d4,g4]@2 [f3,a3,c4,f4]@5 [g3,b3,d4,g4]@4]/2", // C G F G
  C: "[[e3,g3,c4,e4]@5 [g3,b3,d4,g4]@2 [f3,a3,c4,f4]@9]/2", D: "[g3,b3,d4,g4]",
  E: "[[e3,g3,c4,e4]@5 [g3,b3,d4,g4]@2 [f3,a3,c4,f4]@5 ~@4]/2", // C G F
})).s("gm_pad_sweep").gain(0.48).pan(0.3)

// other · pad choir
const pad_choir = note(`<
  ~@45
  [e4@2 e4!3 d4 d4@2]
  [f4@2 f4 e4!2 d4 d4@2]
  [e4@2 e4!3 d4 d4@2]
  [f4@2 f4 e4!2 d4 d4@2]
  [e4@2 e4!3 d4 d4@2]
  [f4@2 f4 e4!2 d4 d4@2]
  ~@8
>`).s("gm_pad_choir").gain(0.5).pan(0.3)

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

// drums · snare
const snare = s("sd").struct("<~@8 A ~@25 A ~@2 A ~@19 A ~>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~",
})).gain(0.34)

// drums · low tom
const low_tom = s("lt").struct("<~@9 A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@4 A ~@20>".pickRestart({
  A: "~ x",
})).gain(0.42)

// drums · pedal hat
const pedal_hat = s("hh").struct("<A@8 B A@9 C A@6 C A@8 B A@2 B A@18 C B ~>".pickRestart({
  A: "~ x ~ x", B: "x ~ x!2 ~ x ~@2", C: "~@3 x",
})).gain(0.21)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A ~@9 B ~@6 B ~@8 A ~@2 A ~@18 B A ~>".pickRestart({
  A: "~@3 x", B: "~ x ~@2",
})).gain(0.38)

// drums · crash
const crash = s("cr").struct("<~@9 A ~@9 A ~@6 A ~@8 A ~@2 A ~@18 A@2>".pickRestart({
  A: "x",
})).gain(0.38)

// drums · ride
const ride = s("rd").struct(`<
  A ~ A ~ A ~ A ~@2 B C B C B C B C B A@2 ~ A ~ A ~ A@2 B C B C B C B ~ A ~@2 B A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~@2
>`.pickRestart({
  A: "x", B: "~ x!3", C: "x!4",
})).gain(0.29)

// drums · cowbell
const cowbell = s("cb").struct("<A@8 B A@25 B A@2 B A@19 B ~>".pickRestart({
  A: "x!4", B: "x ~ x!2 ~ x!2 ~",
})).gain(0.34)

// drums · congas
const congas = s("conga:13").struct(`<
  A B A B A B A B C A B A B A B A B A D A B A B A B D A@2 B A B A B A C A B C A@2 B A B A B A B A B A B A@2 B A B D C ~
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2", B: "~@2 x!2 ~@2 x ~", C: "x ~@4 x ~ x!3 ~ x!2 ~@3", D: "~@4 x!2 ~ x!2 ~ x!2 ~ x ~@2",
})).gain(1.07)

// drums · congas · soft notes
const congas_soft = s("conga:13").struct("<~@8 A ~@9 B ~@6 B ~@8 A ~@2 A ~@18 B A ~>".pickRestart({
  A: "~ x ~ x!2 ~@11", B: "~ x ~ x ~@12",
})).gain(0.4)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  A B A B A B A B C A B A B A B A B A@3 B A B A B A@3 B A B A B A C A B C A@2 B A B A B A B A B A B A@2 B A B A C ~
>`.pickRestart({
  A: "~@3 x", B: "~@5 x ~@2", C: "~@9 x!3 ~@4",
})).gain(1.07)

// drums · congas · soft notes
const congas_soft_2 = s("conga:18").struct("<~@8 A ~@25 A ~@2 A ~@19 A ~>".pickRestart({
  A: "~ x!3 ~ x!3 ~@8",
})).gain(0.4)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  A B A B A B A B ~ A B A B A B A B A@3 B A B A B A@3 B A B A B A ~ A B ~ A@2 B A B A B A B A B A B A@2 B A B A ~@2
>`.pickRestart({
  A: "x ~@2 x ~@3 x", B: "~ x ~@2 x ~@3",
})).gain(1.07)

// drums · ht
const ht = s("ht").struct("<~@8 A ~@9 B ~@6 B ~@8 A ~@2 A ~@18 B A ~>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x ~@2 x!2 ~ x!2 ~@2 x ~ x ~@2",
})).gain(0.29)

// drums · ht · soft notes
const ht_soft = s("ht").struct("<~@18 [~@3 x ~@12] ~@6 [~@3 x ~@12] ~@30 [~@3 x ~@12] ~@2>").gain(0.17)

// drums · mt
const mt = s("mt").struct("<~@8 A ~@25 A ~@2 A ~@19 A ~>".pickRestart({
  A: "x ~ x!2 ~@4",
})).gain(0.38)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct("<~@9 A B A B A B A B A ~@9 A B A B A B A ~@4 A ~@20>".pickRestart({
  A: "~@2 x ~@2 x ~@2", B: "x ~@2 x ~ x!2 ~",
})).gain(1.07)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  [~@2 x!2 ~@2 x!2]!8
  ~
  [~@2 x!2 ~@2 x!2]!25
  ~
  [~@2 x!2 ~@2 x!2]!2
  ~
  [~@2 x!2 ~@2 x!2]!19
  ~@2
>`).gain(1.28)

// drums · guiro
const guiro = s("guiro:0").struct("<~@10 A ~ A ~ A ~ A ~@11 A ~ A ~ A ~@26>".pickRestart({
  A: "~@7 x",
})).gain(2.66)

stack(
  electric_guitar_jazz, orchestral_harp, bass, bass_2, vibraphone, lead_8_bass_lead, pad_sweep, pad_choir, kick, snare,
  low_tom, pedal_hat, open_hat, crash, ride, cowbell, congas, congas_soft, congas_2, congas_soft_2, congas_3, ht,
  ht_soft, mt, agogo_bells, cabasa, guiro
)

More by Tommy James