Strudelify

Joan of Arc (Maid of Orleans)

Orchestral Manoeuvres in the Dark

KeyE♭ majorTempo218 bpm
0:00/0:00
// Joan of Arc (Maid of Orleans) — Orchestral Manoeuvres in the Dark
// 218 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 194 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(218/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.

// bass · synth bass 1 · "SYN BASS 1"
const bass = note(`<
  ~@6 A B@17 C D@2 E B@8 C D@2 E B@5 F G@2 H D@2 E B@5 F G@2 H D@2 E B@2 I J@5 K L@2 M J@8 K L@2 N O@5 P Q@2 R L@2 N O@5
  P Q@2 R L@2 M J@2 S B@5 C D@2 E B@8 C D@2 E B@2 T B@5 C D@2 E B@2 U B@5 C D@2 E B@2 U B@5 C D@2 E B@8 C D@2 E B@7 V
  ~@2
>`.pickRestart({
  A: "~@12 eb3@3 ~", B: "eb3@3 ~ eb3@3 ~ eb3@3 ~ eb3@3 ~", C: "eb3@3 ~ eb3@3 ~ eb3@3 ~ ab2@3 ~",
  D: "ab2@3 ~ ab2@3 ~ ab2@3 ~ ab2@3 ~", E: "ab2@3 ~ ab2@3 ~ ab2@3 ~ eb3@3 ~", F: "eb3@3 ~ eb3@3 ~ eb3@3 ~ bb2@3 ~",
  G: "bb2@3 ~ bb2@3 ~ bb2@3 ~ bb2@3 ~", H: "bb2@3 ~ bb2@3 ~ bb2@3 ~ ab2@3 ~", I: "eb3@3 ~ eb3@3 ~ eb3@3 ~ c3@3 ~",
  J: "c3@3 ~ c3@3 ~ c3@3 ~ c3@3 ~", K: "c3@3 ~ c3@3 ~ c3@3 ~ f3@3 ~", L: "f3@3 ~ f3@3 ~ f3@3 ~ f3@3 ~",
  M: "f3@3 ~ f3@3 ~ f3@3 ~ c3@3 ~", N: "f3@3 ~ f3@3 ~ f3@3 ~ c4@3 ~", O: "c4@3 ~ c4@3 ~ c4@3 ~ c4@3 ~",
  P: "c4@3 ~ c4@3 ~ c4@3 ~ g3@3 ~", Q: "g3@3 ~ g3@3 ~ g3@3 ~ g3@3 ~", R: "g3@3 ~ g3@3 ~ g3@3 ~ f3@3 ~",
  S: "c3@3 ~ c3@3 ~ c3@3 ~ eb3@3 ~", T: "eb3@3 ~ db3@3 ~ bb2@3 ~ eb3@3 ~", U: "eb3@3 ~ eb3@3 ~ bb2@3 ~ eb3@3 ~",
  V: "eb3@3 ~@13",
})).s("gm_synth_bass_1").gain(0.36)

// other · pan flute
const pan_flute = note("<~@138 A@6 B@3 C@7 D@2 B@3 E@8 ~@27>".pickRestart({
  A: "[~@3 eb5@2 f5 g5@9 ab5@2 g5 eb5@6]/6", B: "[eb5 ab4@3]/3", C: "[c5@3 eb5@12 eb5@2 f5 g5@9 ab5]/7",
  D: "[~ g5 eb5@6]/2", E: "[g5@3 eb5@29]/8",
})).s("gm_pan_flute").gain(0.45)

// chords · english horn · "ENGL.HORN"
const english_horn = note(`<
  ~@18 A@6 B@6 A@6 B@6 C@3 D@6 A@6 E@3 B@6 F@6 G@6 F@6 G@6 H@6 I@3 F@6 J@6 K@3 A@6 L@3 C@3 A@6 L@3 C@3 A@6 B@6 A@6 B@6
  A@6 M@6 A@6 L@3 N@6 ~@5
>`.pickRestart({
  A: "[~ [g4,bb4,eb5]@7]/6", B: "[~ [ab4,c5,eb5]@4 [g4,bb4,eb5]@3]/6", C: "[~ [g4,bb4,eb5]@3]/3",
  D: "[~ [bb4,d5,f5]@4 [ab4,c5,eb5]@3]/6", E: "[~ [bb4,d5,f5]@3]/3", F: "[~ [g4,c5,e5]@7]/6",
  G: "[~ [a4,c5,f5]@4 [g4,c5,e5]@3]/6", H: "[~ [c5,e5]@4 [b4,d5]@3, ~ g4@7]/6", I: "[~ [f4,a4,c5]@3]/3",
  J: "[~ [g4,d5]@4 [f4,a4,c5]@3, ~@3 b4@11 ~@10]/6", K: "[~ [g4,c5,e5]@3]/3", L: "[~ [ab4,c5,eb5]@3]/3",
  M: "[~ [ab4,eb5]@4 [g4,bb4,eb5]@3, ~@3 c5@11 ~@10]/6", N: "[~ [g4,bb4,eb5]@4 [g4,bb4,eb5]@3]/6",
})).s("gm_english_horn").gain(0.22)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@18 A@6 B@3 C@7 D@2 E@3 F@4 ~@23 G@6 H@3 I@7 J@2 K@3 L@4 ~@23 A@6 B@3 C@7 D@2 E@3 M@7 D@2 N@3 C@7 D@2 O@3 P@8 ~@27
>`.pickRestart({
  A: "[~@3 g6@2 bb6 g6@9 f6@2 g6 bb5@6]/6", B: "[eb6 ab5@3]/3", C: "[c6@2 eb6 bb5@11 f6 g6@2 bb6 g6@9 f6]/7",
  D: "[~ g6 bb5@6]/2", E: "[eb6 ab5@2 ab6]/3", F: "[g6@12 eb6@47 ~@5]/4", G: "[~@3 e6@2 g6 e6@9 d6@2 e6 g5@6]/6",
  H: "[c6 f5@3]/3", I: "[a5@2 c6 g5@11 d6 e6@2 g6 e6@9 d6]/7", J: "[~ e6 g5@6]/2", K: "[c6 f5@2 f6]/3",
  L: "[e6@12 c6@47 ~@5]/4", M: "[g6@3 eb6@11 f6 g6@2 bb6 g6@9 f6]/7", N: "[eb6@2 bb5 ab5@5]/3",
  O: "[eb6@2 bb5 ab5@3 ab6@2]/3", P: "[g6@3 eb6@29]/8",
})).s("gm_string_ensemble_2").gain(0.4)

// other · synth drum · "SYNT DRUM"
const synth_drum = note(`<
  ~@3 A B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C
  D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B
  C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D
  B C D B C D B C D B C D B C E@2
>`.pickRestart({
  A: "~@6 f2 ~", B: "~@4 f2 ~@3", C: "~@2 f2 ~@5", D: "f2 ~@5 f2 ~", E: "[f2 ~@5 f2@6 ~@4]/2",
})).s("gm_synth_drum").gain(0.23)

// other · taiko drum · "TAIKO"
const taiko_drum = note(`<
  ~@111 A B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B C D B
  C D B C D B C D B C D B C D B C D B C D B C D B C E ~
>`.pickRestart({
  A: "~@12 e2 ~ eb2 ~", B: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ e2 ~ eb2 ~ eb2 ~ eb2 ~",
  C: "eb2 ~ eb2 ~ e2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~", D: "e2 ~ eb2 ~ e2 ~ eb2 ~ e2 ~ eb2 ~ e2 ~ eb2 ~",
  E: "e2 ~ eb2 ~ e2 ~ eb2 ~ e2 ~ eb2 ~@5",
})).s("gm_taiko_drum").gain(0.08)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  A B C D B C D B C D B C E F G@8 H G@14 H G@41 H I G@13 J K G@34 J K G@40 H I G@18 L ~
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~@3 x ~@4", D: "~ x ~@5 x", E: "~ x ~@4 x ~", F: "x ~ x!2", G: "x!4",
  H: "x!2 ~@2 x ~ x ~", I: "x ~ x ~ x!2 ~@2", J: "x ~ x ~ x ~ x!2", K: "~ x!3", L: "x!3 ~",
})).gain(0.43)

// drums · open hat
const open_hat = s("oh").struct(`<
  A B C D B C D B C D B C E C ~@8 C ~@14 C ~@41 C A ~@14 E ~@35 E ~@40 C A ~@20
>`.pickRestart({
  A: "~@3 x", B: "~ x", C: "~ x ~@2", D: "x ~@2 x", E: "x",
})).gain(0.07)

// drums · tambourine
const tambourine = s("tb").struct("<~ A B C A B C A B C A B C A B C D ~@177>".pickRestart({
  A: "x!2 ~ x", B: "x ~ x!2", C: "~ x!2 ~", D: "x!2 ~@2",
})).gain(0.21)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<A B C D B C D B C D B C D B C D E F G ~@175>".pickRestart({
  A: "~@3 x", B: "~ x", C: "~ x ~@2", D: "x ~@2 x", E: "~@2 x!2", F: "x!4", G: "x!3 ~",
})).gain(0.07)

stack(
  bass, pan_flute, english_horn, string_ensemble_2, synth_drum, taiko_drum, kick, snare, hihat, open_hat, tambourine,
  tambourine_soft
)

More by Orchestral Manoeuvres in the Dark