Strudelify

Sailing on Seven Seas

Orchestral Manoeuvres in the Dark

KeyA majorTempo132 bpm
0:00/0:00
// Sailing on Seven Seas — Orchestral Manoeuvres in the Dark
// 132 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 122 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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 · "SYNTH BASS"
const bass = note(`<
  ~ A B@2 C D@2 E F D G@2 B H G A G@2 I E A G H J K L@2 M N O E H P Q R S T U V H W H G A G@2 I E A G H J X@2 L M N O E
  H D Q R S T U V H Y@5 Z@2 Y@2 Z AA Y@2 H G A G@2 I E A G H J K Q R S T U V H AB Q R S T U V H Y@5 Z@2 Y@2 Z AA Y@2 AC
>`.pickRestart({
  A: "a2@4 a3@2 ~@4 a3 ~@5 a3 ~@5 a3 ~", B: "a2@4 a3 ~@5 a3 ~@5 a3 ~@5 a3 ~", C: "a2@4 a3 ~@5 a3 ~@5 a3 ~@5 a3@2",
  D: "a2@2 a3 ~@2 a3 ~@2 a3 ~@2 a3", E: "a2@4 a3@2 ~@4 a3@2 ~@4 a3 ~@5 a3@2", F: "a2@3 ~ a3@2 ~@4 a3 ~@5 a3 ~@5 a3@2",
  G: "a2@4 a3@2 ~@4 a3 ~@5 a3 ~@5 a3@2", H: "a2@4 a3@2 ~@4 a3 ~@5 a3@2 ~@4 a3@2", I: "a2@4 a3 ~@5 a3@2 ~@4 a3 ~@5 a3@2",
  J: "a2@4 a3@2 ~@4 a3 ~@5 a3@2 ~@4 a2 ~", K: "a2@2 a3 ~@2 a3 ~@2 a3 b2@2 c#3", L: "d3@4 d4@2 ~@4 d4 ~@5 d4 ~@5 d4@2",
  M: "d3@4 d4 ~@5 d4 ~@5 d4@2 ~@4 d4@2", N: "d3@4 d4 ~@5 d4 ~@5 d4 ~ d3@4 c3@2", O: "a2@4 a3 ~@5 a3 ~@5 a3@2 ~@4 a3@2",
  P: "a2@4 a3@2 a2@4 a2 ~ b2@4 b2 ~ c#3@4 c#3 ~", Q: "d2@4 d3@2 ~@4 d3@2 d2@4 d3@3 ~@3 d3@2",
  R: "e2@2 e3 ~@2 e3 ~@2 e3 e2@2 e3", S: "a2@2 a3 ~@2 a3 ~@2 a3 a2@2 a3", T: "f#2@2 f#3 ~@2 f#3 ~@2 f#3 f#2@2 f#3",
  U: "d2@4 d3@2 ~@4 d3@2 ~@4 d3@2 d2 ~ d2 ~ d3@2", V: "e2@2 e3 ~@2 e3 ~@2 e3 ~@2 e3",
  W: "a2@3 ~ a3@2 ~@4 a3@2 ~@5 c4@2 ~@3 b3 ~, ~@8 a3 ~@3",
  X: "[a2@4 a3@2 a2@4 a2 ~ b2@4 b2 ~ c#3@4 ~@2 d3@4 d4@2 ~@4 d4 ~@5 d4 ~@5 d4@2, ~@11 c#3@2 ~@11]/2",
  Y: "a2@3 ~ a3@2 ~@4 a3@2 ~@4 a3@2 ~@4 a3@2", Z: "d3@3 ~ d4@2 ~@4 d4@2 ~@4 d4@2 ~@4 d4@2",
  AA: "e3@3 ~ e4@2 ~@4 e4@2 ~@4 e4@2 ~@4 e4@2", AB: "a2@3 ~ a3@2 a2@4 a2 ~ b2@4 b2 ~ c#3@4 c#3 ~", AC: "a2 ~",
})).s("gm_synth_bass_1").gain(0.51)

// other · music box
const music_box = note(`<
  ~@18 A B@2 ~@3 C ~ C ~ C ~@2 A D ~@11 E F G@2 ~@2 H I J ~@2 K L ~@27 E F M@2 ~@2 H I J ~@29
>`.pickRestart({
  A: "~@18 f#4 ~ g4@2 g#4@2", B: "[a4@15 ~ c5@27 ~@5]/2", C: "~@6 f#4 ~ g4@2 g#4@2 a4@12", D: "a4@5 ~@3",
  E: "c#5 ~ d5@2 d#5@2 e5@4 a4@4 ~@2 a4@5 ~ a4@2", F: "c#5@2 d5@2 d#5@2 e5@3 ~ g5@5 ~ g5@4 ~@2 g5@2",
  G: "[e5@2 d5@2 c#5@2 c5@3 ~ a4@5 ~ a4@15 ~@17]/2", H: "c#5@2 d5@2 d#5@2 e5@4 a4@5 ~ a4@7 ~",
  I: "c#5@2 d5@2 d#5@2 e5@3 ~ g5@5 ~ g5@4 g5@2 ~@2", J: "d#5@2 d5@2 c5@2 a4@15 ~@3",
  K: "d#5@2 e5@2 f5@2 f#5@3 ~ a5@13 ~", L: "d#5 ~ e5@2 f5@2 f#5@3 ~ a5@12 ~@2",
  M: "[d#5@2 d5@2 c#5@2 c5@3 ~ a4@5 ~ a4@15 ~@17]/2",
})).s("gm_music_box").gain(0.41)

// other · celesta
const celesta = note(`<
  ~@5 A B C D A E F G ~@12 H@2 ~@2 I@2 ~@2 J K L M N O P@2 ~@12 Q@2 ~@2 R@2 ~@2 S K L T J O U@3 ~@23 S K L T J O V@3 K L
  T J O U@3 ~@12
>`.pickRestart({
  A: "[a4,a5]@5 ~ [g4,g5]@4 [e4,e5]@2 [d4,d5]@10 ~@2", B: "[d4,d5]@3 ~ [e4,e5]@6 [a3,a4]@10 ~@2 [a3,a4]@2",
  C: "[c4,c5]@3 ~ [d4,d5]@5 ~ [e4,e5]@11 ~ [a3,a4]@2", D: "[e4,e5]@4 [c4,c5]@5 ~ [a3,a4]@11 ~@3",
  E: "[d4,d5]@3 ~ [e4,e5]@6 [a3,a4]@9 ~@3 [a3,a4]@2", F: "[c4,c5]@3 ~ [d4,d5]@6 [e4,e5]@10 ~@2 [a3,a4]@2",
  G: "[e4,e5]@3 ~ [c4,c5]@5 ~ [a3,a4]@9 ~@5", H: "[d5@17 ~@7]/2", I: "[a4@35 ~@13]/2", J: "d5@23 ~", K: "e5", L: "a4",
  M: "f#4@7 ~", N: "d5", O: "e5@23 ~", P: "[a4@13 ~@3]/2", Q: "[d5@5 ~]/2", R: "[a4@3 ~]/2", S: "d5@11 ~", T: "f#4",
  U: "[a4@49 ~@23]/3", V: "[a4@24 d5@11 ~]/3",
})).s("gm_celesta").gain(0.46)

// other · brass section · "BRASS"
const brass_section = note(`<
  ~@5 A@4 B@4 ~@5 C@5 ~@18 D@8 ~@4 E@3 ~ F@4 G H I J G H K@6 L@2 M@2 G H D@8 ~@6 G H I J G H M@2 G H I J G H K@6 G ~ M@2
  G H N@3
>`.pickRestart({
  A: "[[a2,a3]@91 ~@5]/4", B: "[[a2,a3]@23 ~]/4", C: "[~@3 [e5,a5]@19 ~@2]/5", D: "[a2,a3]/8", E: "[d3,d4]/3",
  F: "[a2,a3]/4", G: "d3", H: "e3", I: "a3", J: "f#3", K: "a3/6", L: "d3/2", M: "a3/2", N: "[a3@19 ~@5]/3",
})).s("gm_brass_section").gain(0.36)

// bass · lead 8 bass lead · "BASS&LEAD"
const bass_2 = note(`<
  A B C B D B C B C B C E C E C B C B D E C B F G H I J K L E C M N O P Q R S P T H B C G C E D E C E F G H U J V L E C
  M N O P Q R W P T X T X T X Y Z T X Y AA T X E C G C E D E C E F G H O P Q R W P T X O P Q R W P T X T X T H Y Z T X
  AB AA AC AD AE
>`.pickRestart({
  A: "~@22 g2 ~", B: "~@10 a2 ~@11 g2 ~", C: "a2 ~ a2 ~ a2 ~ a2 ~@3 a2 ~@11 g2 ~",
  D: "a2 ~ a2 ~ a2 ~ a2 ~@3 a2 ~@11 g2@2", E: "a2 ~@3 a2 ~@5 a2 ~@11 g2 ~", F: "a2 ~ a2 ~ a2 ~ a2 ~@3 a2@2 ~@10 g2 ~",
  G: "a2@2 ~@2 a2 ~@5 a2 ~@11 g2 ~", H: "a2 ~ a2 ~ a2 ~ a2 ~@3 a2 ~@13", I: "d3 ~ d3 ~@3 d3 ~@3 d3 ~@11 d3 ~",
  J: "d3 ~ d3 ~ d3 ~ d3 ~@3 d3@2 ~@10 d3 ~", K: "d3 ~@3 d3 ~@5 d3 ~@11 d3 ~",
  L: "d3 ~ d3 ~ d3 ~ d3 ~@3 d3 ~@5 d3 ~@5 g2 ~", M: "a2@2 ~@2 a2@2 ~@4 a2 ~@11 g2 ~",
  N: "a2 ~ a2 ~ a2 ~ a2 ~@3 a2 ~@5 a2@2 ~@4 a2 ~", O: "d3@2 ~@2 d3@2 ~@4 d3 ~@5 d3 ~@5 d3 ~",
  P: "e3 ~@3 e3 ~@5 e3 ~@5 e3 ~ e3 ~ e3 ~ e3 ~", Q: "a2 ~@3 a2 ~@5 a2 ~@5 a2 ~ a2 ~ a2 ~ a2 ~",
  R: "f#2 ~@3 f#2 ~@5 f#2 ~@5 f#2 ~ f#2 ~ f#2 ~ f#2 ~", S: "d2 ~@3 d2 ~@5 d2 ~@5 d2 ~ d2 ~ d2 ~ d2 ~",
  T: "a2 ~@3 a2 ~@5 a2 ~@5 a2 ~@5 g2 ~", U: "d3 ~ d3 ~@19 d3 ~", V: "~@10 d3 ~@11 d3 ~",
  W: "d3 ~@3 d3 ~@5 d3 ~@5 d3 ~ d3 ~ d3 ~ d3 ~", X: "a2 ~ a2 ~ a2 ~ a2 ~@3 a2 ~@5 a2 ~@5 g2@2",
  Y: "d3 ~@3 d3 ~@5 d3 ~@5 d3 ~@5 c3 ~", Z: "d3 ~ d3 ~ d3 ~ d3 ~@3 d3 ~@5 d3 ~@5 c3@2",
  AA: "e3 ~ e3 ~ e3 ~ e3 ~@3 e3 ~@5 e3 ~@5 d3@2", AB: "~@10 d3 ~@5 d3 ~@5 c3 ~", AC: "~@10 a2 ~@5 a2 ~@5 g2 ~",
  AD: "a2 ~ a2 ~ a2 ~ a2 ~@3 a2 ~@5 a2 ~@5 a2@2", AE: "a2 ~",
})).s("gm_lead_8_bass_lead").gain(0.51)

// drums · kick
const kick = s("bd").struct("<~ [x!2 ~ x ~@2]!120 ~>").gain(0.51)

// drums · snare
const snare = s("sd").struct(`<
  ~ A@3 B A@3 B A@3 B A@5 C A@5 B A@3 D A@3 B A@7 B A@5 C A@5 B A@3 D A@3 B A@7 B A@3 B A@13 C A@5 B A@7 B A@7 B A@3 B
  A@8 ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@2 x!6", C: "~@3 x ~@5 x!3", D: "~@3 x ~@4 x!2 ~ x",
})).gain(0.51)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A@3 ~ A@3 ~ A@3 ~ A@11 ~ A@3 ~ A@3 ~ B@7 C A@5 ~ A@5 ~ A@3 ~ A@3 ~ B@7 C A@3 ~ A@7 ~ A@5 ~ A@6 B@7 C B@7 C A@3 ~ A@8
  ~
>`.pickRestart({
  A: "~@11 x", B: "~@5 x ~@5 x", C: "~@5 x ~@6",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@3 A ~@3 A ~@11 A ~@7 A ~@5 A ~ A ~@5 A ~@5 A ~@7 A ~@5 A ~ A ~@3 A ~@7 A ~@5 A ~@5 A ~@5 A ~ A ~@5 A ~ A
  ~@3 A ~@7 A
>`.pickRestart({
  A: "x",
})).gain(0.51)

stack(bass, music_box, celesta, brass_section, bass_2, kick, snare, hihat, open_hat, crash)

More by Orchestral Manoeuvres in the Dark