Strudelify

Jupiter

Jewel

KeyD majorTempo120 bpm
0:00/0:00
// Jupiter — Jewel
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "Tempo Track-4" woodblock (copy of ch 6 "Tempo Track-5" acoustic bass)
// note: Full arrangement: all 131 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Tempo Track-3.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// chords · acoustic guitar steel · "Tempo Track-1"
const acoustic_guitar_steel = note(`<
  A B@2 C D E F G H@2 I J K L@2 M N@2 O P@2 Q R@2 S T U V W@2 X@2 Y@2 Z AA AB AC AD AE AF AG AH@2 AI AJ AK@2 AL AM@2 AN
  AO AP AQ AR AS AT AU@2 AV AW AX AY AZ@5 BA BB BC BD BE BF BG BH BI@2 BJ BK BL BM BN BL BM BN BO BP BQ@2 BP BR@2 AU@2
  AV AW AX AY AZ@5 BA BB BC BD BE BF BG BH BI@2 BJ BK BL BM BN BL BM BN BS BT BN BU BV@2 BW@2
>`.pickRestart({
  A: "[a3,d4,e4]@5 ~ [a3,d4,e4]@5 ~ [a3,b3,e4]@4", // Asus4 Asus2
  B: "[~@2 [a3,b3,e4]@5 ~ [g3,b3,e4]@5 ~ [g3,b3,e4]@5 ~ [g3,a3,c#4,e4]@5 ~ [g3,a3,c#4,e4]@5 ~]/2", // Asus2 Em A7
  C: "[g3,b3,e4]@5 ~ [g3,b3,e4]@5 ~ [e4,a4,d5]@3 ~", D: "d5@5 ~ d5@2 [e4,a4,b4]@3 ~ b4@3 ~",
  E: "b4@2 a4@2 [d4,e4,b4]@3 ~ a4@7 ~", F: "[c#4,e4,a4]@5 ~ [c#4,e4]@5 ~ [e4,a4,d5]@3 ~",
  G: "d5@2 d5@4 d5@2 [e4,a4,b4]@3 ~ b4@3 ~", // Esus4
  H: "[b4@3 ~ [d4,e4,g4,b4]@3 ~ a4@3 ~ g4@2 [c#4,e4,a4]@7 ~ [g3,c#4,e4]@5 ~ [g3,c#4,e4]@4]/2", // Em7 A C#dim
  I: "~@2 a4@2 a4@2 a4@2 [e4,a4,d5]@3 ~ d5@3 ~", J: "d5@2 d5@2 [e4,a4,b4]@3 ~ b4@2 a4@2 a4@3 ~",
  K: "[d4,e4,b4]@2 b4@2 b4@3 ~ b4@3 ~ [c#4,e4,a4]@4", // E7 A
  L: "[~@2 [a3,c#4]@4 a4@2 [e4,a4,d5]@3 ~ d5@2 d5@5 ~ [e4,a4,b4]@3 ~ b4@2 b4@2 b4@2 b4@2]/2", // A Dsus2 Esus4
  M: "[d4,e4,b4]@3 ~ a4@5 ~ g4@2 [c#4,e4,a4]@4", // E7 A
  N: "[~@2 [g3,c#4,e4]@5 ~ [g3,c#4,e4]@5 ~ [c#4,e4,a4]@5 ~ [e4,a4,c#5]@2 d5@2 c#5@7 ~]/2", // C#dim A
  O: "[e4,a4,c#5]@2 d5@2 c#5@7 ~ [d4,e4,g4]@3 ~", // A Em7
  P: "[a4@2 g4@5 ~ [a3,b3,e4]@5 ~ [a3,b3,e4]@5 ~ [e4,a4,c#5]@2 d5@2 c#5@7 ~]/2", // Asus2 A
  Q: "[e4,a4,c#5]@2 d5@2 c#5@5 ~ g4@2 [d4,e4,g4]@3 ~", // A Em7
  R: "[g4@2 g4@4 a4@2 [e4,a4,b4]@5 ~ [e4,a4,b4]@5 ~ [e4,a4,c#5]@2 d5@2 c#5@7 ~]/2", // Esus4 A
  S: "[e4,a4,c#5]@2 d5@2 c#5@7 ~ [b3,d4,e4,g4]@3 ~", T: "g4@3 ~ a4@2 [d4,e4,b4]@5 ~ a4@3 ~",
  U: "a4@3 ~ [c#4,e4,a4]@2 a4@5 ~ b4@3 ~", V: "[e4,g4,c#5]@5 ~ [c#4,e4]@5 ~ [g3,c#4,f#4]@4",
  W: "[~@2 [g3,c#4]@5 ~ [b3,d4,e4,g4]@5 ~ [b3,d4,e4]@5 ~ [a3,d4,f#4]@5 ~ e4@2 d4@3 ~]/2", // Gdim Em7 E7 D
  X: "[[a3,d4,e4]@7 ~ e4@2 f#4@2 [a3,b3,e4]@2 d4@4 [a3,b3,e4]@5 ~ [a3,b3,e4]@7 ~]/2", // Asus4 Asus2
  Y: "[e4@2 f#4@2 [a3,e4]@2 d4@2 d4@3 ~ d4@2 [a3,d4,f#4]@5 ~ f#4@3 ~ f#4@3 ~ [a3,b3,e4]@3 ~]/2", // A5 D Asus2
  Z: "e4@5 ~ d4@2 e4@3 ~ f#4@3 ~", AA: "f#4@3 ~ [a3,d4,f#4]@2 e4@2 d4@3 ~ b3@2 a3@2",
  AB: "[a3,d4,e4]@7 ~ [a3,d4,e4]@3 ~ [a3,d4]@2 b3@2", AC: "b3@2 d4@4 [a3,b3,e4]@5 ~ f#4@3 ~",
  AD: "~@2 f#4@2 [g3,b3,f#4]@3 ~ e4@2 e4@5 ~", AE: "[a3,b3,f#4]@2 e4@2 c#4@5 ~ c#4@2 [a3,b3,c#4]@3 ~",
  AF: "d4@5 ~ a3@2 [a3,b3,d4,f#4]@3 ~ f#4@4", AG: "~@2 e4@2 [a3,b3,d4,f#4]@3 ~ e4@7 ~",
  AH: "[[d5,a5,e6]@11 ~ [a3,b3,e4]@11 ~ [d5,a5,e6]@7 ~]/2", AI: "~@2 a4@2 [e4,a4,d5]@3 ~ d5@5 ~ d5@2",
  AJ: "[e4,a4,b4]@3 ~ b4@3 ~ b4@2 a4@2 [d4,e4,b4]@3 ~", // Esus4 E7
  AK: "[a4@7 ~ [c#4,e4,a4]@5 ~ [c#4,e4]@5 ~ [e4,a4,d5]@3 ~ d5@2 d5@4 d5@2]/2", // A C#m Dsus2
  AL: "[e4,a4,b4]@3 ~ b4@3 ~ b4@3 ~ [d4,e4,g4,b4]@3 ~", // Esus4 Em7
  AM: "[a4@3 ~ g4@2 [c#4,e4,a4]@7 ~ [g3,c#4,e4]@5 ~ [g3,c#4,e4]@5 ~ a4@2 a4@2 a4@2]/2", // A C#dim
  AN: "[e4,a4,d5]@3 ~ d5@3 ~ d5@2 d5@2 [e4,a4,b4]@3 ~", AO: "b4@2 a4@2 a4@3 ~ [d4,e4,b4]@2 b4@2 b4@3 ~",
  AP: "b4@3 ~ [c#4,e4,a4]@5 ~ [a3,c#4]@4 a4@2", AQ: "[e4,a4,d5]@3 ~ d5@2 d5@5 ~ [e4,a4,b4]@3 ~",
  AR: "b4@2 b4@2 b4@2 b4@2 [d4,e4,b4]@3 ~ a4@4", AS: "~@2 g4@2 [c#4,e4,a4]@5 ~ [g3,c#4,e4]@5 ~",
  AT: "[g3,c#4,e4]@5 ~ [c#4,e4,a4]@5 ~ [e4,a4,c#5]@2 d5@2", // C#dim A
  AU: "[c#5@7 ~ [e4,a4,c#5]@2 d5@2 c#5@7 ~ [d4,e4,g4]@3 ~ a4@2 g4@5 ~]/2", // A Em7
  AV: "[a3,b3,e4]@5 ~ [a3,b3,e4]@5 ~ [e4,a4,c#5]@2 d5@2", AW: "c#5@7 ~ [e4,a4,c#5]@2 d5@2 c#5@4",
  AX: "~@2 g4@2 [d4,e4,g4]@3 ~ g4@2 g4@4 a4@2", AY: "[e4,a4,b4]@5 ~ [e4,a4,b4]@5 ~ [e4,a4,c#5]@2 d5@2",
  AZ: "[c#5@7 ~ [e4,a4,c#5]@2 d5@2 c#5@7 ~ [b3,d4,e4,g4]@3 ~ g4@3 ~ a4@2 [d4,e4,b4]@5 ~ a4@3 ~ a4@3 ~ [c#4,e4,a4]@2 a4@5 ~ b4@3 ~ [e4,g4,c#5]@5 ~ [c#4,e4]@5 ~ [g3,c#4,f#4]@5 ~ [g3,c#4]@5 ~]/5", // A Em7 E7 A C#dim C#m F# Gdim
  BA: "[b3,d4,e4,g4]@5 ~ [b3,d4,e4]@5 ~ [a3,d4,f#4]@4", BB: "~@2 e4@2 d4@3 ~ [a3,d4,e4]@7 ~",
  BC: "e4@2 f#4@2 [a3,b3,e4]@2 d4@4 [a3,b3,e4]@5 ~", BD: "[a3,b3,e4]@7 ~ e4@2 f#4@2 [a3,e4]@2 d4@2",
  BE: "d4@3 ~ d4@2 [a3,d4,f#4]@5 ~ f#4@3 ~", BF: "f#4@3 ~ [a3,b3,e4]@3 ~ e4@5 ~ d4@2",
  BG: "e4@3 ~ f#4@3 ~ f#4@3 ~ [a3,d4,f#4]@2 e4@2", BH: "d4@3 ~ b3@2 a3@2 [a3,d4,e4]@7 ~",
  BI: "[[a3,d4,e4]@3 ~ [a3,d4]@2 b3@2 b3@2 d4@4 [a3,b3,e4]@5 ~ f#4@3 ~@3 f#4@2 [g3,b3,f#4]@3 ~]/2", // Asus4 D5 Asus2 Gmaj7
  BJ: "e4@2 e4@5 ~ [a3,b3,f#4]@2 e4@2 c#4@4", BK: "~@2 c#4@2 [a3,b3,c#4]@3 ~ d4@5 ~ a3@2",
  BL: "[a3,b3,d4,f#4]@3 ~ f#4@5 ~ e4@2 [a3,b3,d4,f#4]@3 ~", BM: "e4@7 ~ [g3,b3,e4]@5 ~ d4@2",
  BN: "c#4@3 ~ [a3,b3,d4]@5 ~ [a3,b3,d4]@5 ~", BO: "[a3,b3,d4]@11 ~@3 g#3@2", BP: "c#4 e4 a3 g#3@2 g#3 c#4 e4",
  BQ: "[a3 g#3 ~ f#3 a3 e4 a3 f#3@2 f#3 a3 e4 a3 f#3 ~ g#3]/2",
  BR: "[a3 g#3 ~ f#3 a3 e4 a3 f#3@2 f#3 a3 e4 a3 f#3 [e4,a4,c#5] d5]/2", // A
  BS: "[a3,b3,d4,f#4]@3 ~ f#4@5 ~ e4@2 [a3,b3,f#4]@3 ~", BT: "e4@7 ~ [a3,b3,e4]@5 ~ d4@2",
  BU: "[g3,b3,c#4]@3 ~ c#4@7 ~ [a3,d4,e4]@4", // C#m7b5 Asus4
  BV: "[~@2 [a3,d4,e4]@5 ~ [a3,b3,e4]@5 ~ [a3,b3,e4]@5 ~ [a3,b3,d4]@5 ~ [a3,b3,d4]@5 ~]/2", // Asus4 Asus2 Bm7
  BW: "[[a3,b3,d4]@5 ~ [a3,b3,d4]@5 ~ [a3,d4,e4]@11 ~@9]/2", // Bm7 Asus4
})).s("gm_acoustic_guitar_steel").gain(0.8)

// bass · acoustic bass · "Tempo Track-2"
const bass = note(`<
  A@3 B@6 C@3 D@3 E@3 F@6 G@2 H I J@2 K@2 L M@3 N@3 O@6 P@3 Q@3 R@6 S@3 T@6 U@3 B@3 V@2 W B@3 X@2 Y Z@6 AA AB AC AD AB
  AC AE@3 T@6 U@3 B@3 V@2 W B@3 X@2 Y Z@12 AF@2
>`.pickRestart({
  A: "[d2@23 ~ a2@11 ~ a2@11 ~]/3", B: "[a2@11 ~ d2@11 ~ d2@11 ~ g2@11 ~]/3",
  C: "[a2@11 ~ a2@7 ~ a2@3 ~ d2@11 ~ d2@11 ~]/3", D: "[g2@11 ~ a2@11 ~ d2@11 ~ d2@11 ~]/3",
  E: "[g2@11 ~ a2@11 ~ a2@11 ~ d2@11 ~]/3", F: "[c#3@2 d3@2 c#3@7 ~ g2@11 ~ g2@11 ~ d2@11 ~]/3",
  G: "[c#3@2 d3@2 c#3@7 ~ g2@11 ~ g2@7 ~]/2", H: "g2@3 ~ a2@11 ~", I: "a2@11 ~ a2@3 ~",
  J: "[a2@3 ~ a2@3 ~ a2@11 ~ d2@11 ~]/2", K: "[d2@11 ~ g2@11 ~ g2@7 ~]/2", L: "g2@3 ~ d2@11 ~",
  M: "[d2@7 ~ d2@3 ~ a2@11 ~ a2@11 ~ d2@11 ~]/3", N: "[d2@11 ~ g2@11 ~ g2@11 ~ e2@11 ~]/3",
  O: "[e2@7 ~ f#2@3 ~ g2@11 ~ g2@11 ~ d2@23 ~ d2@23 ~ d2@11 ~]/6", P: "[d2@11 ~ g2@11 ~ a2@11 ~ d2@11 ~]/3",
  Q: "[d2@11 ~ g2@11 ~ a2@11 ~ a2@7 ~ a2@3 ~]/3", R: "[d2@11 ~ d2@11 ~ g2@11 ~ a2@11 ~]/3",
  S: "[a2@11 ~ d2@11 ~ c#3@2 d3@2 c#3@7 ~ g2@11 ~]/3", T: "[g2@11 ~ d2@11 ~ c#3@2 d3@2 c#3@7 ~ g2@11 ~]/3",
  U: "[g2@7 ~ g2@3 ~ a2@11 ~ a2@11 ~ a2@3 ~ a2@3 ~ a2@3 ~]/3", V: "[g2@7 ~ g2@3 ~ d2@11 ~ d2@7 ~]/2",
  W: "d2@3 ~ a2@11 ~", X: "[g2@11 ~ e2@11 ~ e2@7 ~]/2", Y: "f#2@3 ~ g2@11 ~", Z: "[g2@11 ~ d2@11 ~ e2@11 ~ g2@11 ~]/3",
  AA: "g2@11 ~ c#2@3 ~", AB: "c#2@3 ~ c#2@3 ~ c#2@3 ~ c#2@3 ~", AC: "c#2@3 ~ b1@3 ~ b1@3 ~ b1@3 ~",
  AD: "b1@3 ~ b1@3 ~ b1@3 ~ c#2@3 ~", AE: "[b1@3 ~ b1@3 ~ b1@3 ~ d2@11 ~ c#3@2 d3@2 c#3@7 ~ g2@11 ~]/3",
  AF: "[g2@11 ~ d2@11 ~@9]/2",
})).s("gm_acoustic_bass").gain(0.8)

// bass · acoustic bass · "Tempo Track-5"
const bass_2 = note(`<
  ~@10 A@2 B@3 C@3 D@6 E@2 F G H@2 I@2 J K@3 L@3 M@4 ~@8 N@6 O@3 P@6 Q@3 R@3 S@2 T R@3 U@2 V W@6 ~@6 X@3 P@6 Q@3 R@3 S@2
  T R@3 U@2 V W@12 Y@2
>`.pickRestart({
  A: "[~@4 a2@3 ~ d2@11 ~ d2@11 ~]/2", B: "[g2@11 ~ a2@11 ~ d2@11 ~ d2@11 ~]/3",
  C: "[g2@11 ~ a2@11 ~ a2@11 ~ d2@11 ~]/3", D: "[c#3@2 d3@2 c#3@7 ~ g2@11 ~ g2@11 ~ d2@11 ~]/3",
  E: "[c#3@2 d3@2 c#3@7 ~ g2@11 ~ g2@7 ~]/2", F: "g2@3 ~ a2@11 ~", G: "a2@11 ~ a2@3 ~",
  H: "[a2@3 ~ a2@3 ~ a2@11 ~ d2@11 ~]/2", I: "[d2@11 ~ g2@11 ~ g2@7 ~]/2", J: "g2@3 ~ d2@11 ~",
  K: "[d2@7 ~ d2@3 ~ a2@11 ~ a2@11 ~ d2@11 ~]/3", L: "[d2@11 ~ g2@11 ~ g2@11 ~ e2@11 ~]/3",
  M: "[e2@7 ~ f#2@3 ~ g2@11 ~ g2@11 ~ d2@23 ~@5]/4", N: "[d2@11 ~ d2@11 ~ g2@11 ~ a2@11 ~]/3",
  O: "[a2@11 ~ d2@11 ~ c#3@2 d3@2 c#3@7 ~ g2@11 ~]/3", P: "[g2@11 ~ d2@11 ~ c#3@2 d3@2 c#3@7 ~ g2@11 ~]/3",
  Q: "[g2@7 ~ g2@3 ~ a2@11 ~ a2@11 ~ a2@3 ~ a2@3 ~ a2@3 ~]/3", R: "[a2@11 ~ d2@11 ~ d2@11 ~ g2@11 ~]/3",
  S: "[g2@7 ~ g2@3 ~ d2@11 ~ d2@7 ~]/2", T: "d2@3 ~ a2@11 ~", U: "[g2@11 ~ e2@11 ~ e2@7 ~]/2", V: "f#2@3 ~ g2@11 ~",
  W: "[g2@11 ~ d2@11 ~ e2@11 ~ g2@11 ~]/3", X: "[b1@3 ~ b1@3 ~ b1@3 ~ d2@11 ~ c#3@2 d3@2 c#3@7 ~ g2@11 ~]/3",
  Y: "[g2@11 ~ d2@11 ~@9]/2",
})).s("gm_acoustic_bass").gain(0.51)

// bass · acoustic bass · "Tempo Track-6"
const bass_3 = note(`<
  ~@29 A B@2 C D@3 E@3 F@4 ~@27 G@2 H@2 I J@3 K@2 L M@6 ~@19 G@2 H@2 I J@3 K@2 L M@12 N@2
>`.pickRestart({
  A: "~@4 d2@11 ~", B: "[d2@11 ~ g2@11 ~ g2@7 ~]/2", C: "g2@3 ~ d2@11 ~",
  D: "[d2@7 ~ d2@3 ~ a2@11 ~ a2@11 ~ d2@11 ~]/3", E: "[d2@11 ~ g2@11 ~ g2@11 ~ e2@11 ~]/3",
  F: "[e2@7 ~ f#2@3 ~ g2@11 ~ g2@11 ~ d2@23 ~@5]/4", G: "[~@8 d2@11 ~ g2@11 ~]/2",
  H: "[g2@7 ~ g2@3 ~ d2@11 ~ d2@7 ~]/2", I: "d2@3 ~ a2@11 ~", J: "[a2@11 ~ d2@11 ~ d2@11 ~ g2@11 ~]/3",
  K: "[g2@11 ~ e2@11 ~ e2@7 ~]/2", L: "f#2@3 ~ g2@11 ~", M: "[g2@11 ~ d2@11 ~ e2@11 ~ g2@11 ~]/3",
  N: "[g2@11 ~ d2@11 ~@9]/2",
})).s("gm_acoustic_bass").gain(0.51)

stack(acoustic_guitar_steel, bass, bass_2, bass_3)

More by Jewel