Strudelify
Rocket 2 You cover art

2010 · Dance Classics, Volume 27 & 28

Rocket 2 You

Jets

KeyD minorTempo120 bpm
0:00/0:00
// Rocket 2 You — Jets
// 120 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B A B A B A ~ A C A B A B A B A B A B A B A B A B A B A B A ~ A B A B A B A D A B A B A B A ~ A B E B A B A B A B
  A ~ A B A B A B A D A B A B A B A ~ A B E B A F A ~ E B A ~ E B A ~ G ~ G ~ G ~ H I J F J D A B A B A B A ~ A B A B A
  B A ~ A F A B
>`.pickRestart({
  A: "[g1,g2] [a1,a2] ~ [f1,f2] [g1,g2] [d1,d2] ~@2", B: "[g1,g2] [a1,a2] [f1,f2] [g1,g2] [d1,d2] ~@3",
  C: "[g1,g2]@2 [a1,a2]@2 [f1,f2]@2 [g1,g2]@2 [d1,d2]@3 ~@5", D: "[c1,c2] ~@7",
  E: "[g1,g2] a1 ~ [f1,f2] [g1,g2] [d1,d2] ~@2, ~@2 a2 ~@13", F: "[g1,g2] a1 [f1,f2] [g1,g2] [d1,d2] ~@3, ~@2 a2 ~@13",
  G: "~@3 [f1,f2] [g1,g2] d1 ~@2, ~@10 d2 ~@5", H: "~@2 [d1,d2]@2 ~@6 d1@2 ~ d1@2 ~", I: "d1@2 ~@4 d1!3 d1@2 d1@2 ~@3",
  J: "[g1,g2]@2 [a1,a2] ~@3 [f1,f2]@2 [g1,g2]@2 [d1,d2]@2 ~@4", // G A F G D
})).s("gm_acoustic_bass").gain(0.5)

// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note("<~@4 A ~@3 B ~@7 C D E F G H I@2 J ~@67 C ~@6 K L ~@23 C>".pickRestart({
  A: "[c4,f4,a4]@2 [d4,g4,b4] ~ [c4,f4,a4]@2 [e4,g4] ~ [a3,d4]@2 ~@6, ~@6 b3@2 f4 ~@7", B: "~@10 [d4,d5] ~@5",
  C: "~@5 [d4,d5] ~@2", D: "~@4 f5@2 e5@2 d5@2 c5@2 a4@3 ~", E: "a4@2 d5 c5@3 a4 d5",
  F: "~@2 [a4,f5] [g4,e5] [f4,d5] [e4,c5] [d4,a4] ~", G: "[d4,a4]@4 [a4,e5]@2 [g4,d5]@6 g4@2 f4 ~",
  H: "~@2 [a4,c5,f5] [g4,bb4,d5] [f4,a4,c5] [e4,g4,bb4] [f4,a4] ~, ~@12 d4 ~@3", // F Gm F Edim F
  I: "[[d4,f4,a4]@4 [f4,a4,d5]@2 [e4,g4,c5]@6 [f4,a4]@2 [e4,g4,bb4]@9 ~ [f4,a4,c5]@7 ~, ~@12 d4 ~@19]/2", // Dm C F Edim F
  J: "[g4,bb4,db5]@7 ~ [c5,f5]@8, ~@4 a4@3 ~", K: "~@2 [d4,d5]@2 ~@6 d5@2 ~ [d4,d5]@2 ~, ~@10 d4 ~@5",
  L: "[d4,d5]@2 ~@4 [d4,d5]!2 ~ d4 ~ [d4,d5]@2 ~@3, ~@4 d5 ~@3", // D
})).s("gm_synth_brass_1").gain(0.6)

// chords · pad sweep · "SWEEP PAD"
const pad_sweep = note(`<
  ~@4 A ~@4 B@2 C@2 D@2 E@2 B@2 C@2 D@2 F@2 ~@24 G H I J ~@24 G H I J K H L M N ~@15 O@2 P ~@21
>`.pickRestart({
  A: "~@4 [d5,f5,a5,c6]@3 ~", B: "[a4,c5,d5,f5]/2", C: "[[g4,c5,e5]@31 ~]/2", D: "[[f4,bb4,d5]@31 ~]/2",
  E: "[[g4,bb4,db5,e5]@29 ~@3]/2", F: "[[g4,bb4,db5,e5]@31 ~]/2", G: "[a3,b3,d4,f4]@7 ~, e4 ~@15",
  H: "[a3,b3,d4,f4] ~@2 [a3,b3,d4,f4] ~@4 [a3,b3,d4,f4] ~@2 [a3,b3,d4,f4] ~@4", I: "~@4 [a3,c4,d4,f4]@10 ~ [g3,a3]",
  J: "[b3,c4,f4,a4] ~ [c4,f4,a4] ~ [b3,e4,g4] ~ [b3,e4,g4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~ [b3,e4,g4]@2 ~@2", // F Em Dm Em
  K: "~@4 [a3,b3,d4,f4]@11 ~", L: "~ [a3,c4,d4,f4]@2 ~",
  M: "[d4,d5] ~@3 d4@2 ~@2 [d4,d5] ~@3 [d4,a4,c5,d5,f5]@2 e5 [e4,f4,g4,a4,b4], ~@4 d5 ~@7 e5 ~@3", N: "[b3,c4,d4] ~@15",
  O: "[[a3,b3,d4,f4]@23 ~ [a3,b3,d4,f4] ~@2 [a3,b3,d4,f4] ~@4]/2", P: "~@2 [a3,c4,d4,f4]@5 ~",
})).s("gm_pad_sweep").gain(0.38)

// chords · clavinet
const clavinet = note(`<
  ~@31 A@2 ~ B ~ C ~ D ~ E F ~@7 G H I J ~@6 A@2 ~ B ~ C ~ D ~ E F ~@7 G H I J K H L M N ~@7 O@2 P Q O R S T U@2 V ~ F
  ~@7 F ~@11
>`.pickRestart({
  A: "[~@17 a4@13 ~@2, ~@15 [d5,f5]@15 ~@2, ~@8 c5@7 ~]/2", // Dm
  B: "[g4,a4,c5,e5] ~@2 [g4,a4,c5,e5] ~@4 [g4,a4,c5,e5] ~@2 [g4,a4,c5,e5] ~@4", // Am7
  C: "[a4,bb4,d5,f5] ~@2 [a4,bb4,d5,f5] ~@4 [a4,bb4,d5,f5] ~@2 [a4,bb4,d5,f5] ~@4", // Bbmaj7
  D: "[g4,a4,c5,e5] ~@2 [g4,a4,c5,e5] ~@4 [g4,a4,c5,e5] ~@2 [g4,a4,c5,d5,e5] ~@4", E: "[g5,bb5,db6,e6] ~@15",
  F: "[bb5,c6,d6,f6]@3 ~ [b4,c5,d5,e5,f5] [g4,a4] ~@10", G: "[a4,b4,d5,f5]@7 ~, e5 ~@15",
  H: "[a4,b4,d5,f5] ~@2 [a4,b4,d5,f5] ~@4 [a4,b4,d5,f5] ~@2 [a4,b4,d5,f5] ~@4", I: "~@4 [a4,c5,d5,f5]@10 ~ [g4,a4]",
  J: "[b4,c5,f5,a5] ~ [c5,f5,a5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [a4,d5,f5] ~ [a4,d5,f5] ~ [b4,e5,g5]@2 ~@2", // F Em Dm Em
  K: "~@4 [a4,b4,d5,f5]@11 ~", L: "~ [a4,c5,d5,f5]@2 ~",
  M: "[d5,d6] ~@3 d5@2 ~@2 [d5,d6] ~@3 [d5,a5,c6,d6,f6]@3 [e5,f5,g5,a5], ~@4 d6 ~@7 e6 ~@3", N: "[b4,c5,d5] ~@15",
  O: "d6!2 d5 d6!2 d5 d6!2 d5 d6!2 d5 d6!2 d5 d6", P: "d6 d5 d6!2 d5 d6!2 d5 d6!2 d5 d6!2 d5 d6!2",
  Q: "d5 d6!2 d5 d6!2 d5 d6!2 d5 d6!2 d5 d6!2 d5", R: "d6 d5 d6!2 d5 d6!2 d5 d6!2 d5 d6 d5 d6 d5 ~",
  S: "~@2 [d4,d5]@2 ~@6 d5@2 ~ [d4,d5]@2 ~, ~@10 d4 ~@5", T: "[d4,d5]@2 ~@4 [d4,d5]!2 ~ d4 ~ [d4,d5]@2 ~@3, ~@4 d5 ~@3",
  U: "[[a4,b4,d5,f5]@23 ~ [a4,b4,d5,f5] ~@2 [a4,b4,d5,f5] ~@4]/2", V: "~@2 [a4,c5,d5,f5]@5 ~",
})).s("gm_clavinet").gain(0.44)

// chords · clavinet · soft notes
const clavinet_soft = note("<~@32 A ~@8 B ~@18 A ~@8 B ~@14 C ~@20 B ~@7 B ~@11>".pickRestart({
  A: "bb4@13 ~@3", B: "~@2 e6 [a5,b5,db6] g5 ~@11", C: "~@14 e6 b5",
})).s("gm_clavinet").gain(0.12)

// other · tubular bells · "TUBULARBEL"
const tubular_bells = note("<~@18 [f6 d6 c6 d6] ~@3 [f6@4 e6@4 d6@4 e6@3 ~] ~@102>").s("gm_tubular_bells").gain(0.38)

// drums · kick
const kick = s("bd").struct(`<
  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 B C B C B C B C B C B C B C B D B C B E B C B C B C B E B C B C B C
  B C B C B C B C B D B C B E B C B C B C B F B C B G B C B C B C B C H C B C B C I J B C B D B C B E B C B C B C B E B
  C B C B C B C
>`.pickRestart({
  A: "~@14 x!2", B: "x ~@2 x!3 ~@2", C: "x!2 ~ x!2 ~@3", D: "x", E: "x ~ x!3 ~ x ~", F: "x ~ x!3 ~@3", G: "x ~@4 x!2 ~",
  H: "x ~@2 x ~ x ~@2", I: "~@2 x ~@7 x ~@2 x ~@2", J: "x ~@8 x ~ x ~@4",
})).gain(0.69)

// drums · snare
const snare = s("sd").struct(`<
  A B@7 C B@7 C B@7 D B@15 E B@3 F B@7 F B@15 E B@3 F B@4 G H B I G H B J B@4 K B@2 C B L B@3 M N O B@2 P E B@3 F B@7 F
  B@7 C
>`.pickRestart({
  A: "~@10 x!3 ~@3", B: "~ x ~ x", C: "~@2 x ~@2 x ~@2", D: "~@4 x ~@7 x ~ x!2", E: "x", F: "~ x ~ x ~@2 x ~",
  G: "~@4 x ~@2 x ~@4 x ~@3", H: "~@4 x ~@7 x ~@2 x", I: "~@2 x ~@2 x!4 ~@7", J: "x ~@3 x ~ x!2 ~@8", K: "~ x ~@2",
  L: "~@4 x ~@5 x!3 ~ x!2", M: "~@4 x ~@5 x!4 ~@2", N: "~@2 x ~@7 x ~@2 x ~@2", O: "x ~@5 x!4 ~ x ~@4",
  P: "~@4 x ~@7 x!4",
})).gain(0.69)

// drums · low tom
const low_tom = s("lt").struct("<A ~@43 B ~@7 B ~@19 B ~@7 C ~@3 D ~@23 B ~@7 B ~@8>".pickRestart({
  A: "~@3 x", B: "~@3 x ~@2 x ~", C: "~@3 x!2 ~@3", D: "~@5 x ~@2",
})).gain(0.69)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@7 B A@7 B A@15 ~ A@7 C A@3 D A@3 ~ A@3 D A@7 ~ A@7 C A@3 D A@3 ~ A@7 ~ A@4 B A@2 B A@6 ~@2 A@3 ~ A@3 D A@3 ~ A@3 D
  A@3 ~ A@3 B
>`.pickRestart({
  A: "x!4", B: "x!3 ~", C: "x", D: "x!2 ~@2",
})).gain(0.69)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A@7 B A@7 B A@15 ~ A@7 ~ A@3 C A@3 ~ A@3 C A@7 ~ A@7 ~ A@3 C A@3 ~ A@7 ~ A@4 D A@2 B A@6 ~@2 A@2 B ~ A@3 C A@3 ~ A@3
  C A@3 ~ A@3 B
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4", C: "~ x ~ x ~@3 x", D: "~ x ~ x ~ x ~@2",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<~@44 A ~@7 A ~@19 A ~@7 A ~@3 B ~@23 A ~@7 A ~@8>".pickRestart({
  A: "~ x ~@6", B: "~@8 x!2 ~@6",
})).gain(0.69)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@2 B A ~@3 A ~@2 B A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~ A ~ A ~ A@3 ~@6 B A ~ A
  ~ A ~ C D A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 B
>`.pickRestart({
  A: "x", B: "~@5 x ~@2", C: "~@2 x ~@7 x ~@2 x ~@2", D: "x ~@5 x!3 ~@7",
})).gain(0.69)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B@7 C B@7 C B@7 D B@15 ~ B@3 E B@7 E B@15 ~ B@3 E B@7 F B@3 ~ B@4 G B@2 C B H B@4 I J B@2 K L B@3 E B@7 E B@7 C
>`.pickRestart({
  A: "~@10 x!3 ~@3", B: "~ x ~ x", C: "~@2 x ~@2 x ~@2", D: "~@4 x ~@7 x ~ x!2", E: "~ x ~ x ~@2 x ~",
  F: "~@2 x ~@3 x!3 ~@7", G: "~ x ~@2", H: "~@4 x ~@5 x!3 ~ x!2", I: "~@2 x ~@7 x ~@2 x ~@2", J: "x ~@5 x!4 ~ x ~@4",
  K: "~@4 x ~@7 x!4", L: "x",
})).gain(0.69)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@2 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~@3 A ~ A ~ A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2
>`.pickRestart({
  A: "~@8 x ~@2 x!2 ~@3",
})).gain(2.21)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@2 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~@3 A ~ A ~ A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2
>`.pickRestart({
  A: "~@7 x",
})).gain(2.21)

stack(
  bass, synth_brass_1, pad_sweep, clavinet, clavinet_soft, tubular_bells, kick, snare, low_tom, hihat, hihat_soft,
  mid_tom, crash, tambourine, congas, congas_2
)