Strudelify
Sailing on Seven Seas cover art

Sugar Tax

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, A@4 for four bars: edit a riff to change every repeat.

// bass · synth bass 1 · "SYNTH BASS"
const bass = note(`<
  ~ A@2 B A B A@3 C B A B A B A@4 B A@3 D E F@3 G H B@2 I J K L M N O A P A B A@4 B A@3 D Q@2 F@2 G H B@3 J K L M N O
  A@6 R@2 A@2 R S A@3 B A@4 B A@3 D E J K L M N O A T J K L M N O A@6 R@2 A@2 R S A@2 U
>`.pickRestart({
  A: "a2@3 ~ a3@2 ~@4 a3@2 ~@4 a3@2 ~@4 a3@2", B: "a2@4 a3@2 ~@4 a3 ~@5 a3 ~@5 a3@2",
  C: "a2@4 a3@2 ~@4 a3@2 ~@4 a3 ~@5 a3@2", D: "a2@4 a3@2 ~@4 a3 ~@5 a3@2 ~@4 a2 ~", E: "a2@2 a3 ~@2 a3 ~@2 a3 b2@2 c#3",
  F: "d3@4 d4@2 ~@4 d4 ~@5 d4 ~@5 d4@2", G: "d3@4 d4 ~@5 d4 ~@5 d4 ~ d3@4 c3@2", H: "a2@4 a3 ~@5 a3 ~@5 a3@2 ~@4 a3@2",
  I: "a2@4 a3@2 a2@4 a2 ~ b2@4 b2 ~ c#3@4 c#3 ~", J: "d2@4 d3@2 ~@4 d3@2 d2@4 d3@3 ~@3 d3@2",
  K: "e2@2 e3 ~@2 e3 ~@2 e3 e2@2 e3", L: "a2@2 a3 ~@2 a3 ~@2 a3 a2@2 a3", M: "f#2@2 f#3 ~@2 f#3 ~@2 f#3 f#2@2 f#3",
  N: "d2@4 d3@2 ~@4 d3@2 ~@4 d3@2 d2 ~ d2 ~ d3@2", O: "e2@2 e3 ~@2 e3 ~@2 e3 ~@2 e3",
  P: "a2@3 ~ a3@2 ~@4 a3@2 ~@5 c4@2 ~@3 b3 ~, ~@8 a3 ~@3",
  Q: "[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",
  R: "d3@3 ~ d4@2 ~@4 d4@2 ~@4 d4@2 ~@4 d4@2", S: "e3@3 ~ e4@2 ~@4 e4@2 ~@4 e4@2 ~@4 e4@2",
  T: "a2@3 ~ a3@2 a2@4 a2 ~ b2@4 b2 ~ c#3@4 c#3 ~", U: "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@2 ~@27 E F L@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@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 B C E ~@12 F@2 ~@2 G@2 ~@2 H I J K H I L@2 ~@12 M@2 ~@2 G@2 ~@2 H I J N H I O@3 ~@23 H I J N H I P@3 I J
  N H I O@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: "[e4,e5]@3 ~ [c4,c5]@5 ~ [a3,a4]@9 ~@5", F: "[d5@17 ~@7]/2", G: "[a4@35 ~@13]/2", H: "d5@23 ~", I: "e5", J: "a4",
  K: "f#4@7 ~", L: "[a4@13 ~@3]/2", M: "[d5@5 ~]/2", N: "f#4", O: "[a4@49 ~@23]/3", P: "[a4@48 d5@23 ~]/3",
})).s("gm_celesta").gain(0.46)

// other · brass section · "BRASS"
const brass_section = note(`<
  ~@5 A@8 ~@5 B@5 ~@18 C@8 ~@4 D@3 ~ E@4 F G H I F G J@6 K@2 L@2 F G C@8 ~@6 F G H I F G L@2 F G H I F G J@6 F ~ L@2 F G
  M@3
>`.pickRestart({
  A: "[[a2,a3]@91 ~@5]/4", B: "[~@3 [e5,a5]@19 ~@2]/5", C: "[a2,a3]/8", D: "[d3,d4]/3", E: "[a2,a3]/4", F: "d3",
  G: "e3", H: "a3", I: "f#3", J: "a3/6", K: "d3/2", L: "a3/2", M: "[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 C B C B C B C D C D C B C B C D C B C D E F G H I D C J K L M N O P M Q E B C D C D C D C D C D E R G S I D C
  J K L M N O T M Q U Q U Q U V W Q U V X Q U D C D C D C D C D C D E L M N O T M Q U L M N O T M Q U Q U Q E V W Q U Y
  X Z K AA
>`.pickRestart({
  A: "~@22 g2 ~", B: "~@10 a2 ~@11 g2 ~", C: "a2 ~ a2 ~ a2 ~ a2 ~@3 a2 ~@11 g2 ~", D: "a2 ~@3 a2 ~@5 a2 ~@11 g2 ~",
  E: "a2 ~ a2 ~ a2 ~ a2 ~@3 a2 ~@13", F: "d3 ~ d3 ~@3 d3 ~@3 d3 ~@11 d3 ~", G: "d3 ~ d3 ~ d3 ~ d3 ~@3 d3@2 ~@10 d3 ~",
  H: "d3 ~@3 d3 ~@5 d3 ~@11 d3 ~", I: "d3 ~ d3 ~ d3 ~ d3 ~@3 d3 ~@5 d3 ~@5 g2 ~", J: "a2@2 ~@2 a2 ~@5 a2 ~@11 g2 ~",
  K: "a2 ~ a2 ~ a2 ~ a2 ~@3 a2 ~@5 a2@2 ~@4 a2 ~", L: "d3@2 ~@2 d3@2 ~@4 d3 ~@5 d3 ~@5 d3 ~",
  M: "e3 ~@3 e3 ~@5 e3 ~@5 e3 ~ e3 ~ e3 ~ e3 ~", N: "a2 ~@3 a2 ~@5 a2 ~@5 a2 ~ a2 ~ a2 ~ a2 ~",
  O: "f#2 ~@3 f#2 ~@5 f#2 ~@5 f#2 ~ f#2 ~ f#2 ~ f#2 ~", P: "d2 ~@3 d2 ~@5 d2 ~@5 d2 ~ d2 ~ d2 ~ d2 ~",
  Q: "a2 ~@3 a2 ~@5 a2 ~@5 a2 ~@5 g2 ~", R: "d3 ~ d3 ~@19 d3 ~", S: "~@10 d3 ~@11 d3 ~",
  T: "d3 ~@3 d3 ~@5 d3 ~@5 d3 ~ d3 ~ d3 ~ d3 ~", U: "a2 ~ a2 ~ a2 ~ a2 ~@3 a2 ~@5 a2 ~@5 g2@2",
  V: "d3 ~@3 d3 ~@5 d3 ~@5 d3 ~@5 c3 ~", W: "d3 ~ d3 ~ d3 ~ d3 ~@3 d3 ~@5 d3 ~@5 c3@2",
  X: "e3 ~ e3 ~ e3 ~ e3 ~@3 e3 ~@5 e3 ~@5 d3@2", Y: "~@10 d3 ~@5 d3 ~@5 c3 ~", Z: "~@10 a2 ~@5 a2 ~@5 g2 ~", AA: "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