Strudelify
Major Tom cover art

Major Tom (Coming Home)

Major Tom

Peter Schilling

KeyE minorTempo169 bpm
0:00/0:00
// Major Tom — Schilling, Peter
// 169 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 155 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(169/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 2 · "SYN BASS 2"
const bass = note(`<
  ~@18 A B C@2 D E C@2 D F E@2 C@2 D@2 G F H E G F H E C@8 ~@2 C@2 D E C@2 D F E@2 C@4 D E C@2 D F E@2 C@2 D@2 G F H E G
  F H E C@5 ~@7 I@2 J K I@2 J K C@2 H G C@2 D F ~@6 G F H E G F H E L@16 ~@11
>`.pickRestart({
  A: "~@2 e1@2 e1@3 ~", B: "e1@2 e1@2 e1@3 ~", C: "e1 e2 e1 e2 e1 e2 e1 e2", D: "b0 b1 b0 b1 b0 b1 b0 b1",
  E: "c1 c2 c1 c2 c1 c2 c1 c2", F: "d1 d2 d1 d2 d1 d2 d1 d2", G: "g1 g2 g1 g2 g1 g2 g1 g2",
  H: "a1 a2 a1 a2 a1 a2 a1 a2", I: "e1@2 e2@2 e1@2 e2!2 e1@2 e2@2 e1@2 e2@2",
  J: "a1@2 a2@2 a1@2 a2!2 a1@2 a2@2 a1@2 a2@2", K: "d1@2 d2@2 d1@2 d2!2 d1@2 d2@2 d1@2 d2@2",
  L: "e1 ~ e2 ~ e1 ~ e2!2 e1 ~ e2 ~ e1 ~ e2 ~",
})).s("gm_synth_bass_2").gain(0.54)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@20 A@2 B C A@2 B D C@2 A@2 E@2 F G H I F G H I ~@10 A@2 B C A@2 B D C@2 A@4 B C A@2 B D C@2 A@2 E@2 F G H I F G H I
  ~@20 A@2 J K A@2 B D L@2 G M N@2 F G H I F G H I ~@27
>`.pickRestart({
  A: "e2@2 e3@2 e2@2 e3!2 e2@2 e3@2 e2@2 e3@2", B: "b1@2 b2@2 b1@2 b2!2 b1@2 b2@2 b1@2 b2@2",
  C: "c2@2 c3@2 c2@2 c3!2 c2@2 c3@2 c2@2 c3@2", D: "d2@2 d3@2 d2@2 d3!2 d2@2 d3@2 d2@2 d3@2",
  E: "b1 ~ b2 ~ b1 ~ b2 ~ b1 ~ b2 ~ b1 ~ b2 ~", F: "g2 g3 g2 g3 g2 g3 g2 g3", G: "d2 d3 d2 d3 d2 d3 d2 d3",
  H: "a2 a3 a2 a3 a2 a3 a2 a3", I: "c2 c3 c2 c3 c2 c3 c2 c3", J: "a2@2 a3@2 a2@2 a3!2 a2@2 a3@2 a2@2 a3@2",
  K: "g2@2 g3@2 g2@2 g3!2 g2@2 g3@2 g2@2 g3@2", L: "e2 e3 e2 e3 e2 e3 e2 e3", M: "b1 b2 b1 b2 b1 b2 b1 b2",
  N: "a1 a2 a1 a2 a1 a2 a1 a2",
})).s("gm_lead_2_sawtooth").gain(0.25)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  ~@8 A@2 B C A@2 B D E@2 F@2 ~@12 G@2 H@2 C I H@2 C I ~@34 G@2 H@2 C I H@2 C I ~@4 J@4 ~@26 H@2 C I H@2 C I ~@23 K@3 ~
>`.pickRestart({
  A: "[e4,g4,b4]/2", B: "[b3,d4,f#4]", C: "[c4,e4,g4]", D: "[d4,f#4,a4]", E: "[c4,e4,g4]/2", F: "[e4,g4,a4]/2",
  G: "[~@3 a4@5, [a3,d4]]/2", H: "[[g4,b4] [f#4,a4], d4]/2", I: "[g3,c4,e4]", J: "[~@7 e2@21 ~@4]/4",
  K: "[~@5 e2, ~@5 e2@12 ~@7, ~@16 e3@5 ~@3]/3",
})).s("gm_pad_warm").gain(0.26)

// other · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  A B C B D E D E F G H G H G H G H G H G I ~@21 J K L K L K L K I ~@35 J K L K L K L K I ~@60
>`.pickRestart({
  A: "~@4 e4 ~ e5 ~ d5 ~ e5 ~ a4 ~ b4 ~", B: "d5 ~ e5 ~ e4 ~ e5 ~ d5 ~ e5 ~ g4 ~ e5 ~",
  C: "f#4 ~ e5 ~ e4 ~ e5 ~ d5 ~ e5 ~ a4 ~ b4 ~",
  D: "[f#4,e5] ~ [e5,e6] ~ [e4,d6] ~ [e5,d6] d6 d5 d6 [e5,d6] ~ [a4,e5] e5 b4 d5", // F#7 E E7 A5
  E: "[d5,e5] ~ [e5,e6] ~ [e4,d6] ~ [e5,d6] d6 d5 d6 [e5,d6] ~ [g4,d6] d6 e5 ~", // Dsus2 E E7 G5
  F: "[f#4,e5] ~ e5 ~ e5 ~ [e5,e6] ~ [e5,d6] ~ [e5,e6] ~ [e5,a5] e5 b5 d5", // F#7 E E7 E A5
  G: "[e5,d6] ~ [e5,e6] ~ e5 ~ [e5,e6] ~ [g5,d6] ~ [g5,e6] ~ [f#5,g5] ~ [f#5,e6] d5", // E7 E G5 C Gmaj7 F#7
  H: "[e5,f#5] ~ [e5,e6] ~ e5 ~ [e5,e6] ~ [e5,d6] ~ [e5,e6] ~ [e5,a5] e5 b5 d5", I: "f#5 ~ e6 ~@13",
  J: "~@4 e5 ~ e6 ~ d6 ~ e6 ~ a5 ~ b5 ~", K: "d6 ~ e6 ~ e5 ~ e6 ~ d6 ~ e6 ~ g5 ~ e6 ~",
  L: "f#5 ~ e6 ~ e5 ~ e6 ~ d6 ~ e6 ~ a5 ~ b5 ~",
})).s("gm_percussive_organ").gain(0.09)

// other · percussive organ · "ORGAN 2"
const percussive_organ_2 = note(`<
  A B A B A B A B C D C D C D C D C D C D ~@22 C D C D C D C D ~@3 E ~@3 E ~@6 F G F G F G F G F G F G ~@10 C D C D C D
  C D ~@12 F G F G F G F G F G F G ~@37
>`.pickRestart({
  A: "e4 ~ e5 ~ d5 ~ e5 ~ a4 ~ b4 ~ d5 ~ e5 ~", B: "e4 ~ e5 ~ d5 ~ e5 ~ g4 ~ e5 ~ f#4 ~ e5 ~",
  C: "e5 ~ e6 ~ d6 ~ e6 ~ a5 ~ b5 ~ d6 ~ e6 ~", D: "e5 ~ e6 ~ d6 ~ e6 ~ g5 ~ e6 ~ f#5 ~ e6 ~",
  E: "~@8 d5 ~ e5 ~ d5 ~ e5 ~", F: "e4 ~ e5 ~ e4 ~ e5 ~@5 d5 ~ e5 ~", G: "d5 ~ e5 ~@13",
})).s("gm_percussive_organ").gain(0.32)

// other · percussive organ · "ORGAN 2" · soft notes
const percussive_organ_soft = note(`<
  ~@54 A ~@3 A ~@5 B C B C B C B C B C B C ~@30 B C B C B C B C B C B C ~@37
>`.pickRestart({
  A: "d5 ~ e5 ~@13", B: "~@8 e4 ~ e5 ~@5", C: "~@4 d5 ~ e5 ~ d5 ~ e5 ~ d5 ~ e5 ~",
})).s("gm_percussive_organ").gain(0.18)

// other · synth drum
const synth_drum = note(`<
  ~@8 A ~@3 A ~@7 B C B C B C B C B C B C ~@2 B C B C B C B C B C B C B C B C A ~ B C B C B C B C B C B C B C B C B C B
  C B C B C ~@2 B C B C B C B C B C B C B C B C A ~@3 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B
  C B C B C B C B C B C B C ~@11
>`.pickRestart({
  A: "f#1 ~@3", B: "f#1 ~@3 f#1 ~@3 f#1 ~@3 f#1 ~@3", C: "f#1 ~@3 f#1 ~@3 f#1 ~@3 f#1 ~@2 f#1",
})).s("gm_synth_drum").gain(0.48)

// other · accordion
const accordion = note("<~@6 A@3 ~@33 B@3 ~@17 A@3 ~@37 A@3 ~@7 C@3 ~@3 A@3 ~@34>".pickRestart({
  A: "[a3,a4]/3", B: "d4/3", C: "a4/3",
})).s("gm_accordion").gain(0.02)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note("<~@50 A B ~@42 A B A B C@2 ~@44 A B A B A B A B ~@3>".pickRestart({
  A: "e2 ~ e3 ~ d3 ~ e3 ~ a2 ~ b2 ~ d3 ~ e3 ~", B: "e2 ~ e3 ~ d3 ~ e3 ~ g2 ~ e3 ~ f#2 ~ e3 ~", C: "e1/2",
})).s("gm_lead_1_square").gain(0.42)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A ~@3 A ~@7 B C B C B C B C B C B C ~@2 B C B C B C B C B C B C B C B C A ~ B C B C B C B C B C B C B C B C B C B
  C B C B C ~@2 B C B C B C B C B C B C B C B C A ~@3 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B
  C B C B C B C B C B C B C ~@11
>`.pickRestart({
  A: "x", B: "x!4", C: "x ~@3 x ~@3 x ~@3 x ~@2 x",
})).gain(0.6)

// drums · clap
const clap = s("cp").struct("<~@34 A@8 ~@10 A@24 ~@2 A@8 ~@20 A@8 B C B C ~@2 A@8 ~@27>".pickRestart({
  A: "~@4 x ~@6 x!2 ~ x ~", B: "~@2 x ~@2 x!3", C: "~@2 x ~@3 x!2",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<~@20 A@12 ~@2 A@8 ~@10 A@20 ~@6 A@8 ~@34 A@8 ~@27>".pickRestart({
  A: "x!4",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@20 A@12 ~@2 A@8 ~@10 A@20 ~@6 A@8 ~@34 A@8 ~@27>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~@34 A@8 ~@10 A@20 ~@6 A@8 ~@20 A@30 ~@19>".pickRestart({
  A: "x!16",
})).gain(0.18)

// drums · crash
const crash = s("cr").struct("<~@50 A ~@43 A ~@21 A@2 B C ~@35>".pickRestart({
  A: "x", B: "x!2", C: "x!4",
})).gain(0.24)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct("<~@20 A@12 ~@2 A@8 ~@10 A@24 ~@2 A@8 ~@20 A@8 ~@6 A@24 ~@11>".pickRestart({
  A: "~ x ~ x",
})).gain(0.52)

stack(
  bass, lead_2_sawtooth, pad_warm, percussive_organ, percussive_organ_2, percussive_organ_soft, synth_drum, accordion,
  lead_1_square, kick, clap, hihat, open_hat, tambourine, crash, woodblocks
)