Strudelify

Major Tom '94

Bommbastic

KeyE minorTempo164 bpm
0:00/0:00
// Major Tom '94 — Bommbastic
// 164 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 186 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): DISTORTION.
setcpm(164/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@2 B C D E F G H@2 ~@36 I J K@2 H@2 ~@44 A@4 H L A@2 H L M N ~@78>".pickRestart({
  A: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  B: "e2 ~ e3@2 d3@2 [e2,e3] ~ a2@2 b2@2 d3@2 e3@2, ~@2 e2 ~ e2 ~@3 e2 ~ e2 ~ e2 ~ e2 ~", // E
  C: "e2 ~ [e2,e3] ~ d3@2 [e2,e3] ~ g2@2 e3@2 f#2@2 e3@2, ~@4 e2 ~@3 e2 ~ e2 ~ e2 ~ e2 ~", // E
  D: "e2 ~ [e2,e3] ~ d3@2 e3@2 a2@2 b2@2 d3@2 e3@2, ~@4 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", // E
  E: "e2 ~ e3@2 d3@2 [e2,e3] ~ g2@2 e3@2 f#2@2 e3@2, ~@2 e2 ~ e2 ~@3 e2 ~ e2 ~ e2 ~ e2 ~", // E
  F: "e2 ~ e3@2 d3@2 e3@2 a2@2 b2@2 d3@2 e3@2, ~@2 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  G: "e2 ~ [e2,e3] ~ d3@2 [e2,e3] ~ g2@2 e3@2 f#2@2 e2 ~, ~@4 e2 ~@3 e2 ~ e2 ~ e2 ~@3", // E
  H: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~", I: "~@6 e1@2 ~@2 e1 ~ d2@2 e2@2", J: "e1@5 ~ e1@2 ~@2 e1@2 d2@2 e2 ~",
  K: "e1@5 ~ e1@2 ~@2 e1 ~ d2@2 e2 ~", L: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  M: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", N: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
})).s("gm_synth_bass_1").gain(0.28).pan(0.6)

// bass · electric bass finger · "FINGERDBAS"
const bass_2 = note(`<
  ~@4 A B C D E@2 ~@14 F G H I J K L I M N J O P Q R S T U@2 V W X@2 Y Z@2 E@2 ~@14 F G H I J K L I M N J O P Q R S T
  U@2 V W AA AB AC T U@2 V W AD AE@4 E AF AE@2 E AF AG AH F G H I J K L I M N J O P Q R S T U@2 V W AA R S T U@2 V W AA
  R S T U@2 V W AA R S T U@2 V W AA R S T U@2 V W AA R S T U@2 V W AA R S T U@2 V W AA ~@8
>`.pickRestart({
  A: "e1@2 ~@4 e1@2 ~@2 e1 ~ d2@2 e2 ~", B: "e1@3 ~@3 e1@2 ~@2 e1 ~ d2@2 e2 ~", C: "e1@3 ~@3 e1@2 ~@2 e1 ~ d2@2 e2@2",
  D: "e1@3 ~@3 e1@2 ~@2 e1 ~ d2 ~ e2 ~", E: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", F: "~@2 e1 ~ g1 ~ b1 ~",
  G: "~@2 e1 g1@3 ~ f#1@2 ~@3 e1@2 ~@2", H: "~@4 a1@2 ~@2 c2@3 ~ e2@2 ~@2", I: "~@2 d2 ~ e2@3 ~ d2@3 ~ a1@3 ~",
  J: "~@4 e1@3 ~ g1@3 ~ b1@3 ~", K: "~@2 e1 g1@3 ~ f#1@2 ~@3 e1@3 ~", L: "~@4 a1@3 ~ c2@3 ~ e2@3 ~",
  M: "~@4 c1@3 ~ e1@3 ~ g1@3 ~", N: "~@4 a0@3 ~ c1@3 ~ e1@3 ~", O: "~@2 e1 ~ g1@3 ~ f#1@4 e1@3 ~",
  P: "~@4 b1@3 ~ a1@3 ~ f#1@4", Q: "~@2 f#1 ~ b1@3 ~ a1@3 ~ f#1@2 ~@2", R: "g1@7 ~ g1@7 ~", S: "d2@7 ~ d2@8, c2 ~@15",
  T: "a1@7 ~ a1@8", U: "[c2@7 c2@8 g1@7 ~@2 g1@7 ~]/2", V: "d2@7 ~ d2@7 ~", W: "a1@7 ~ a1@7 ~",
  X: "[c2@7 ~ c2@6 ~ e1@6 ~ e1@2 ~@2 e1 d2@2 ~ e2@2]/2", Y: "e1@5 ~ e1@2 ~@3 d2@2 ~ e2 ~, ~@5 e1 ~@2",
  Z: "e1@5 ~ e1@2 ~@2 e1 ~ d2@2 e2 ~", AA: "c2@7 ~ c2@6 ~@2", AB: "g1@7 ~ g1@5 ~@3", AC: "d2@7 ~ d2@8",
  AD: "c2@7 ~ c2@6 ~ e1", AE: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~", AF: "d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~ d1 ~",
  AG: "c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~", AH: "a0 ~ a0 ~ a0 ~ a0 ~ a0 ~ a0 ~ a0 ~ a0 ~",
})).s("gm_electric_bass_finger").gain(0.4)

// bass · slap bass 1 · "SLAP BASS"
const bass_3 = note(`<
  ~@4
  [e1@2 ~@4 e1@2 ~@2 e1 ~ d2@2 e2 ~]!2
  [e1@2 ~@4 e1@2 ~@2 e1 ~ d2 ~ e2 ~]
  [e1@2 ~@4 e1 ~@3 e1 ~ d2@2 e2 ~]
  ~@178
>`).s("gm_slap_bass_1").gain(0.32)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@4 A B C D E@2 F G F G H I F G H I J K L M F G H I F G H I J K L M N@2 O I E P O I E Q R S T U E@2 F G F G H I F G H
  I J K L M F G H I F G H I J K L M N@2 O I E P O I E Q O I E P O I E Q ~@12 F G H I F G H I J K L M N@2 O I E P O I E Q
  O I E P O I E Q O I E P O I E Q O I E P O I E Q O I E P O I E Q O I E P O I E Q O I E P O I E V@8 ~
>`.pickRestart({
  A: "e2 ~ [e2,b3] ~ e2@2 e2 ~ e2@2 e2@2 e2@2 e2 ~", B: "e2 ~ [e2,b3]@2 e2@2 e2 ~ [e2,g3]@2 e2 ~ [e2,f#3]@2 e2 ~",
  C: "e2 ~ [e2,b3]@2 e2@2 e2@2 e2@2 e2 ~ [e2,f#3]@2 [e2,b3] ~", // E5 Esus2 E5
  D: "e2 ~ [e2,b3]@2 [e2,a3]@2 e2 ~ [e2,g3]@2 [e2,b3] ~ [e2,f#3]@2 e2 ~", // E5 A5 Em E5 Esus2
  E: "[e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~", // A5
  F: "[b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ e3 ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~", // E5
  G: "[b2,e3] ~ e3 ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ e3 ~ [b2,e3] ~ [b2,e3] ~", // E5
  H: "[e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ a3 ~ [e3,a3] ~ [e3,a3] ~ [d4,a4,d5]@2", // A5 D5
  I: "[a3,d4] ~ [a3,d4] ~ [a3,d4] ~ [a3,d4] ~ [a3,d4] ~ [a3,d4] ~ [a3,d4] ~ [a3,d4] ~", // D5
  J: "[g2,c3] ~ [g2,c3] ~ [g2,c3] ~ [g2,c3] ~ [g2,c3] ~ [g2,c3] ~ [g2,c3] ~ [g2,c3] ~", // C5
  K: "[e3,a3] ~ a3 ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~", // A5
  L: "[b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~@3 [b2,e3] ~@3", // E5
  M: "[b2,e3] ~@3 [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~ [b2,e3] ~", // E5
  N: "[f#3,b3] ~ [f#3,b3] ~ [f#3,b3] ~ [f#3,b3] ~ [f#3,b3] ~ [f#3,b3] ~ [f#3,b3] ~ [f#3,b3] ~", // B5
  O: "[d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~ [d3,g3] ~", // G5
  P: "[g3,c4,d4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~", // Gsus4 C5
  Q: "[g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~", // C5
  R: "[b2,e3] ~ [b2,e3] ~ [b2,e3,g3] ~ [b2,e3] ~ [b2,e3,f#3] ~ [b2,e3] ~ [b2,e3,g3] [b2,e3] e3 [b2,e3]", // E5 Em E5 Bsus4 E5 Em E5
  S: "~ [b2,e3] e3 [b2,e3] g3 ~ [b2,e3] ~ [b2,e3,f#3] ~ [b2,e3] ~ [b2,e3,g3] ~ [b2,e3] ~", // E5 Bsus4 E5 Em E5
  T: "[b2,e3] ~ [b2,e3] ~ [b2,e3,g3] ~ [b2,e3] ~ [b2,e3,f#3] ~ [b2,e3] ~ [b2,e3,g3] ~ [b2,e3] ~", // E5 Em E5 Bsus4 E5 Em E5
  U: "[b2,e3] ~ [b2,e3]!2 g3 ~ [b2,e3] ~ [b2,e3,f#3] ~ [b2,e3] ~ [b2,e3,g3] ~ [b2,e3] ~", // E5 Bsus4 E5 Em E5
  V: "[[g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~ g3@116]/8", // C5
})).s("gm_electric_guitar_muted").gain(0.35).pan(0.4)

// chords · electric guitar muted · "MUTED GTR" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@4 A B C D ~@2 E F E F G ~ E F G ~@2 H I J E F G ~ E F G ~@2 H I J ~@16 E F E F G ~ E F G ~@2 H I J E F G ~ E F G ~@2
  H I J ~@30 E F G ~ E F G ~@2 H I J ~@66
>`.pickRestart({
  A: "~@4 a3@2 b3 ~ g3@2 b3@2 f#3@2 b3 ~", B: "~@4 a3@2 b3 ~@3 b3 ~@3 e3 ~", C: "~@4 a3@2 b3@2 g3@2 b3 ~@5",
  D: "~@6 b3 ~@7 b3 ~", E: "~@8 b2 ~@7", F: "~@2 b2 ~@7 b2 ~@5", G: "~@8 e3 ~@7", H: "~@2 e3 ~@13",
  I: "~@10 [b2,e3] ~@3 [b2,e3] ~", J: "~@2 [b2,e3] ~@13",
})).s("gm_electric_guitar_muted").gain(0.18).pan(0.4)

// chords · distortion guitar · "DISTORTION" · G5
const distortion_guitar = note("<~@178 [[g3,d4,g4]@3 ~@5, f4 ~@15] ~@7>").s("gm_distortion_guitar").gain(0.35).pan(0.6)

// chords · synth strings 1 · "SYN STRING"
const synth_strings_1 = note(`<
  ~@38 A B C D@5 ~@34 E F G H@5 A B C D@5 ~@26 E F G H@5 E F G H@5 E F G I@6 J K L@5 M N O@6 M N P@6 M Q R@6 S ~@7
>`.pickRestart({
  A: "~ [g3,b3,d4]@14 ~", B: "[a3,d4,f#4]", C: "[a3,c4,e4]@15 ~",
  D: "[[g3,c4,e4]@15 [g3,b3]@15 ~ f#4@15 ~ [c4,e4]@16 [c4,e4]@16 [b3,e4,g4], ~@15 d4@32 ~@33, ~@31 a3@31 ~ g3@14 ~@3]/5", // C G C Em
  E: "~@4 d6@3 ~, b5 ~, ~ [g3,b3,d4]@14 ~", F: "d6@4 c6@2 b5@2 a5@7 ~, [a3,d4,f#4]", G: "c6@8 e6@7 ~, [a3,c4,e4]@15 ~",
  H: "[e6@8 d6@7 ~ b5@8 d6@7 d6@7 [b5,c6] ~ a5@7 ~ c6@8 e6@7 ~ e6@8 d6@7 [b3,e4,g4], [g3,c4,e4]@15 d4@32 [c4,e4]@16 [c4,e4]@16 ~, d#6 ~@14 [g3,b3]@15 ~ a3@31 ~ g3@14 ~@3, ~@31 f#4@15 ~@18 d6 ~@15]/5", // Cmaj7 Em C G
  I: "[e6@8 d6@7 ~ b5@8 d6@7 d6@7 [b5,c6] ~ a5@7 ~ c6@8 e6@7 ~ e6@8 ~@4 f#6@3 [b3,e4,g4] ~ [g3,b3,d4]@14 ~, [g3,c4,e4]@15 d4@32 [c4,e4]@16 [c4,e4]@16 g6@16 ~, d#6 ~@14 [g3,b3]@15 ~ a3@31 ~ g3@14 ~@19, ~@31 f#4@15 ~@26 e6@8 ~@16]/6", // Cmaj7 Em G C G
  J: "f#6@4 g6@2 f#6@2 e6@4 d6@3 ~, [a3,d4,f#4]", K: "e6@3 d6, [a3,c4,e4]@15 ~",
  L: "[e6@8 f#6@7 ~@17 a6@4 b6@2 g6 f#6 [e6,g6]@4 [d6,f#6]@3 ~ g6@14 ~@2 g6@8 [f#6,a6]@7 [b3,e4,g4], [g3,c4,e4]@15 d4@32 [c4,e4]@16 [c4,e4]@16 ~, ~@15 [g3,b3]@15 ~ a3@31 ~ g3@14 ~@3, ~@8 [g6,b6]@8 f#6@3 a6 ~@4 e6@12 ~@4, ~@31 f#4@15 ~@16 f#6@2 ~@16]/5", // Em D F#m Em C G
  M: "~ [g3,b3,d4]@14 ~, [g6,b6]", N: "[f#6,a6]@2 [g6,b6] [f#6,a6] [e6,g6]@2 [d6,f#6]@2, [a3,d4,f#4]",
  O: "[[a3,c4,e4]@15 ~@9 [f#6,a6]@7 ~@17 [f#6,a6]@4 [g6,b6]@2 [f#6,a6]@2 [e6,g6]@4 [d6,f#6]@3 ~@25 [f#6,a6]@7 [b3,e4,g4], [e6,g6]@24 ~@7 [g3,b3]@15 ~ a3@31 ~ g3@14 ~@3, ~@16 [g3,c4,e4]@15 d4@32 [c4,e4]@16 [c4,e4]@16 ~, ~@32 [g6,b6]@17 ~@15 [e6,g6]@24 ~@8, ~@47 f#4@15 ~@34]/6", // Am F#m G F#m Em D F#m Em …
  P: "[[a3,c4,e4,e6]@15 d6 e6@8 [f#6,a6]@7 ~@17 [f#6,a6]@4 ~@4 g6@4 [d6,f#6]@3 ~ e6@15 ~ e6@8 f#6@7 [b3,e4,g4], g6@23 ~@8 [g3,b3,g6]@16 a3@31 ~ g3@14 ~@3, ~@16 [g3,c4,e4]@15 d4@32 [c4,e4]@16 [c4,e4]@16 ~, ~@32 b6@17 ~@3 [g6,b6] f#6 a6 e6@4 ~@5 g6@30 ~@2, ~@47 f#4@15 ~@34]/6", // Am F#m D Em G C G
  Q: "[f#6,a6]@4 ~@4 e6@3 ~ d6@4, [a3,d4,f#4], ~@4 [g6,b6]@2 f#6@2 ~@3 f#6@4 ~, ~@5 a6@2 g6@4 ~@5", // F#m D G
  R: "[[a3,c4,e4,e6]@15 d6 e6@8 f#6@7 ~ [g6,b6]@15 ~ [f#6,a6]@4 [g6,b6]@2 [f#6,a6]@2 [e6,g6]@4 [d6,f#6]@3 ~ e6@14 d6 d#6 e6@7 ~ [f#6,a6]@7 [b3,e4,g4], g6@31 [g3,b3]@15 ~ a3@31 ~ g3@14 ~@3, ~@16 [g3,c4,e4]@15 d4@32 [c4,e4]@16 [c4,e4]@16 ~, ~@47 f#4@15 ~@2 g6@23 ~@9]/6", // Am G F#m G F#m Em D F#m …
  S: "[g6,b6]", // G
})).s("gm_synth_strings_1").gain(0.28).pan(0.7)

// chords · pad sweep · "SWEEP PAD"
const pad_sweep = note("<~@88 A@3 B@3 C D E@2 ~@88>".pickRestart({
  A: "[~ [g3,b3,d4]@14 [d4,f#4]@15 ~ [c4,e4]@16 ~, ~@15 a3@32 ~]/3", // G D C
  B: "[[c4,e4,g4]@15 [d4,b4]@16 [f#4,a4,d5]@16 ~, ~@15 g4@13 ~@20]/3", C: "c5@5 ~ c5@10, [a4,e5]", D: "[c5,e5,g5]@7 ~",
  E: "[[e5,g5,b5]@31 ~]/2", // Em
})).s("gm_pad_sweep").gain(0.17).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@4 A@6 B@28 C@12 A@2 B@28 C@18 B@24 C@56 ~@8>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "~ x ~ x", C: "x!2",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@4 A@6 ~@28 A@14 ~@28 A@18 ~@10 B@11 ~@3 A@56 ~@8>".pickRestart({
  A: "~ x ~ x", B: "~@3 x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@10 A@14 B@26 ~@2 A@14 B@32 A@10 B@70 ~@8>".pickRestart({
  A: "~@2 x!2 ~@4", B: "x!8",
})).gain(0.22)

// drums · open hat
const open_hat = s("oh").struct("<~@10 [~@3 x]!28 ~@14 [~@3 x]!28 ~@18 [~@3 x]!24 ~@64>").gain(0.31)

// drums · crash
const crash = s("cr").struct("<~@38 A ~@41 A ~@7 A ~@33 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15>".pickRestart({
  A: "x",
})).gain(0.36)

stack(
  bass, bass_2, bass_3, electric_guitar_muted, electric_guitar_muted_2, distortion_guitar, synth_strings_1, pad_sweep,
  kick, snare, hihat, open_hat, crash
)