Strudelify
Israelism cover art

Israelism

Israelism

Army of Lovers

KeyC♯ minorTempo128 bpm
0:00/0:00
// Israelism — Army of Lovers
// 128 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(128/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@9 A B C@2 D E F G ~@2 H A I@2 H A J I K L M N@2 O P A E C Q D E D R H E C@2 S E T U ~@2 E A I@2 H A J I K L M N@2 O
  P A E C Q D E D R A@2 V W X Y M Z ~ O P AA E C@2 D E D AB E@2 C Q S E AC AD S AE@2 AF
>`.pickRestart({
  A: "c#3@2 c3@2 c#3@2 c3 c#3@2 c3 c#3@2 d#3@2 e3@2", B: "c#3@2 c3@2 c#3@2 c3 c#3@2 c3 c#3@2 d#3@2 e3 ~",
  C: "f#2@2 f2 ~ f#2@2 f2 f#2@2 f2 f#2@2 g#2@2 a2@2", D: "g#2@2 g2 ~ g#2@2 g2 g#2@2 g2 g#2@2 a#2@2 c3@2",
  E: "c#3@2 c3 ~ c#3@2 c3 c#3@2 c3 c#3@2 d#3@2 e3 ~", F: "g#2@2 g2 ~ g#2@2 g2 g#2@2 g2 g#2 ~ g#2@2 g2 ~",
  G: "g#3@2 f#3@2 e3@2 d#3 ~ c#3@2 c3 c#3 ~ c#3 c3 ~, g#2 ~@15", H: "c#3@2 c3 ~ c#3@2 c3 c#3@2 c3 c#3@2 d#3@2 e3@2",
  I: "c3@2 b2 ~ c3@2 b2 c3@2 b2 c3 ~ c#3@2 d#3@2", J: "c3@2 b2@2 c3@2 b2 c3@2 b2 c3@2 c#3@2 d#3@2",
  K: "b2 ~ b2@2 b2 ~ b2 b2@2 b2 b2@2 b2@2 b2@2", L: "a#2 ~ a#2 ~ a#2 ~ a#2!2 ~ a#2 a#2@2 a#2 ~ a#2@2",
  M: "a2 ~ a2 ~ a2 ~ a2 a2@2 a2 a2@2 a2 ~ a2@2", N: "[g#2@7 ~]/2",
  O: "g#3 a3@2 f#3 g#3 e3 ~ f#3 g#3 a3 ~ f#3 g#3 e3 ~ f#3", P: "g#3 a3 ~ f#3 g#3 e3 ~ f#3 g#3@2 ~@6",
  Q: "f#2@2 f2 ~ f#2@2 f2 f#2@2 f2 f#2@2 g#2@2 a2 ~", R: "g#2 ~ f#2 ~ e2 ~ d#2 ~ c#3 ~@7",
  S: "g#2@2 g2 ~ g#2@2 g2 g#2@2 g2 g#2@2 a#2@2 c3 ~", T: "g#2@2 g2 ~ g#2@2 g2 g#2@2 g2 g#2 ~ g2@2 g#2 ~",
  U: "g#2 f#2 e2 d#2 c#2@2 ~@2", V: "c#3 c3 c#3 c3 d#3@2 e3@2", W: "f#3@4 g#3@3 ~ a3@3 ~ a#3@3 ~",
  X: "b2 ~ b2 ~ b2 ~ b2!2 ~ b2 b2@2 b2@2 b2@2", Y: "a#2@2 a#2 ~ a#2@2 a#2 a#2@2 a#2 a#2@2 a#2 ~ a#2!2", Z: "g#2@15 ~",
  AA: "~@2 c#3 ~ c#3@2 c#3 c#3@2 c3 c#3@2 d#3@2 e3@2", AB: "g#2@2 f#2@2 e2@2 d#2@2 c#3@5 ~@3",
  AC: "g#2@2 g2 ~ g#2@2 g2 g#2@2 g2 g#2@2 g#2 ~ g#2 ~, ~@13 g2@2 ~",
  AD: "g#2@2 f#2@2 e2@2 d#2@2 c#2 ~ d#2@2 e2@2 f#2 ~",
  AE: "[g#2@2 a2@2 a#2 ~ c3 ~ c#3@2 c3 ~ c#3@2 c3 c#3@2 c3 c#3@2 d#3@2 e3@2 c#3@2 c3 ~ c#3@2 ~@2]/2", AF: "c#3@9 ~@7",
})).s("gm_acoustic_bass").gain(0.31)

// bass · electric guitar muted · "BASS GTR"
const bass_2 = note(`<
  ~ A@2 B C D A D E A@2 B@2 D A D F A@3 G H@2 A@2 H@2 I J K L@2 M N A@2 B@2 D A D F A@2 B@2 D A D E A@3 G H@2 A@2 H@2 I
  J K L@2 M N A@2 B@2 D A D F A@2 O P I J K L Q M N A@2 B@2 D A D E A@2 B@2 D A D F D R S T
>`.pickRestart({
  A: "c#3!16", B: "f#3!16", C: "f#3!11 ~ f#3!4", D: "g#3!16", E: "g#3!8 c#3 ~@7", F: "g#3!8 c#3!8", G: "c#3!15 ~",
  H: "c3!16", I: "b2!16", J: "a#2!16", K: "a2!16", L: "g#3 a3 ~ f#3 g#3 e3@2 f#3 d#3 e3 ~ c#3 d#3 c3 ~ c#3",
  M: "g#3 a3 ~ f#3 g#3 e3 ~ f#3 g#3 a3 ~ f#3 g#3 e3 ~ f#3", N: "g#3 a3 ~ f#3 g#3 e3 ~ f#3 g#3@2 ~@6",
  O: "c#3!8 d#3!4 e3!4", P: "f#3!4 g#3!4 a3!4 a#3!4", Q: "g#3 a3 ~ f#3 g#3 e3 ~ f#3 d#3 e3 ~ c#3 d#3 c3 ~ c#3",
  R: "g#3!2 a3!2 a#3!2 c4!2 c#4!8", S: "c#4!16", T: "c#4 ~@15",
})).s("gm_electric_guitar_muted").gain(0.21)

// other · accordion
const accordion = note("<~@95 A B C D E F@2 G H@2 I>".pickRestart({
  A: "b5 a5 g#5 ~ g#5 f#5 e5 ~ e5 d#5 c#5@5 ~", B: "f#5 e5", C: "d#5@6 e5@9 ~", D: "g#5 a5", E: "g#5@7 c#6@8 ~",
  F: "[g#5@19 f#5 e5@2 d#5@2 c#5@2 d#5@2 e5@2 f#5@2]/2", G: "g#5@15 ~",
  H: "[g#5@2 a5@2 a#5@2 c6@2 c#6@20 ~@2 e5 d#5]/2", I: "c#5@3 ~@5",
})).s("gm_accordion").gain(0.4)

// other · piano · "A.PIANO 1"
const piano = note("<~@27 A B C D E F G ~@26 A B C D E F G ~@7 H I J K ~ L B C D M F G ~@20>".pickRestart({
  A: "[d#4,f#4,b4]@15 ~", B: "[c#4,f#4,a#4]@15 ~", C: "[c#4,e4,a4]@7 ~",
  D: "g#5 a5@2 ~ g#5 e5 ~ f#5 d#5 e5 ~ c#5 d#5 c5@2 c#5, ~@3 f#5@2 ~@11",
  E: "~ a4 ~@2 g#4 e4@2 f#4 d#4 e4 ~@2 d#4 c4 ~ c#4, g#4@2 ~ f#4@2 ~@6 c#4@2 ~@3",
  F: "[g#4,g#5] a4@2 [f#4,f#5] [g#4,g#5] [e4,e5] ~ [f#4,f#5] [g#4,g#5] [a4,a5] ~ [f#4,f#5] [g#4,g#5] [e4,e5] ~ [f#4,f#5], ~ a5 ~@14", // G# F# G# E F# G# A F# …
  G: "[g#4,g#5] a4@2 [f#4,f#5] [g#4,g#5] [e4,e5] ~ [f#4,f#5] [g#4,g#5]@3 ~@5, ~ a5 ~@14", // G# F# G# E F# G#
  H: "~@13 [e3,g#3] c#4 [e4,g#4], ~@6 c#3 ~", // E
  I: "c#5 [e4,g#4] c#5 [e5,g#5] c#6 [c#5,e5] g#5 c#6 c#7 ~@4 [e3,g#3] c#4 [e4,g#4], ~@7 e6@2 ~@3 c#3@2 ~@2", // E C#m E
  J: "c#5 [e4,g#4] c#5 [e5,g#5] c#6 [e5,g#5] c#6 ~ c#7 ~@3 c#3 [e3,g#3] c#4 [e4,g#4], ~@7 [e6,g#6]@2 ~@7", // E
  K: "c#5 [e4,g#4] c#5 [e5,g#5] c#6@3 ~@9", L: "[d#4,f#4,b4]@7 ~, a4 ~@15",
  M: "g#5 a5@2 f#5 g#5 e5 ~ f#5 d#5 e5 ~ c#5 d#5 c5 ~ c#5",
})).s("gm_piano").gain(0.39)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@9 A B C D E F G@2 ~@2 H@2 I@2 J@2 K@2 L M N O P@2 Q A B C R E F S@2 A B C R E F T@2 ~@2 H@2 I@2 J@2 U@2 V M N O P@2
  Q A B C R E F W@2 X@3 Y Z M N AA P@3 A B C R E F S@2 A B C D E F AB@2 AC@4
>`.pickRestart({
  A: "c#6 b5", B: "a5 g#5", C: "f#5 e5", D: "d#5@2 e5 f#5", E: "g#5 a5", F: "g#5 c#6",
  G: "[g#5@18 f#5@2 e5@2 d#5@2 c#5@5 ~@3]/2", H: "[c#6@13 e6 d#6 c#6]/2", I: "[d#6@13 f#6 e6 d#6]/2",
  J: "[e6@13 g#6 f#6 e6]/2", K: "[g#6@15 ~]/2", L: "~ b6@15, b5", M: "[a#5,a#6]", N: "[a5,a6]",
  O: "[g#5,g#6]@3 ~ [g#5,g#6]@4 ~@8", P: "[g#5,g#6] ~ [g#5,g#6] ~@5", Q: "g#6@2 ~@2 [g#5,g#6] ~@11, g#5 ~@15",
  R: "d#5@8 e5@7 ~", S: "[g#5@18 f#5@2 e5@2 d#5@2 c#5@3 ~@5]/2", T: "[g#5@9 f#5 e5 d#5 c#5 ~@3]/2", U: "g#6/2",
  V: "[b5,b6]", W: "[~@8 g#5 f#5 e5 d#5 c#5@3 ~, g#5@9 ~@7]/2", X: "[[c#4,g#4,c#5]@10 [d#4,d#5] [e4,e5]]/3",
  Y: "[f#4,f#5]@4 [g#4,g#5]@4 [a4,a5]@4 [a#4,a#5]@3 ~", Z: "b4@3 b6@5, b5", AA: "[g#5,g#6]@5 ~@11",
  AB: "[g#5@9 f#5 e5 d#5 c#5 d#5 e5 f#5]/2",
  AC: "[~@16 g#4@2 [a4,a5]@2 [a#4,a#5] ~ [c5,c6]@2 ~@16 e5@10 ~@14, g#5@9 ~@3 [c#5,c#6]@13 ~@7]/4", // A A# C C#
})).s("gm_string_ensemble_1").gain(0.24)

// other · drawbar organ · "ORGAN 1"
const drawbar_organ = note("<~@17 A B C ~@12 D E ~@16 A B C ~@12 D E ~@10 F G H ~@4 I E ~@20>".pickRestart({
  A: "e4 d#4 e4 d#4 c#4 d#4 e4 d#4 e4 d#4 e4 d#4 e4 d#4 c#4 d#4",
  B: "e4 d#4 e4 d#4 c#4 d#4 e4 d#4 e4 d#4 e4 f#4 g#4 a4 b4 c5", C: "c#5 ~@15",
  D: "g#4 a4 ~ f#4 g#4 e4 ~ f#4 g#4 a4 ~ f#4 g#4 e4 ~ f#4", E: "g#4 a4 ~ f#4 g#4 e4 ~ f#4 g#4 ~@7", F: "~@2 d#3 e3",
  G: "f#3 g#3 a3 a#3", H: "b3 ~@3", I: "g#4 a4@2 f#4 g#4 ~ e4 f#4 g#4 ~@2 f#4 g#4 ~ e4 f#4, ~@5 a4 ~@2",
})).s("gm_drawbar_organ").gain(0.19)

// chords · french horn · "FR.HORN"
const french_horn = note(`<
  ~ A@6 B@2 C@2 D@2 E F G@2 ~@2 H@4 I@7 J ~ K ~ L@4 E M@3 C@2 N@2 E F O@2 ~@2 H@8 P@3 Q ~ R ~ C@2 N@2 E S T@2 U@3 V W
  X@2 Y@2 Z@2 AA@4 AB F AC@2 C@2 N@2 AD S AE@2 AF@4
>`.pickRestart({
  A: "[g#4@15 ~ a4@8 ~@40 c4@16 ~ [c#4,e4]@14 ~, c#4@21 ~@11, e4@32 f#4@49 ~@15, ~@32 a4@31 ~@33, ~@56 d#4@25 ~@15]/6", // C#m
  B: "[[c4,d#4,f#4,g#4]@23 ~@9]/2", C: "[g#4@2 a4 g#4, [c#4,e4]@31 ~]/2", D: "[~@22 d#4@9 ~, [c#4,f#4,a4]@31 ~]/2",
  E: "g#4@7 ~ a4@8, [c4,d#4,f#4]@15 ~", F: "[c#4,e4,g#4]@15 ~",
  G: "[[c4,d#4]@22 ~@2 [c#4,e4]@5 ~@3, g#4@29 ~@3, f#4@3 ~]/2", H: "[[c#4,e5]@32 [c4,d#5]@31 ~, g#4@63 ~]/4",
  I: "[[c#4,e5]@2 c4@2 b3 a#3 a3, g#4@63 ~ f#4@32 e4@14 ~@2, ~@2 d#5@3 c#5@2]/7", J: "[g#3,d#4,g#4,c5] ~@3",
  K: "[g#2,g#3,g#4]@3 ~ [g#2,g#4]@2 ~@10, ~@4 g#3 ~@11", // G#
  L: "[g#4@16 a4@8 g#4@8 ~@16 d#4@15 ~, e4@9 ~@7, c#4@31 ~ [c#4,a4]@31 ~]/4", // F#m
  M: "[[c#4,e4]@15 ~ [c4,d#4,f#4]@23 ~ [c#4,e4]@5 ~@3, g#4@15 ~]/3", N: "[~@16 d#4@15 ~, [c#4,f#4,a4]@31 ~]/2",
  O: "[[c4,d#4,f#4]@11 ~ c#4@2 ~@2, g#4@29 ~@3]/2", P: "[[b3,d#5] a#3 a3, f#4@31 ~ e4@14 ~@2, ~ c#5@2]/3",
  Q: "[g#3,d#4,g#4] ~", R: "[g#2,g#3,g#4] ~ [g#2,g#3,g#4]@2 ~@4", S: "[c#4,e4]@7 ~",
  T: "[[c4,d#4,f#4]@22 ~@2 [c#4,e4]@5 ~@3, g#4@29 ~@3]/2", U: "[[f#3,a3,c#4,e4]@39 ~ [d#3,d#4]@4 [e3,e4]@4]/3",
  V: "[f#3,f#4]@4 [g#3,g#4]@4 [a3,a4]@4 [a#3,a#4]@3 ~", W: "[b3,d#4,b4]", X: "[[f#4,a#4]@16 [e4,a4]@15 ~, c#4@31 ~]/2",
  Y: "[g#3@31 ~, g#4@17 ~@15]/2", Z: "[g#3@25 ~@7, g#4@17 ~@15]/2",
  AA: "[g#4@15 ~ a4@8 g#4@8 ~@16 d#4@15 ~, c#4@63 ~, e4@32 [f#4,a4]@31 ~]/4", // F#m
  AB: "~@4 f#4@4 a4@7 ~, [c4,d#4]@15 ~, g#4 ~", AC: "[~@2 f#4@9 ~ [c#4,e4,g#4]@2 ~@2, [c4,d#4,g#4]@23 ~@9]/2",
  AD: "[f#4,g#4]@5 a4@3, [c4,d#4]@15 ~", AE: "[[c4,d#4,f#4,g#4]@22 ~@2 [c#4,e4,g#4]@7 ~]/2",
  AF: "[[c4,d#4,f#4,g#4]@23 ~ [c#4,e4,g#4,c#5]@31 ~@9]/4", // G#7 C#m
})).s("gm_french_horn").gain(0.18)

// chords · french horn · "FR.HORN" · soft notes
const french_horn_soft = note("<~@2 A ~@2 B C ~ D ~@27 E@2 ~@11 F ~@13 G ~@8 C ~@2 H@3 ~@21 C ~@6>".pickRestart({
  A: "~ g#4", B: "g#4@7 ~ a4@8", C: "g#4@15 ~", D: "~@2 [c#4,e4,g#4] ~", E: "[f#4@31 ~]/2", F: "~@2 e4 ~", G: "c5 ~",
  H: "[g#4@13 ~@3]/3",
})).s("gm_french_horn").gain(0.09)

// chords · pizzicato strings · "PIZZICATO"
const pizzicato_strings = note(`<
  ~@9 A B C D E A F G ~@17 A B C D E A F G A B C D E A F H ~@17 A B C D E A F G ~@11 A B C D E A F I A B C J E A F K L M
  N O
>`.pickRestart({
  A: "[c#5,e5,g#5] ~@3 [c#5,e5,g#5] ~@2 [c#5,e5,g#5] ~ [c#5,e5,g#5]!2 ~ [c#5,e5,g#5] ~@3", // C#m
  B: "[c#5,e5,a5] ~@3 [c#5,e5,a5] ~@2 [c#5,e5,g#5] ~ [c#5,e5,g#5]!2 ~ [c#5,e5,g#5] ~@3", // A C#m
  C: "[c#5,f#5,a5] ~@3 [c#5,f#5,a5] ~@2 [c#5,f#5,a5] ~ [c#5,f#5,a5]!2 ~ [c#5,f#5,a5] ~@3", // F#m
  D: "[c#5,d#5,f#5,a5] ~@3 [c#5,d#5,f#5,a5] ~@2 [c#5,d#5,f#5,a5] ~ [c#5,d#5,f#5,a5]!2 ~ [c#5,d#5,f#5,a5] ~@3", // D#m7b5
  E: "[c5,d#5,f#5,g#5] ~@3 [c5,d#5,f#5,g#5] ~@2 [c5,d#5,f#5,a5] ~ [c5,d#5,f#5,a5]!2 ~ [c5,d#5,f#5,a5] ~@3", // G#7 Cdim
  F: "[c5,d#5,f#5,g#5] ~@3 [c5,d#5,f#5,g#5] ~@3 [c5,d#5,f#5,g#5] ~@3 [c5,d#5,f#5,g#5] ~@3", // G#7
  G: "g#5 ~ f#5 ~ e5 ~ d#5 ~ c#5 ~@7", H: "g#5 ~ f#5 ~ e5 ~ d#5 ~ c#5@2 ~@6",
  I: "[c5,d#5,f#5,g#5] ~@3 [c5,d#5,f#5,g#5] ~@3 [c#5,e5,g#5] ~@7", // G#7 C#m
  J: "[c#5,d#5,f#5,a5] ~ d#5 ~ [c#5,d#5,f#5,a5] ~@2 [c#5,d#5,f#5,a5] ~ [c#5,d#5,f#5,a5]!2 ~ [c#5,d#5,f#5,a5] ~@3", // D#m7b5
  K: "[c5,d#5,f#5,g#5] ~@3 [c5,d#5,f#5,g#5] ~@3 [c#5,e5,g#5] ~ e5 ~ [c#5,e5,g#5] ~ [c#5,e5,g#5] ~", // G#7 C#m
  L: "[c5,d#5,f#5,g#5] ~@3 [c5,d#5,f#5,g#5] ~@2 [c5,d#5,f#5,g#5] ~ [d#5,f#5,g#5] [c5,d#5,f#5,g#5] ~ [c5,d#5,f#5,g#5] ~@3", // G#7
  M: "[c5,d#5,f#5,g#5] ~@3 [c5,d#5,f#5,g#5] ~@3 [c#5,e5,g#5] ~@3 [c#5,e5,g#5] ~@2 [c#5,e5,g#5]", // G#7 C#m
  N: "~ [c#5,e5,g#5]!2 ~ [c#5,e5,g#5] ~@3 [c#5,e5,g#5] ~@3 [c#5,e5,g#5] ~ [c#5,e5,g#5] ~", O: "[c#5,e5,g#5] ~@15",
})).s("gm_pizzicato_strings").gain(0.28)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A@7 B C@2 A@11 C@3 D A@15 B C@2 A@11 C@3 D A@10 C D A@3 C@3 D A@7 D ~@4 A@5 C E F
>`.pickRestart({
  A: "x ~@3 x ~@2 x!2 ~@3 x ~@3", B: "x ~@3 x ~@2 x!2 ~@7", C: "x!4", D: "x!3 ~", E: "x ~@3 x ~@3 x ~@3 x ~@2 x",
  F: "x",
})).gain(0.48)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@9 A@4 B A B@2 A@2 B A B A@2 B A B A B A B@3 C B A@2 B A B A@2 B A@2 B@2 A@2 C B@3 A B A B A@2 B@2 A@2 B A B C B A B
  A B@2 A B@4 D B@6 C B A@2 B@2 A@2 C ~@4 B@2 A E A B A F
>`.pickRestart({
  A: "x ~ x ~ x ~ x!5 ~ x ~ x ~", B: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~", C: "x ~ x ~ x ~ x!3 ~@7", D: "x!5 ~@3",
  E: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", F: "x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@6 B A ~ A ~@13 C A ~@5 D B A ~@6 B A ~ A ~@7 A ~@4 A C A ~@5 E B ~@3 F A ~@4 A C A ~@5 D B ~@7 B A B ~ A
>`.pickRestart({
  A: "x", B: "x!3 ~", C: "~ x", D: "~ x!3", E: "~@3 x", F: "~ x!2 ~",
})).gain(0.48)

stack(
  bass, bass_2, accordion, piano, string_ensemble_1, drawbar_organ, french_horn, french_horn_soft, pizzicato_strings,
  kick, snare, hihat, crash
)