Strudelify

Theme From the Bottom

Phish

KeyD majorTempo96 bpm
0:00/0:00
// Theme From the Bottom — Phish
// 96 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 32, 4/4 at bar 32, 2/4 at bar 59, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(96/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.

// chords · piano
const piano = note(`<
  A B C B C B C B C B C B D E C B C B C B C B D E C B ~@5 F G H G H G H G I J K G H G H G H G I J K G L ~@40 M N O P Q R
  S T U V W X@2 Y Z Y Z Y AA@2 AB AC AD AE AF AG AH@2 AI AG AH@2 AI ~@2
>`.pickRestart({
  A: "~@2 d5 f#5", B: "g5@2 c#5 g#5", C: "[c5,a5]@2 d5 f#5", D: "[d5,b5]@2 e5 g#5", E: "a5@2 d#5 a#5", F: "~ [c5,a5]",
  G: "d5 f#5 g5@2", H: "c#5 g#5 [c5,a5]@2", I: "c#5 g#5 [d5,b5]@2", J: "e5 g#5 a5@2", K: "d#5 a#5 [c5,a5]@2",
  L: "c#5 g#5 ~@2", M: "[d4,g4,c5,e5]@7 c5", N: "[d4,a4,d5,f#5]@7 d5", O: "[d4,c5,f5,a5]@7 [c5,f5,a5]",
  P: "[d4,d5,f5,a#5]@7 [d5,f5,a#5]", Q: "[d4,d#5,g#5,c6]@7 [d#5,g#5,c6]", R: "[d4,g5,c6,e6]@7 [g5,c6,e6]",
  S: "[d4,a#5,c#6,f#6]@7 [a#5,c#6,f#6]", T: "[d4,b5,d#6,f#6]@7 [b5,d#6,f#6]", U: "[d4,a5,c#6,e6]@7 [a5,c#6,e6]",
  V: "[d4,c#6,f6,g#6]@7 [c#6,f6,g#6]", W: "[d4,b5,d6,g6] [b5,d6,g6] [d4,b5,d6,g6]@2 [d4,b5,d6,g6]@2 [d4,b5,d6,g6]@2",
  X: "[d4,d5,g5,b5]!4", Y: "[f#4,a4]@3 [f#4,a4]!2 [f#4,a4]@3 [f#4,a4]@3 [f#4,a4] [f#4,a4]@2 ~@2",
  Z: "[g4,c5]@3 [g4,c5]!2 [g4,c5]@3 [g4,b4]@3 [g4,b4] [g4,b4]@2 ~@2", // C5 G
  AA: "[[g4,c5]@2 ~ [g4,c5]!2 [g4,c5]@3 [g4,b4]@2 ~ [g4,b4] [g4,b4]@2 a4@2 [f#4,a4]@2 a4 [f#4,a4]!2 a4 a4@2 [f#4,a4]@3 [f#4,a4] [f#4,a4,d5]@2 a4@2, ~ [d4,a4]@4 [d4,a4]@2 d4@2 d4 [d4,d5] [d4,d5]@3 ~@2, ~@21 f#4@3 ~@8]/2", // C5 G F#m D D5 D
  AB: "[g4,a4,c5,d5]@2 ~ [g4,c5]!2 ~ a4@2 [g4,a4,b4,d5]@2 ~ [g4,b4] [g4,a4,b4]@2 d4@2, ~ a4!2 ~@2 a4 ~@2, ~@5 [g4,c5]@3 ~@8", // Gsus4 C5 G C5
  AC: "[d4,f#4,a4]@2 a4 [f#4,a4]!2 [f#4,a4]@3 [f#4,a4]@2 a4 [f#4,a4] [d4,f#4,a4,d5,e5]@2 [d4,a4,d5,e5]@2, ~@2 d4@3 [d4,d5,e5] ~@2", // D F#m D Dsus2
  AD: "[d4,g4,a4,c5]@2 ~ [g4,c5]!2 ~ [d4,a4]@2 [d4,g4,a4,b4]@2 ~ [g4,b4] [d4,g4,a4,b4]@2 [d4,a4]@2, ~ [a4,d5] [d4,a4] ~@5, ~@5 [g4,c5]@3 ~@2 [a4,d5,e5]@2 ~@4", // Dsus4 C5 D5 G D5 C5 Asus4
  AE: "[d4,f#4,a4]@2 ~ [f#4,a4]!2 a4 [d4,a4]@2 [d4,f#4,a4]@2 a4 [f#4,a4] [d4,f#4,a4]@2 [d4,a4]@2, ~ d5 d4 ~@5, ~@5 f#4@3 ~@2 [d5,e5]@2 ~@4", // D F#m D5 D F#m D D5 Dsus2
  AF: "[d4,g4,a4,c5]@2 ~ [g4,c5]!2 ~ [d4,a4]@2 [d4,g4,a4,b4,d5]@2 ~ [g4,b4] [g4,a4,b4,d5,e5]@2 a4@2, ~ [d4,a4]!2 ~@2 [d4,a4] ~@2, ~@5 [g4,c5]@3 ~@8", // Dsus4 C5 D5 G Em7 D5 C5
  AG: "[a3,d4,a4,d5]!2 [a3,d4,a4,d5]@2 [d4,a4,d5] [d4,a4,d5,e5] [d4,a4]!2", AH: "[a3,d4,a4,d5]!5 [a3,d4,a4,d5,e5]!3",
  AI: "[a3,d4,a4,d5]!8", // D5
})).s("gm_piano").gain(0.41)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@26 A B C D E F@2 ~@9 G H I J ~@2 K L ~@2 M N O@3 P Q R S T U V W X Y@3 Z AA AB AC@2 AD AE AF AG@2 ~@3 AH@2 AI AJ@4
  AK AL AM AN AM@3 AO AP AQ AR@3 AS AT AU AV@2 ~@5 AW AX AW AY AZ AY AZ BA BB BC BD BA BB BC BD BE@2
>`.pickRestart({
  A: "[d4,a4]@4 [d4,a4]@2 [d4,a4]@2 ~ [d4,a4]!5 [d4,a4,d5,f#5]@2", B: "d4@2 e5@2 c5@2 e5 b4 g4 d4 [g4,d5]@4 f4 f#4",
  C: "~ e6, a4", D: "[c4,g4,c5]@3 g4 c5@2 c5 [d4,g4] [a3,e4]@8", E: "e5@2 e5 f5 [f#5,f#6]@11 e5",
  F: "[g5@7 f#5 a5@16 ~@8, f#5 ~@7 g5 ~@23]/2", G: "~ d6 ~@2 d6@2 ~@6 d6 ~@3", H: "d6 ~@3 d6 ~@3 a4@2 ~@2 a5@2 ~@2",
  I: "a4@2 ~@2 a4@2 ~@2 a4@2 ~@5 g5", J: "g5 ~ [f#4,f#5] ~ [d4,d5] ~@3", K: "~@4 g5 g#5!3 g5 f5 g5 f5 d5 a4 c5 g4",
  L: "a4 ~@2 d5@5 ~@8", M: "~@10 a4!2 [a4,d5,f#5]@4", N: "~@8 g#4 a4 f#5@2 d4@4",
  O: "[d4 e4 a4@2 d4 [a4,f#5] [g4,e5]@2 [c5,e5]@4 g4 d4 g4 b4@2 d5 g4@2 d5@2 g4@2 a4@2 ~@12 d#4 e4 c5@8, ~@7 d5@3 ~@2]/3", // D C
  P: "c#5@4 ~ [c5,e5,g5]@3", Q: "[d5,f#5,a5]@8 c5@3 g5 e5@2 c5@2", R: "a5@4 a5@7 a5 g5@2 g5@2",
  S: "~@4 f#5 ~@2 f#5@9, ~@3 g5 ~@4", T: "b5@4 b5@3 a5@5 d5 ~@2 d5, ~@7 e5", U: "c5@4 c5@3 [b4,d6]@5 b4!2 b4@2",
  V: "[a4,e6] b4", W: "c5 b4", X: "a4@8 [f#5,a#6]@4 ~@2 [d5,a5] a5", Y: "[a5@20 d5!2 a5@15 ~@2 d5@3 d5@2 d5 a5 a5@2]/3",
  Z: "d5@4 d5@4 d5 a5 d5@2 d5 a5@3", AA: "a5@2 d5@2 a5@3 f#5 f#5@2 ~ e5 f5 e5@3", AB: "c5@6 b4 a4 b4@8",
  AC: "[~@6 e6@3 ~@4 [g4,b5]@3, a4@13 ~@3, ~@5 c#6@2 ~]/2", AD: "g4 a4 d5@12 a4 d5", AE: "e5@2 e5@4 e5 f#5@5 g5@3 f#5",
  AF: "f#5@7 a5", AG: "a5", AH: "[a5 g5 a5 b5@2 a5 b5 c6@2 b5 g5@2 b5 g5@2 b5@3 b5@3 a5 b5 c6@2 b5 g5@2 b5@2 a5@2]/2",
  AI: "~ g5 f#5 b5@2 a5 b5 c6@4 b5 c6 d6 c6@2",
  AJ: "[~ b5 g5 g5@3 g5 a4@3 g5 a4 f5 f#5 a5@10 d6 c#5@2 d5@3 a5@4 d4@2 g5@6 g5!2 e5@2 d5 ~@9 a5@3 b5@3 f5 e5, ~@47 a5@9 ~@8, ~@52 a6@7 ~@5]/4",
  AK: "f#5 [d5,e5] c5@2 d5 [b4,c5]@2 a4@3 g4 a4 f4 f#4@2 d4", AL: "d5", AM: "[d5,d6]", AN: "[d5,d6]!2",
  AO: "[d5,d6]@15 d#5", AP: "d5 ~@3", AQ: "d4 d4@2 d4!2 d4@2 d4!2 d4@2 d4!2 d4@2 d4",
  AR: "[d4,a4,d5]!2 [d4,a4,d5]@2 [d4,a4,d5] [d4,a4,d5]@2 [d4,a4,d5]@2 [d4,a4,d5]@2 [d4,a4,d5]!5", // D5
  AS: "d4!3 d5 d4!5 d5 d4 d5 d4!2 d5 d4", AT: "d4@2 d4!3 d4@2 ~@3 f#6@6, ~@7 c#5@9", AU: "[c#5,f#6]",
  AV: "[d4,a#4,d5]!4", AW: "[d4,g4,c5,e5] [d4,g4,b4,g5]", AX: "[d4,a4,d5,f#5]", AY: "[a3,d4,a4,d5,f#5]",
  AZ: "[c4,e4,g4,c5,e5] [d4,g4,b4,g5]", BA: "[d4,a4] a4 [d4,a4]@3 [d4,a4,d5,e5]!3",
  BB: "[d4,a4] [a4,d5] [d4,a4]!3 [a4,d5,e5] [d4,a4]!2", BC: "[d4,a4] d5 [d4,a4]!3 [a4,d5,e5] [d4,a4]!2",
  BD: "[d4,a4]!4 [d4,a4,d5] [d4,a4] [a4,d5,e5] a4", BE: "[d4,a4,d5,e5]/2",
})).s("gm_distortion_guitar").gain(0.41)

// chords · trumpet
const trumpet = note(`<
  ~@8 A B C D E F G H ~@2 A B C D E F G I J K L ~ M N@2 ~@2 O P Q@2 R S T@2 ~@2 U@2 V@2 W X Y Z AA@2 AB@2 AC AD AE AF AG
  ~@45 AH AI AJ AI AJ AI AJ AI AJ AI AJ AI ~@10
>`.pickRestart({
  A: "[f#4,a4]@4 [f#4,a4]@3 [f#4,a4]!2 [e4,g4]@3 ~@2 [d4,f#4]@2", // F#m Em D
  B: "[d4,g4]@3 [b3,g4]@2 [b3,g4] [b3,g4]@2 ~@7 [a3,d4]", // G5 Em D5
  C: "[f#4,a4] ~ [f#4,a4] [f#4,a4]@3 [f#4,a4]@2 [e4,g4]@4 ~@2 [d4,f#4]@2", // F#m Em D
  D: "[d4,g4] ~ [b3,g4] [b3,g4]@2 [b3,g4]@3 ~@8", // G5 Em
  E: "[g#4,b4]@2 [g#4,b4]@2 [g#4,b4]@2 [g#4,b4]!3 ~ [f#4,a4]@2 [f#4,a4]@2 [f#4,g#4]@2", // G#m F#m F#sus2
  F: "[e4,a4] ~ [c#4,a4] [c#4,a4]@2 [c#4,a4]@3 ~@7 d4", // A5 F#m
  G: "[f#4,a4] ~ [f#4,a4] [f#4,a4]@2 ~ [f#4,a4]@2 ~@4 [e4,g4] [e4,g4]@3", // F#m Em
  H: "[d4,g4]@2 [b3,g4] [b3,g4]@2 [b3,g4]@3 ~@8", I: "[d4,g4]@2 [b3,g4] [b3,g4]@2 [b3,g4]@3 ~@6 b3 d4",
  J: "[a4,f#5]@3 [a4,e5]@3 [a4,d5]@10", K: "[c5,e5]@8 [b4,d5]@4 b4 b4@3, g4@3 ~", L: "d5 a4@5 a4@7 ~@3",
  M: "[a4,c5]@3 [a4,c5]@3 [a4,c5]@2 [a4,b4] ~ [a4,b4] [a4,b4]@3 [a4,b4]@2", // Am Asus2
  N: "[[a4,c5]@3 [a4,c5]!2 ~ [a4,c5] ~ [f#4,a4,d5]@12 ~@12]/2", O: "~@8 [f#4,a4]@2 [f#4,a4] [f#4,a4]@3 [f#4,a4]@2",
  P: "[e4,g4]@4 ~@3 [d4,f#4] [d4,g4] ~ [b3,g4] [b3,g4]@2 [b3,g4]@3", // Em D G5 Em
  Q: "[~@8 [f#4,a4]@2 [f#4,a4]@4 [f#4,a4] [f#4,a4]@2 [e4,g4] [e4,g4]@2 ~@4 [d4,g4]@2 [b3,g4] [b3,g4]@2 [b3,g4]@3]/2", // F#m Em G5 Em
  R: "~@8 [g#4,b4]@4 [g#4,b4]@3 [g#4,b4]", // G#m
  S: "[g#4,b4] [f#4,a4]@3 ~@3 [e4,g#4] [e4,a4] ~ [c#4,a4] [c#4,a4]@2 [c#4,a4]@3", // G#m F#m E A5 F#m
  T: "[~@6 b3@2 [f#4,a4]@2 [f#4,a4]@4 [f#4,a4] [f#4,a4]@2 [e4,g4]@3 ~@3 [d4,f#4] [d4,g4]@2 [b3,g4] [b3,g4]@2 [b3,g4]@3]/2", // F#m Em D G5 Em
  U: "[~@7 [a3,f#4] [f#4,a4]@2 [f#4,a4]@4 [f#4,a4] [f#4,a4]@3 ~@2 [e4,f#4]@3 [d4,f#4] [d4,g4] ~ [b3,g4] [b3,g4]@2 ~ [b3,g4]@2]/2", // D F#m Esus2 D G5 Em
  V: "[~@6 [a3,f#4]@2 [f#4,a4]@2 [f#4,a4]@4 [f#4,a4] [f#4,a4]@2 [e4,g4]@3 ~@3 [d4,f#4] [d4,g4]@3 [b3,g4]@2 [b3,g4] [b3,g4]@2]/2", // D F#m Em D G5 Em
  W: "~@7 [a3,e4] [g#4,b4]@2 [g#4,b4] [g#4,b4]@3 [g#4,b4]@2", // A5 G#m
  X: "~@4 [f#4,g#4] [f#4,g#4]@3 [e4,a4]@2 [c#4,a4] [c#4,a4]@3 [c#4,a4]@2", // F#sus2 A5 F#m
  Y: "~@7 a3 [f#4,a4]@2 [f#4,a4]@2 [f#4,a4]@2 [f#4,a4]@2", // F#m
  Z: "[e4,g4]@2 ~@5 [d4,f#4] [d4,g4]@2 [b3,g4]@2 [b3,g4]@2 [b3,g4]@2", // Em D G5 Em
  AA: "[~@4 [a4,d5] [a4,d5]@3 [a4,f#5]@3 [a4,f#5]@3 [a4,d5]@10 [g4,c5,e5]@8]/2", // D5 D D5 C
  AB: "[[g4,b4,d5]@4 b4 b4@3 d5 a4@5 a4@8 ~@10]/2", AC: "~@8 [a4,c5]@3 [a4,c5]@3 [a4,c5]@2",
  AD: "[a4,b4] ~ [a4,b4] [a4,b4]@3 [a4,b4]@2 [a4,c5]@3 [a4,c5]@3 [a4,c5]@2", AE: "[a4,d5,f#5]",
  AF: "[g4,c5,e5]@8 [g4,b4,d5]@4 d5 d5@3", AG: "d5 b4 a4@4 a4@10",
  AH: "~@4 [d4,f#4,a4]@3 [d4,f#4,a4]!2 [d4,f#4,a4]@3 [d4,f#4,a4]@3 [d4,f#4,a4]", // D
  AI: "[d4,g4,c5]@2 ~@2 [d4,g4,c5]@3 [d4,g4,c5] [d4,g4,b4] [d4,g4,b4]@3 [d4,g4,b4]@3 [d4,f#4,a4]", // Csus2 G D
  AJ: "[d4,f#4,a4]@2 ~@2 [d4,f#4,a4]@3 [d4,f#4,a4]!2 [d4,f#4,a4]@3 [d4,f#4,a4]@3 [d4,f#4,a4]", // D
})).s("gm_trumpet").gain(0.41)

stack(piano, distortion_guitar, trumpet)

More by Phish