Strudelify

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: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D E B F ~ A G A D F D E G H I J D K B H L E D E G E D E ~ E G E M E D N O E G A D E G E ~ E D A G E D E G E D
  E ~ E G E D E D P O E G A D A G E ~ E D A G E B E ~ A Q F ~ A B F ~ R ~ S ~ S ~ T U F B V O E G E D A G A ~ E G A D E
  G E ~ W X C Y
>`.pickRestart({
  A: "[g1,g2] a1 ~ [f1,f2] [g1,g2] [d1,d2] ~@2, ~@2 a2 ~@13", B: "[g1,g2] a1 [f1,f2] [g1,g2] [d1,d2] ~@3, ~@2 a2 ~@13",
  C: "[g1,g2] a1 ~ [f1,f2] g1 [d1,d2] ~@2, ~@2 a2 ~@5 g2 ~@7", D: "[g1,g2] [a1,a2] [f1,f2] [g1,g2] [d1,d2] ~@3",
  E: "[g1,g2] [a1,a2] ~ [f1,f2] [g1,g2] [d1,d2] ~@2", F: "[g1,g2]@2 [a1,a2] ~@3 [f1,f2]@2 [g1,g2]@2 [d1,d2]@2 ~@4",
  G: "[g1,g2]@2 [a1,a2]@2 [f1,f2]@2 [g1,g2]@2 [d1,d2]@3 ~@5", // G A F G D
  H: "[g1,g2] a1 ~ [f1,f2] [g1,g2] d1 ~@2, ~@2 a2 ~@7 d2 ~@5", I: "[g1,g2] [a1,a2] [f1,f2] g1 [d1,d2] ~@3, ~@6 g2 ~@9",
  J: "[g1,g2]@2 [a1,a2] ~@3 [f1,f2]@2 [g1,g2]@2 d1@2 ~@4, ~@10 d2 ~@5", // G A F G
  K: "[g1,g2] a1 ~ f1 [g1,g2] [d1,d2] ~@2, ~@2 a2 ~@3 f2 ~@9", L: "g1 [a1,a2] [f1,f2] [g1,g2] [d1,d2] ~@3, g2 ~@15",
  M: "[g1,g2]@2 [a1,a2]@2 f1@2 [g1,g2]@2 [d1,d2]@3 ~@5, ~@4 f2 ~@11", // G A G D
  N: "[g1,g2]@2 [a1,a2]@2 ~@2 [f1,f2]@2 [g1,g2]@2 [d1,d2]@3 ~@3", O: "[c1,c2] ~@7",
  P: "[g1,g2]@2 a1@2 ~@2 [f1,f2]@2 [g1,g2]@2 [d1,d2]@3 ~@3, ~@2 a2 ~@13", // G F G D
  Q: "[g1,g2] a2 [f1,f2] [g1,g2] [d1,d2] ~@3, ~@2 a1 ~@13", R: "~@3 [f1,f2] [g1,g2] [d1,d2] ~@2",
  S: "~@3 [f1,f2] [g1,g2] d1 ~@2, ~@10 d2 ~@5", T: "~@2 [d1,d2]@2 ~@6 d1@2 ~ d1@2 ~", U: "d1@2 ~@4 d1!3 d1@2 d1@2 ~@3",
  V: "[g1,g2] a2 ~ [f1,f2] g1 [d1,d2] ~@2, ~@2 a1 ~@5 g2 ~@7", // G F D
  W: "[g1,g2]@2 [a1,a2] ~@3 [f1,f2]@2 [g1,g2]@2 [d1,d2]@3 ~@3", // G A F G D
  X: "[g1,g2]@2 a1@2 [f1,f2]@2 [g1,g2]@2 [d1,d2]@3 ~@5, ~@2 a2 ~@13", // G F G D
  Y: "[g1,g2]@2 [a1,a2] ~ [f1,f2]@2 [g1,g2]@2 [d1,d2]@2 ~@6", // 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 M>".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", M: "~@5 d4 ~@2, ~@10 d5 ~@5",
})).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 F@2 C@2 G@2 H@2 ~@24 I J K L ~@24 I J K M N J O P Q ~@15 R@2 S ~@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: "[[a4,c5,d5,f5]@31 ~]/2", G: "[[f4,bb4,d5]@15 ~]/2",
  H: "[[g4,bb4,db5,e5]@31 ~]/2", I: "[a3,b3,d4,f4]@7 ~, e4 ~@15",
  J: "[a3,b3,d4,f4] ~@2 [a3,b3,d4,f4] ~@4 [a3,b3,d4,f4] ~@2 [a3,b3,d4,f4] ~@4", K: "~@4 [a3,c4,d4,f4]@10 ~ [g3,a3]",
  L: "[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
  M: "[b3,c4,f4,a4] ~ [c4,f4,a4] ~ [b3,e4,g4] ~ [b3,e4,g4] ~ [a3,d4,f4] ~ [a3,d4,f4] ~ [b3,g4]@2 ~@2, ~@12 e4 ~@3", // F Em Dm Em
  N: "~@4 [a3,b3,d4,f4]@11 ~", O: "~ [a3,c4,d4,f4]@2 ~",
  P: "[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", Q: "[b3,c4,d4] ~@15",
  R: "[[a3,b3,d4,f4]@23 ~ [a3,b3,d4,f4] ~@2 [a3,b3,d4,f4] ~@4]/2", S: "~@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 K L H M N O ~@7 P@2 Q R P S T U V@2 W ~ 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: "[b4,c5,f5,a5] ~ [c5,f5,a5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~ [a4,d5,f5] ~ [a4,d5,f5] ~ [b4,g5]@2 ~@2, ~@12 e5 ~@3", // F Em Dm Em
  L: "~@4 [a4,b4,d5,f5]@11 ~", M: "~ [a4,c5,d5,f5]@2 ~",
  N: "[d5,d6] ~@3 d5@2 ~@2 [d5,d6] ~@3 [d5,a5,c6,d6,f6]@3 [e5,f5,g5,a5], ~@4 d6 ~@7 e6 ~@3", O: "[b4,c5,d5] ~@15",
  P: "d6!2 d5 d6!2 d5 d6!2 d5 d6!2 d5 d6!2 d5 d6", Q: "d6 d5 d6!2 d5 d6!2 d5 d6!2 d5 d6!2 d5 d6!2",
  R: "d5 d6!2 d5 d6!2 d5 d6!2 d5 d6!2 d5 d6!2 d5", S: "d6 d5 d6!2 d5 d6!2 d5 d6!2 d5 d6 d5 d6 d5 ~",
  T: "~@2 [d4,d5]@2 ~@6 d5@2 ~ [d4,d5]@2 ~, ~@10 d4 ~@5", U: "[d4,d5]@2 ~@4 [d4,d5]!2 ~ d4 ~ [d4,d5]@2 ~@3, ~@4 d5 ~@3",
  V: "[[a4,b4,d5,f5]@23 ~ [a4,b4,d5,f5] ~@2 [a4,b4,d5,f5] ~@4]/2", W: "~@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
)