Strudelify

Sell Out

Reel Big Fish

KeyA majorTempo108 bpm
0:00/0:00
// Sell Out — Reel Big Fish
// 108 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 99 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): guitar, guitar.
setcpm(108/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 · electric bass pick · "bass"
const bass = note(`<
  A@4 B C D E B C D E F G F G B E F G B H I J@3 K@2 L@2 M N@8 O P Q P Q P R@2 S T U@2 V W X@3 Y A@3 Z AA AB AA AB AC AD
  AE AF AG U@2 V W X@3 Y B C D E B C D AH B AI B AI B AI B AI AJ ~@4
>`.pickRestart({
  A: "a1@2 a1@2 g#1!2 a1@2 e2 g#2 a2 d2@2 f#2 a2@2", B: "a1@2 a1@2 a1!3 b1@2 b1 b1@2 b1!2 b1@2",
  C: "d2@2 d2@2 d2!3 e2@2 e2 g#2!2 a2!2 b2!2", D: "a2@2 a2@2 a2!3 b2@2 b2 a2!2 g#2!2 f#2!2",
  E: "d2@2 d2@2 d2!3 e2@2 e2 d2!2 c#2!2 b1!2", F: "a1!5 c#2 a1!2 b1!5 d2 b1!2", G: "d2!5 f#2 d2!2 e2!2 d2!2 c#2!2 b1!2",
  H: "c#2@2 c#2 c#2@2 c#2!3 d2@2 d2 d2@2 d2!3", I: "e2@2 b2!2 e2 b2!2 e2 b2!2 e2 b2!2 d2!3", J: "a1 ~@12 d2!3",
  K: "[d2@2 d2!6 e2 e2@2 c#2@2 d2@2 e2@5 ~@4 a1@2 a1@2 ~@2 a1 c#2]/2", L: "d2@2 d2@2 e2@2 e2@2 a1@2 a1@2 ~@2 a1 c#2",
  M: "d2@2 d2@2 e2@2 e2@2 a1 ~@7",
  N: "[d2@8 a1@2 a1@2 a1!3 b1@2 b1 b1@2 b1!2 b1@2 d2@2 d2@2 d2!3 e2@2 e2 g#2!2 a2!2 b2!2 a2@2 a2@2 a2!3 b2@2 b2 a2!2 g#2!2 f#2!2 d2@2 d2@2 d2!3 e2@2 e2 d2!2 c#2!2 b1!2 a1@2 a1@2 a1!3 b1@2 b1 b1@2 b1!2 b1@2 d2@2 d2@2 d2!3 e2@2 e2 g#2!2 a2!2 b2!2 a2@2 a2@2 a2!3 b2@2 b2 a2!2 g#2!2 f#2!2 d2@2 d2@2 d2!3 e2]/8",
  O: "~ e2 d2!2 c#2!2 b1!2 a1!5 c#2 a1!2", P: "b1!5 d2 b1!2 d2!5 f#2 d2!2", Q: "e2!2 d2!2 c#2!2 b1!2 a1!5 c#2 a1!2",
  R: "[e2!2 d2!2 c#2!2 b1!2 a1@2 a1@2 a1!3 b1@2 b1 b1@2 b1!2 b1@2 c#2@2 c#2 c#2@2 c#2!3]/2",
  S: "d2@2 d2 d2@2 d2!3 e2@2 b2!2 e2 b2!2 e2", T: "b2!2 e2 b2!2 d2!3 a1 ~@7", U: "~@5 d2!3 a1 ~@7",
  V: "~@5 d2!3 d2@2 d2!6", W: "e2 e2@2 c#2@2 d2@2 e2@5 ~@4", X: "a1@2 a1@2 ~@2 a1 c#2 d2@2 d2@2 e2@2 e2@2",
  Y: "a1 ~@7 d2@8", Z: "a1@2 a1@2 g#1!2 a1 ~@9", AA: "c#2@2 c#2!3 b1 c#2 b1 d2@2 d2!6",
  AB: "a1@2 a1!2 c#2 a1!7 c#2 a1!3", AC: "b1@2 b1!3 a1 b1 c#2 d2@2 d2!6", AD: "a1@2 a2!6 a1@2 a2!6",
  AE: "b1@2 b1!6 c#2@2 c#2!6", AF: "d2@2 d2!6 e2 b2!2 e2 b2!2 e2 b2", AG: "b2 e2 b2!2 e2 d2!3 a1 ~@7",
  AH: "d2 ~@3 e2 ~@3", AI: "d2@2 d2@2 d2!3 e2@2 e2 e2@2 e2!2 e2@2", AJ: "a1 ~@7",
})).s("gm_electric_bass_pick").gain(0.44)

// other · trumpet
const trumpet = note(`<
  A B C D E F G H@2 F I J ~@4 K J L@2 ~ M N O@3 P@2 Q ~@2 R@2 S@2 T@2 U@2 V ~@2 W V X@2 Y Z@2 AA@2 AB AC AD@2 ~@2 A B C
  D ~@8 AA@3 AB AC AD@2 ~@2 E F G H@2 F I J AE AF AE AF AE AF AG AH AE AI@2 ~@2
>`.pickRestart({
  A: "[a3,a4]@2 [a3,a4]@2 [g#3,g#4]!2 [a3,a4]@2 ~@8", B: "[c#4,c#5]@2 [c#4,c#5]@2 [c4,c5]!2 [c#4,c#5]@2 ~@8",
  C: "[e4,e5]@2 [e4,e5]@2 [d#4,d#5]!2 [e4,e5]@2 ~@8", D: "[a4,a5]@2 [a4,a5]@2 [g#4,g#5]!2 [a4,a5]@2 ~@8",
  E: "~@4 [a3,a4] [f#3,f#4]@2 [e3,e4]@7 ~@2", // A F# E
  F: "~@2 [e3,e4]!3 [f#3,f#4] [a3,a4]@2 [d4,d5] [c#4,c#5]@2 [b3,b4]@2 [a3,a4]@3", // E F# A D C# B A
  G: "[a3,a4]@3 [f#3,f#4]@3 [e3,e4]@6 ~@2 [c#4,c#5]@2", // A F# E C#
  H: "[[d4,d5] [d4,d5]@2 [d4,d5]@2 [c#4,c#5]@2 [a3,a4] [d4,d5] [d4,d5]@2 [d4,d5]@2 [c#4,c#5]@2 [a3,a4]@2 ~@3 [a3,a4] [f#3,f#4]@2 [e3,e4]@7 ~@2]/2", // D C# A D C# A F# E
  I: "[a3,a4]@3 [f#3,f#4]@3 [c#4,c#5]@6 ~@2 [e4,c#5]@2", // A F# C# C#m
  J: "[f#4,d5] [f#4,d5]@2 [f#4,d5]@2 [e4,c#5]@2 [c#4,a4] [f#4,d5] [f#4,d5]@2 [f#4,d5]@2 [e4,c#5]@2 ~", // D C#m F#m D C#m
  K: "~@4 [a3,a4] [f#3,f#4]@2 [e3,e4]@7 [e4,c#5]@2", L: "~@14 [a3,a4] ~", M: "[c#4,c#5]@3 [c#4,c#5] [d4,d5]@3 [d4,d5]",
  N: "[e4,e5]@12 ~ [d4,d5] d5 [d4,d5]", O: "[a3,a4] ~@12 [d4,d5] d5 [d4,d5]",
  P: "[[d4,d5]@9 [e4,e5]@2 [c#4,c#5]@2 [d4,d5]@2 [e4,e5]@5 ~@6 [a3,a4] ~@5]/2", Q: "~@10 [a3,a4] ~@5",
  R: "[~@12 [a3,a4] [f#3,f#4]@2 [e3,e4]@7 ~@4 [e3,e4]!3 [f#3,f#4] [a3,a4]@2]/2", // A F# E F# A
  S: "[[d4,d5] [c#4,c#5]@2 [b3,b4]@2 [a3,a4]@3 [a3,a4]@3 [f#3,f#4]@3 [e3,e4]@6 ~@2 [c#4,c#5]@2 [d4,d5] [d4,d5]@2 [d4,d5]@2 [c#4,c#5]@2 [a3,a4]]/2", // D C# B A F# E C# D …
  T: "[[d4,d5] [d4,d5]@2 [d4,d5]@2 [c#4,c#5]@2 [a3,a4]@2 ~@3 [a3,a4] [f#3,f#4]@2 [e3,e4]@7 ~@4 [e3,e4]!3 [f#3,f#4] [a3,a4]@2]/2", // D C# A F# E F# A
  U: "[[d4,d5] [c#4,c#5]@2 [b3,b4]@2 [a3,a4]@3 [a3,a4]@3 [f#3,f#4]@3 [c#4,c#5]@6 ~@2 [e4,c#5]@2 [f#4,d5] [f#4,d5]@2 [f#4,d5]@2 [e4,c#5]@2 [c#4,a4]]/2", // D C# B A F# C# C#m D …
  V: "[f#4,d5] [f#4,d5]@2 [f#4,d5]@2 [e4,c#5]@2 ~@9", W: "~@8 [f#4,d5] [f#4,d5]@2 [f#4,d5]@2 [e4,c#5]@2 [c#4,a4]",
  X: "~@6 [a3,a4] ~@9", Y: "~@4 [c#4,c#5]@3 [c#4,c#5]",
  Z: "[[d4,d5]@6 [d4,d5]@2 [e4,e5]@12 ~ [d4,d5] d5 [d4,d5] [a3,a4] ~@7]/2", AA: "~@5 [d4,d5] d5 [d4,d5] [a3,a4] ~@7",
  AB: "~@5 [d4,d5] d5 [d4,d5] [d4,d5]@7 [d4,d5]", AC: "[d4,e5] [e4,e5]@2 [c#4,c#5]@2 [d4,d5]@2 [e4,e5]@5 ~@4",
  AD: "~@2 [a3,a4] ~@13", AE: "[d4,d5] [c#4,c#5] [b3,b4] [a3,a4] ~@4 [d4,d5] [c#4,c#5] [b3,b4] [a3,a4] ~@4",
  AF: "[d4,d5] [c#4,c#5] [b3,b4] [a3,a4]@2 [b3,b4]@2 [c#4,c#5]@2 [d4,d5]@2 [c#4,c#5]@2 ~@3", // D C# B A B C# D C#
  AG: "[d4,a5] [c#4,g#5] [b3,f#5] [a3,e5] ~@4 [d4,a5] [c#4,g#5] [b3,f#5] [a3,e5] ~@4", // D5 C#5 B5 A5 D5 C#5 B5 A5
  AH: "[d4,a5] [c#4,g#5] [b3,f#5] [a3,e5]@2 [b3,b4]@2 [c#4,c#5]@2 [d4,d5]@2 [c#4,c#5]@2 ~@3", // D5 C#5 B5 A5 B C# D C#
  AI: "[[d4,d5] [c#4,c#5] [b3,b4] [a3,a4]@2 [b3,b4]@2 [c#4,c#5]@2 [d4,d5]@2 [c#4,c#5]@7 ~@14]/2", // D C# B A B C# D C#
})).s("gm_trumpet").gain(0.57).pan(0.7)

// chords · distortion guitar · "guitar"
const distortion_guitar = note(`<
  A@3 B C D C D C D C D ~@4 C D ~@3 E F ~@3 G@2 ~@3 H@8 I ~@6 J K L ~@2 M N ~@3 M A@3 O P Q P Q R Q S T U ~@2 M N ~@3 M
  C D C D C D C V C D C D C D C D W@4 ~
>`.pickRestart({
  A: "[a2,e3,a3]@2 [a2,e3,a3]@2 [g#2,d#3,g#3]!2 [a2,e3,a3]@2 e3 g#3 a3 d3@2 f#3 a3@2", // A5 G#5 A5
  B: "[a2,e3,a3]@2 [a2,e3,a3]@2 [g#2,d#3,g#3]!2 [a2,e3,a3]@2 [e3,g#3]!8, ~ b2", // A5 G#5 A5 E
  C: "[a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!3 [b2,f#3,b3]@2 [b2,f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]!2 [b2,f#3,b3]@2", // A5 B5
  D: "[d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]!3 [e3,b3,e4]@2 [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2", // D5 E5
  E: "[c#3,g#3,c#4]@2 [c#3,g#3,c#4] [c#3,g#3,c#4]@2 [c#3,g#3,c#4]!3 [d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]!3", // C#5 D5
  F: "[e2,e3,b3,e4]!13 [d3,a3,d4]!3", // E5 D5
  G: "[[d3,a3,d4]@8 [e3,b3,e4] [e3,b3,e4]@2 [c#3,g#3,c#4]@2 [d3,a3,d4]@2 [e3,b3,e4]@5 ~@12]/2", // D5 E5 C#5 D5 E5
  H: "[[d3,a3,d4]@8 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!3 [b2,f#3,b3]@2 [b2,f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]!2 [b2,f#3,b3]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]!3 [e3,b3,e4]@2 [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!3 [b2,f#3,b3]@2 [b2,f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]!2 [b2,f#3,b3]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]!3 [e3,b3,e4]@2 [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!3 [b2,f#3,b3]@2 [b2,f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]!2 [b2,f#3,b3]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]!3 [e3,b3,e4]@2 [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!3 [b2,f#3,b3]@2 [b2,f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]!2 [b2,f#3,b3]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]!3 [e3,b3,e4]]/8", // D5 A5 B5 D5 E5 A5 B5 D5 …
  I: "~ [e3,b3,e4] [e3,b3,e4]@2 [e3,b3,e4]!2 [e3,b3,e4]@2 ~@8", // E5
  J: "~@8 [c#3,g#3,c#4]@2 [c#3,g#3,c#4] [c#3,g#3,c#4]@2 [c#3,g#3,c#4]!3", // C#5
  K: "[d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]!3 [e2,e3,b3,e4]!8", L: "[e2,e3,b3,e4]!5 [d3,a3,d4]!3 ~@8",
  M: "~ [d3,a3,d4]", N: "[e3,b3,e4] [e3,b3,e4]@2 [c#3,g#3,c#4]@2 [d3,a3,d4]@2 [e3,b3,e4]@5 ~@4",
  O: "[a2,e3,a3]@2 [a2,e3,a3]@2 [g#2,d#3,g#3]!2 [a2,e3,a3] [a3,e4,a4]!9", // A5 G#5 A5
  P: "[c#3,g#3,c#4]@2 [c#3,g#3,c#4]!6 [d3,a3,d4]@2 [d3,a3,d4]!6", // C#5 D5
  Q: "[a2,e3,a3]@2 [a2,e3,a3]!6 [a2,e3,a3]@2 [a2,e3,a3]!6", R: "[b2,f#3,b3]@2 [b2,f#3,b3]!6 [d3,a3,d4]@2 [d3,a3,d4]!6",
  S: "[b2,f#3,b3]@2 [b2,f#3,b3]!6 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]!6", // B5 C#5
  T: "[d3,a3,d4]@2 [d3,a3,d4]!6 [e3,b3,e4]@2 [e3,b3,e4]!6", U: "[e3,b3,e4]!5 [d3,a3,d4]!3 ~@8",
  V: "[d3,a3,d4] ~@3 [e3,b3,e4] ~@3", W: "[a2,e3,a3]/4",
})).s("gm_distortion_guitar").gain(0.37).pan(0.7)

// chords · overdriven guitar · "guitar"
const overdriven_guitar = note(`<
  ~@12 A B A B ~@2 A B A ~@2 C@3 ~ D E@2 F ~@8 G H I H I H I J ~ K L@2 M ~ N@3 O ~@12 K L@2 M ~ N@3 O ~@21
>`.pickRestart({
  A: "~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4]", // A Bm
  B: "~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4]", // D E
  C: "[a2,e3,a3] [c#4,e4,a4] ~ [c#4,e4,a4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [e4,g#4,b4] ~ [e4,g#4,b4]", // A5 A Bm D E
  D: "~@10 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~", E: "~@2 [d4,f#4,a4] ~@3 [e4,g#4,b4] ~@3 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~",
  F: "~@2 [d4,f#4,a4] ~@3 [e4,g#4,b4] ~ [a2,e3,a3] ~@7", G: "~@9 [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4]",
  H: "~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4]", // Bm D
  I: "~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4] ~ [c#4,e4,a4]", // E A
  J: "~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~ [d4,f#4,b4] ~@8", // Bm
  K: "~@8 [a2,e3,a3] [c#4,e4,a4] ~ [c#4,e4,a4] ~ [d4,f#4,b4] ~ [d4,f#4,b4]", // A5 A Bm
  L: "~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] [a2,e3,a3] [c#4,e4,a4] ~ [c#4,e4,a4] ~ [d4,f#4,b4] ~ [d4,f#4,b4]", // D E A5 A Bm
  M: "~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~@8", // D E
  N: "~@2 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~@3 [d4,f#4,a4] ~@3 [e4,g#4,b4] ~", O: "[a2,e3,a3] ~@15",
})).s("gm_overdriven_guitar").gain(0.37)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@18 ~ B@3 ~ C D@3 E A@15 F G B@2 H ~ I@3 J@2 ~@3 A@7 F G B@2 H ~ I@3 J A@7 K ~@13
>`.pickRestart({
  A: "x!4", B: "x!8", C: "~ x", D: "x!2 ~@2 x ~@3", E: "~@2 x!2", F: "x!2 ~@2", G: "~@4 x!4", H: "x!4 ~@4",
  I: "x ~@3 x!2 ~@2", J: "x", K: "x!2",
})).gain(0.44)

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

// drums · hihat
const hihat = s("hh").struct(`<
  A@22 B A@3 ~ C D@3 E A@15 F G A@2 H ~ D@3 I A@11 F G A@2 H ~ D@3 I A@7 J D@7 K ~@5
>`.pickRestart({
  A: "x!16", B: "x", C: "~@4 x!4", D: "x!8", E: "x ~@7 x!8", F: "x!9 ~@7", G: "~@8 x!8", H: "x!8 ~@8", I: "x!5 ~@3",
  J: "x!2", K: "x!6 ~@2",
})).gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@8 x!8]!4 ~@53 [~@8 x!8]!4 ~@38>").gain(0.44)

// drums · open hat
const open_hat = s("oh").struct("<~@22 A ~@8 A ~@15 B ~@8 B ~@4 C@7 D ~@8 B C@7 E C@8 ~@5>".pickRestart({
  A: "x", B: "~ x", C: "x!8", D: "x!5 ~@3", E: "x!2",
})).gain(0.44)

// drums · crash
const crash = s("cr").struct("<A ~@30 B ~@24 C A ~@19 C ~@21>".pickRestart({
  A: "x!2 ~@6", B: "x", C: "~ x",
})).gain(0.44)

stack(bass, trumpet, distortion_guitar, overdriven_guitar, kick, snare, hihat, mid_tom, open_hat, crash)

More by Reel Big Fish