Strudelify

Love Religion

U96

KeyF minorTempo162 bpm
0:00/0:00
// Love Religion — U96
// 162 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 144 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(162/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 · lead 8 bass lead · "BASS&LEAD"
const lead_8_bass_lead = note(`<
  A B C D A B C D A E A E A E A F A E A@3 C@2 E A@4 C E A@6 C E A@3 E A E A E A F ~@12 A E A E A E A@3 C@2 E A@4 C E A@6
  C E A@2 ~@24 A B A B C D A@6 C E A@6 C E A@6 C E A@2
>`.pickRestart({
  A: "eb4 ~ f4 ~ f4 ~ f4 ~ eb4 ~ f4 ~ ab4 ~ f4 ~", B: "~@2 f4 ~ ab4 ~ f4 ~@3 f4 ~ ab4 ~ f4 ~",
  C: "bb3 ~ c4 ~ c4 ~ c4 ~ bb3 ~ c4 ~ eb4 ~ c4 ~", D: "~@2 c4 ~ eb4 ~ c4 ~@3 c4 ~ eb4 ~ c4 ~",
  E: "bb3 ~ c4 ~ c4 ~ c4 ~ bb3 ~ c4 ~ eb4 ~ g4 ~", F: "f4 ~ f4 ~ g4 ~ g4 ~ ab4 ~ ab4 ~ bb4 ~ bb4 ~",
})).s("gm_lead_8_bass_lead").gain(0.1).pan(0.4)

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  A ~ B ~ A ~ B ~ C D C D C D C E C D C@3 B@2 D C@4 B D C@6 B D C@3 D C D C D C E F G H I J@2 K G J@2 K G C D C D C D
  C@3 B@2 D C@4 B D C@6 B D C@2 F G H I F G H I J@2 K G J@2 K G ~@8 A ~ A ~ B ~ A@2 C@4 B D C@6 B D C@6 B D C@2
>`.pickRestart({
  A: "eb2@2 f2 ~ f2 ~ f2 ~ eb2@2 f2 ~ ab2 ~ f2 ~", B: "bb1 ~ c2 ~ c2 ~ c2 ~ bb1 ~ c2 ~ eb2 ~ c2 ~",
  C: "eb2 ~ f2 ~ f2 ~ f2 ~ eb2 ~ f2 ~ ab2 ~ f2 ~", D: "bb1 ~ c2 ~ c2 ~ c2 ~ bb1 ~ c2 ~ eb2 ~ g2 ~",
  E: "f2 ~ f2 ~ g2 ~ g2 ~ ab2 ~ ab2 ~ bb2 ~ bb2 ~", F: "~@2 f2 ~@3 f2 ~@3 f2 ~@3 f2 ~",
  G: "~@2 f2 ~@3 f2 ~@3 f2 ~ f2 ~ f2 ~", H: "~@2 f2 ~@3 f2 ~ f2 ~ f2 ~@3 f2 ~",
  I: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~", J: "f2 ~ f2 ~ f2 ~ f2 ~@3 f2 ~ f2 ~ f2 ~",
  K: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~@3 f2 ~",
})).s("gm_synth_bass_2").gain(0.45).pan(0.6)

// bass · synth bass 2 · "SYN BASS 2" · soft notes
const bass_soft = note("<~@48 A B C ~ D@2 E B D@2 E B ~@28 A B C ~ A B C ~ D@2 E B D@2 E B ~@40>".pickRestart({
  A: "f2 ~@3 f2 ~@3 f2 ~@3 f2 ~@3", B: "f2 ~@3 f2 ~@3 f2 ~@7", C: "f2 ~@3 f2 ~@7 f2 ~@3", D: "~@8 f2 ~@7",
  E: "~@12 f2 ~@3",
})).s("gm_synth_bass_2").gain(0.27).pan(0.6)

// other · rock organ · "ORGAN 3"
const rock_organ = note("<~@40 A B A C A B A D ~@12 A B A C ~@40 A B A C A B A D ~@32>".pickRestart({
  A: "[f4,f5] [f3,f4] [f4,f5] [f3,f4] [f4,f5] [f3,f4] [ab4,ab5] [g4,g5]", // F Ab G
  B: "[c4,c5] [c3,c4] [c4,c5] [c3,c4] [c4,c5] [eb4,eb5] [c4,c5] [eb4,eb5]", // C Eb C Eb
  C: "[c4,c5] [c3,c4] [c4,c5] [c3,c4] [eb4,eb5] [eb3,eb4] [eb4,eb5] [eb3,eb4]", // C Eb
  D: "[f4,f5] [f3,f4] [g4,g5] [g3,g4] [ab4,ab5] [ab3,ab4] [bb4,bb5] [bb3,bb4]", // F G Ab Bb
})).s("gm_rock_organ").gain(0.45)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  A@2 B@2 C@2 D@2 E@7 F G@2 H@6 I@4 J@2 K@2 I@4 J@2 K@2 ~@8 L@8 M@8 G@2 H@6 I@4 J@2 K@2 I@4 J@2 K@2 ~@4 L@8 M@8 ~@4 N@2
  O@2 P@2 Q@2 I@4 J@2 K@2 I@4 J@2 K@2 I@4 J@2 K@2
>`.pickRestart({
  A: "[[ab4,f5] ~ ab4 ~@13, [f1,f2,f3,f4], ~@4 f5 ~@27]/2", B: "[g4@2 ~@2 [g4,c5] ~@27, [c1,c2,c3,c4], c5 ~@31]/2",
  C: "[f5@2 ~@2 [ab4,f5] ~@27, [f1,f2,f3,f4], ab4 ~@31]/2", D: "[g4@2 ~@2 [g4,c5] ~@27, [c1,c2,c3,c4]@31 ~, c5 ~@31]/2",
  E: "[[ab4,c5,f5] [g4,c5,eb5] [g4,c5,eb5] [f4,bb4,c5] [ab4,c5,f5] [g4,c5,eb5] [g4,c5,eb5], [f3,ab3,c4]]/7", // Fm Cm Fsus4 Fm Cm Fm
  F: "[f4,bb4,c5]@15 ~", G: "[[f1,f2,ab3,f4] [c1,c2,g3,eb4,g4], c4@31 ~]/2",
  H: "[[ab3,c4,f4]@31 ~ [ab3,f4]@16 ~@16 [ab3,f4]@30 ~@2, [f1,f2]@24 [c1,c2,g3,eb4,g4]@23 ~, ~@16 c4@31 ~]/6", // Fm Db F Cm
  I: "[[ab4,c5,f5]@31 ~ [ab4,c5,eb5]@31 ~, [f1,f2,c4,f4], ab3@31 ~]/4", J: "[c1,c2,g3,c4,eb4,g4,c5,eb5]/2",
  K: "[[bb3,f4,bb4,c5]@15 ~ [a3,f4,a4,c5]@15 ~, [f1,f2,c4]@31 ~, e4 ~@31]/2", // Bbsus2 F F5
  L: "[ab3@47 g3@16 ab3@49 g3@15 ~, [f1,f2,f3,c4]@127 ~]/8", // F5
  M: "[[ab3,c4]@15 ~ [g3,bb3,c4,eb4]@46 ~@66, [f1,f2]@63 ~, f3@31 ~@33]/8", N: "[[f2,f3] c3, [ab3,c4,f4]@31 ~]/2",
  O: "[f2,f3,ab3,c4,f4]/2", P: "[g3@16 g4@15 ~, [c3,c4,eb4]]/2",
  Q: "[[bb3,f4]@14 ~@2 [f4,ab4,c5]@15 ~, [f2,f3]@31 ~]/2", // Bb5 Fm F
})).s("gm_string_ensemble_2").gain(0.14)

// chords · string ensemble 2 · "SLOWSTRING" · soft notes
const string_ensemble_2_soft = note("<~@16 A@2 B@2 C D E@2 ~@40 A@2 B@2 C D E@2 ~@46 F G ~@24>".pickRestart({
  A: "[[c5,f5]@14 ~ [c5,eb5]@15 ~@2]/2", B: "[[c5,f5]@15 ~]/2", C: "[c5,f5]@15 ~", D: "[c5,eb5]@15 ~",
  E: "[[c5,f5]@29 ~@3]/2", F: "c4@7 ~", G: "c4@15 ~",
})).s("gm_string_ensemble_2").gain(0.06)

// other · tubular bells · "TUBULARBEL"
const tubular_bells = note(`<
  A ~@2 B A ~ C@2 D ~@2 E F@2 ~ G ~@8 H@2 I@2 J@2 ~@2 H@2 I@2 J@2 ~@9 G ~@24 H@2 I@2 J@2 ~@2 H@2 I@2 J@2 ~@25 G ~@8 H@2
  I@2 J@2 ~@2 H@2 I@2 J@2 ~@2 H@2 I@2 J@2 ~@2
>`.pickRestart({
  A: "f5", B: "~@2 ab5 g5", C: "[c5@9 ~@7]/2", D: "[f4,f5]@11 ~@5", E: "~@8 [c4,c5]@3 ~ [eb4,eb5]@3 ~",
  F: "[[f4,f5]@29 ~@3]/2", G: "[f4,f5]@4 [g4,g5]@4 [ab4,ab5]@4 [bb4,bb5]@3 ~", H: "[[f4,f5]@4 [f4,f5]@17 ~@11]/2",
  I: "[[f4,f5]@3 ~ [f4,f5]@15 ~@13]/2", J: "[[c4,c5]@3 ~ [c4,c5]@17 ~@11]/2",
})).s("gm_tubular_bells").gain(0.4).pan(0.4)

// bass · lead 1 square · "SQUAREWAVE"
const bass_2 = note("<~@48 A B C D E F E G E F E G ~@28 H I J ~ A B C D E F E G E F E G ~@40>".pickRestart({
  A: "f1 ~ f1@3 ~ f1@2 ~@6 f1 ~", B: "f1 ~ f1@3 ~ f1@3 ~ f1 ~@3 f1@2", C: "~@2 f1@2 ~@2 f1@2 ~@2 f1 ~ f1 ~ f1@2",
  D: "~@2 f1@2 ~@2 f1@2 ~@2 f1 ~@3 f1 ~", E: "~@2 f1@2 ~@2 f1@3 ~@5 f1@2", F: "~@2 f1@2 ~@2 f1@3 ~@3 f1 ~ f1@2",
  G: "~@2 f1@2 ~@2 f1@2 ~@2 f1 ~@5", H: "~ f1 ~ f1 ~ f1 ~ f1", I: "~@2 f1@2 ~@2 f1@3 ~ f1 ~ f1@2 f1@2",
  J: "~@2 f1@3 ~ f1@2 ~@2 f1@2 ~@2 f1@2",
})).s("gm_lead_1_square").gain(0.17).pan(0.6)

// bass · lead 1 square · "SQUAREWAVE" · soft notes
const bass_soft_2 = note("<~@48 A ~@3 A B A C A B A C ~@28 D ~@2 E A ~@3 A B A C A B A C ~@40>".pickRestart({
  A: "~@10 f1 ~ f1 ~@3", B: "~@10 f1 ~@5", C: "~@12 f1 ~@3", D: "f1 ~@15", E: "~ f1 ~ f1 ~@4",
})).s("gm_lead_1_square").gain(0.09).pan(0.6)

// other · vibraphone
const vibraphone = note("<~@57 [~@2 c5!14] [c5!16]!2 ~@41 [~@2 c5!14] [c5!16]!2 ~@40>").s("gm_vibraphone").gain(0.25)

// other · orchestra hit · "ORCH.HIT"
const orchestra_hit = note(`<
  A@2 B@2 C@2 D@2 ~@16 E ~ F ~ G ~@3 E ~ F ~ G ~@35 E ~ F ~ G ~@3 E ~ F ~ G ~@35 E ~ F ~ G ~@3 E ~ F ~ G ~@3 E ~ F ~ G
  ~@3
>`.pickRestart({
  A: "[[f3,f4]@3 ~ [f3,f4]@26 ~@2]/2", B: "[[c3,c4]@3 ~ [c3,c4]@27 ~]/2", C: "[[f3,f4]@3 ~ [f3,f4]@27 ~]/2",
  D: "[[c3,c4]@3 ~ [c3,c4]@25 ~@3]/2", E: "[f3,f4]@2 ~@2 [f3,f4]@3 ~@9", F: "[f3,f4]@2 ~@2 [f3,f4]@3 ~@9, ~@4 e4 ~@11",
  G: "[c3,c4]@2 ~@2 [c3,c4]@3 ~@9", // C
})).s("gm_orchestra_hit").gain(0.18)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note("<~ A@2 ~@4 B ~@80 C D E F ~@52>".pickRestart({
  A: "[~@4 gb3@5 ~@7]/2", B: "bb2@7 ~", C: "~@10 f3@3 ~ f3@2", D: "~@2 f3@3 ~ f3@3 ~@7", E: "~@6 f3@3 ~ f3@3 ~ f3@2",
  F: "~@2 f3@3 ~ f3@3 ~ f3 ~ bb3@2 g3@2",
})).s("gm_lead_1_square").gain(0.22).pan(0.6)

// other · lead 1 square · "SQUAREWAVE" · soft notes
const lead_1_square_soft = note("<~@88 [~@2 f3@3 ~ f3@3 ~@7] [~@10 f3@3 ~ f3@2] [~@2 f3@3 ~@11] ~@53>")
  .s("gm_lead_1_square").gain(0.13).pan(0.6)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@24 A ~ A ~ B ~@3 A ~ A ~ B ~@35 A ~ A ~ B ~@3 A ~ A ~ B ~@35 A ~ A ~ B ~@3 A ~ A ~ B ~@3 A ~ A ~ B ~@3
>`.pickRestart({
  A: "[f2,f3]@3 ~ [f2,f3]@4 ~@8", B: "[c2,c3]@3 ~ [c2,c3]@4 ~@8",
})).s("gm_distortion_guitar").gain(0.22).pan(0.3)

// drums · rim
const rim = s("rim").struct(`<
  ~@88
  [x ~@3 x ~@2 x!2 ~@3 x ~ x!2]
  [x ~ x ~ x ~@2 x!2 ~ x ~ x!4]
  [x ~ x ~ x ~@2 x!2 ~ x ~ x ~ x!2]
  [x ~ x ~ x ~@2 x!2 ~ x ~ x!4]
  ~@52
>`).gain(0.45)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@88 [~ x ~ x ~ x ~@2] [~@3 x ~@4]!3 ~@52>").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@16 A@31 ~ A@11 B A@43 B A@7 ~@9 A@24>".pickRestart({
  A: "x!4", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x ~",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct("<~@16 [~ x ~ x]!31 ~ [~ x ~ x]!56 ~@16 [~ x ~ x]!24>").gain(0.25)

// drums · snare
const snare = s("sd").struct("<~@16 [~ x ~ x]!31 ~ [~ x ~ x]!56 ~@16 [~ x ~ x]!24>").gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<~@112 A ~ A ~ A ~ B@2 ~@24>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~@3 x ~@3 x!2",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@16 A@31 ~ A@56 ~@8 A ~ A ~ A ~ A@26>".pickRestart({
  A: "x!4",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct(`<
  ~@15 A B ~@7 B ~ C ~ C ~@3 B ~ C ~ C ~@3 B ~@7 B ~@11 B ~@3 B ~@7 B ~ C ~ C ~@3 B ~ C ~ C ~@3 B ~@3 B ~@11 B ~@6 A B
  ~@7 B ~ C ~ C ~@3 B ~ C ~ C ~@3 B ~ C ~ C ~@3
>`.pickRestart({
  A: "x!4", B: "x", C: "x!2 ~@2",
})).gain(0.25)

// drums · crash · soft notes
const crash_soft = s("cr").struct(`<
  A ~ A ~ A ~ A ~@17 B ~@7 B ~@15 B ~@23 B ~@7 B ~@7 B ~@3 B ~@27 B ~@7 B ~@7 B ~@7
>`.pickRestart({
  A: "x!2 ~@2", B: "~ x ~@2",
})).gain(0.15)

// drums · ride
const ride = s("rd").struct(`<
  ~@16
  [x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2]!31
  ~
  [x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2]!56
  ~@16
  [x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2]!24
>`).gain(0.2)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@16 A@2 B A@4 C A@2 B A@4 C A@2 B A@4 C A@2 B A@4 ~ A@2 B A@4 C A@3 C A@2 B A@3 B A@4 C A@2 B A@4 C A@2 B A@4 C A@2 B
  A@3 B A@4 C A@3 C ~@14 A C A@2 B A@4 C A@2 B A@4 C A@2 B A@4 C
>`.pickRestart({
  A: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", B: "x ~ x ~ x ~ x ~ x ~ x ~ x ~@2 x", C: "x!8",
})).gain(0.3)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@18 A ~@4 B ~@2 A ~@4 B ~@2 A ~@4 B ~@2 A ~@7 A ~@4 B ~@3 B ~@2 A ~@3 A ~@4 B ~@2 A ~@4 B ~@2 A ~@4 B ~@2 A ~@3 A ~@4
  B ~@3 B C@7 ~@8 B ~@2 A ~@4 B ~@2 A ~@4 B ~@2 A ~@4 B
>`.pickRestart({
  A: "~@7 x", B: "~@15 x", C: "x!4",
})).gain(0.2)

stack(
// … 4 more lines

More by U96