Strudelify

Badfish

Sublime

KeyA majorTempo90 bpm
0:00/0:00
// Badfish — Sublime
// 90 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 overdriven guitar (copy of ch 8 overdriven guitar, 0.208 beats late)
// note: Full arrangement: all 70 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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 finger
const bass = note("<A B@8 C@8 D@8 E@4 F G H I F G H I J K L J K J K J K J K M@6 N@3 O N@3 P@7 Q@2>".pickRestart({
  A: "~ a1@7", B: "[~@11 b1@52 g1@53 a1@53 a1@52 b1@53 g1@53 a1@52 a1@5]/8",
  C: "[~@4 e2@3 a2@4 ~@2 a2@5 ~ b2@5 ~ a2@5 ~ g#2@6 a2@6 b1@8 ~ f#2@3 b2@4 ~@2 c#3@4 ~@2 d3@12 ~@12 g1@8 ~ g1@3 g1@2 ~ g1@2 ~ d1@3 ~@3 g1@8 ~ g1@3 g1@2 ~ g1@2 ~ d1@3 ~@3 a1@8 ~ a1@3 a2@2 ~ a2@2 ~ a1@2 ~@4 a1@6 e2@2 ~ e2@2 ~ e2@12 a1@8 ~ e2@3 a2@4 ~@2 a2@5 ~ b2@5 ~ a2@5 ~ g#2@6 a2@6 b1@8 ~ f#2@3 b2@4 ~@2 c#3@4 ~@2 d3@12 ~@12 g1@8 ~ g1@3 g1@2 ~ g1@2 ~ d1@3 ~@3 g1@8 ~ g1@3 g1@2 ~ g1@2 ~ d1@3 ~@3 a1@8 ~ a1@3 a2@2 ~ a2@2 ~ a1@2 ~@4 a1@6 e2@2 ~ e2@2 ~ e2@12 a1@5]/8",
  D: "[~@4 a1@2 ~ a1@3 ~@3 a1@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 g1@8 ~ g1@2 ~ g1@3 ~@3 g1@4 ~@2 g1@8 ~ g1@2 ~ g1@3 ~@3 g1@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 d2@5]/8",
  E: "[~@4 d2@2 ~ d2@3 ~@3 d2@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 b1@53]/4",
  F: "a1@8 ~ e2@3 a2@4 ~@2 a2@5 ~ b2@5 ~ a2@5 ~ g#2@6 a2@6", G: "b1@8 ~ f#2@3 b2@4 ~@2 c#3@4 ~@2 d3@12 ~@12",
  H: "g1@8 ~ g1@3 g1@2 ~ g1@2 ~ d1@3 ~@3 g1@8 ~ g1@3 g1@2 ~ g1@2 ~ d1@3 ~@3",
  I: "a1@8 ~ a1@3 a2@2 ~ a2@2 ~ a1@2 ~@4 a1@6 e2@2 ~ e2@2 ~ e2@12",
  J: "a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2",
  K: "d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2",
  L: "g1@8 ~ g1@2 ~ g1@3 ~@3 g1@4 ~@2 g1@8 ~ g1@2 ~ g1@3 ~@3 g1@4 ~@2",
  M: "[b1@53 a1@52 b1@53 g1@53 a1@48 a1@8 ~ e2@3 a2@4 ~@2 a2@5 ~ b2@5]/6",
  N: "[~ a2@5 ~ g#2@6 a2@6 b1@8 ~ f#2@3 b2@4 ~@2 c#3@4 ~@2 d3@12 ~@12 g1@8 ~ g1@3 g1@2 ~ g1@2 ~ d1@3 ~@3 g1@8 ~ g1@3 g1@2 ~ g1@2 ~ d1@3 ~@3 a1@8 ~ a1@3 a2@2 ~ a2@2 ~ a1@2 ~@4 a1@5]/3",
  O: "~ e2@2 ~ e2@2 ~ e2@12 a1@8 ~ e2@3 a2@4 ~@2 a2@5 ~ b2@5",
  P: "[~ e2@2 ~ e2@2 ~ e2@12 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 a1@8 ~ a1@2 ~ a1@3 ~@3 a1@4 ~@2 d2@8 ~ d2@2 ~ d2@3 ~@3 d2@4 ~@2 d2@5]/7",
  Q: "[~@4 d2@2 ~ d2@3 ~@3 d2@4 ~@2 b1@48 ~@29]/2",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · epiano2
const epiano2 = note(`<
  ~@9 A B C A@2 B C A@2 D C A D A D A D A E@2 F G H F@2 G H F@2 I H F I F I F I F I J@2 ~@3 K L M N A L M N O P O P O P
  O Q@2
>`.pickRestart({
  A: "~ [c#4,e4,a4]@2 ~@10 [c#4,e4,a4]@2 ~@10 [c#4,e4,a4]@2 ~@10 [c#4,e4,a4]@2 ~@9", // A
  B: "~ [b3,d4,f#4]@2 ~@10 [b3,d4,f#4]@2 ~@10 [b3,d4,f#4]@2 ~@10 [b3,d4,f#4]@2 ~@9", // Bm
  C: "~ [b3,d4,g4]@2 ~@10 [b3,d4,g4]@2 ~@10 [b3,d4,g4]@2 ~@10 [b3,d4,g4]@2 ~@9", // G
  D: "~ [d4,f#4,a4]@2 ~@10 [d4,f#4,a4]@2 ~@10 [d4,f#4,a4]@2 ~@10 [d4,f#4,a4]@2 ~@9", // D
  E: "[~ [d4,f#4,a4]@2 ~@10 [d4,f#4,a4]@2 ~@10 [d4,f#4,a4]@2 ~@10 [d4,f#4,a4]@2 ~@6 [f#4,b4]@51, ~@43 b2@53, ~@11 [f#3,b3,d#4]@13]/2", // D B5 B
  F: "~@3 [c#4,e4,a4] ~@5 [c#4,e4,a4] ~@5 [c#4,e4,a4] ~@5 [c#4,e4,a4] ~@2", // A
  G: "~@3 [b3,d4,f#4] ~@5 [b3,d4,f#4] ~@5 [b3,d4,f#4] ~@5 [b3,d4,f#4] ~@2", // Bm
  H: "~@3 [b3,d4,g4] ~@5 [b3,d4,g4] ~@5 [b3,d4,g4] ~@5 [b3,d4,g4] ~@2", // G
  I: "~@3 [d4,f#4,a4] ~@5 [d4,f#4,a4] ~@5 [d4,f#4,a4] ~@5 [d4,f#4,a4] ~@2", // D
  J: "[~@2 b4@51 ~@43, [b2,f#3]@53 ~@43, ~ [b3,d#4,f#4]@52 ~@43]/2", K: "~@25 [c#4,e4,a4]@2 ~@10 [c#4,e4,a4]@2 ~@9",
  L: "~ [c#4,e4,a4]@2 ~@10 [c#4,e4,a4]@2 ~@10 [b3,d4,f#4]@2 ~@10 [b3,d4,f#4]@2 ~@9", // A Bm
  M: "~ [b3,d4,f#4]@2 ~@10 [b3,d4,f#4]@2 ~@10 [b3,d4,g4]@2 ~@10 [b3,d4,g4]@2 ~@9", // Bm G
  N: "~ [b3,d4,g4]@2 ~@10 [b3,d4,g4]@2 ~@10 [c#4,e4,a4]@2 ~@10 [c#4,e4,a4]@2 ~@9", // G A
  O: "~ [c#4,e4,a4]@2 ~@10 [c#4,e4,a4]@2 ~@10 [d4,f#4,a4]@2 ~@10 [d4,f#4,a4]@2 ~@9", // A D
  P: "~ [d4,f#4,a4]@2 ~@10 [d4,f#4,a4]@2 ~@10 [c#4,e4,a4]@2 ~@10 [c#4,e4,a4]@2 ~@9", // D A
  Q: "[~ [d4,f#4,a4]@2 ~@10 [d4,f#4,a4]@2 ~@5 [d#4,f#4,b4]@47 ~@29, ~@19 [b2,f#3,b3]@48 ~@29]/2", // D B B5
})).s("gm_epiano2").gain(0.29)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<A B C D E F G H@2 ~@11 I@2 ~@18 J K ~@7 L M N@3 ~@16>".pickRestart({
  A: "~@7 [a3,c#4,e4]@13 ~@28, ~@6 [a2,e3]@13 ~@29", // A A5
  B: "~@13 f#4@13 ~@11 f#3@11, ~@11 [b2,f#3]@13 ~@24, ~@12 [b3,d4]@13 ~@23", // B5 Bm
  C: "~@17 [d4,g4]@13 ~@18, ~@15 g2@13 ~@20, ~@16 [d3,g3,b3]@13 ~@19", // G5 G
  D: "~@21 [a3,c#4,e4]@13 ~@14, ~@20 [a2,e3]@13 ~@15", // A A5
  E: "~@8 [c#3,c#4]@3 [c#3,c#4]@7 [c#3,c#4]@7 ~ [c#4,e4]@13 ~@9, ~@25 [a2,e3,a3]@13 ~@10", // C# C#m A5
  F: "~@31 [d4,f#4]@13 ~@4, ~@29 b2@13 ~@6, ~@30 [f#3,b3]@13 ~@5", // D B5
  G: "~@8 f#3@13 ~@15 g4@12, ~@34 [g2,d3]@13 ~, ~@35 [g3,b3,d4]@13", // G5 G
  H: "[~@12 a2@3 ~ b2@20 ~@4 [c#4,e4]@52 ~@4, ~@39 [a2,e3,a3]@52 ~@5]/2", // C#m A5
  I: "[~@28 c#3@3 e3@3 f#3@3 a3@3 b3@3 a3@24 ~@29]/2", J: "~@11 c#3 e3 f#3 a3 b3", K: "a3 ~",
  L: "~@6 [c#4,e4]@13 ~@29, ~@5 [a2,e3,a3]@13 ~@30", // C#m A5
  M: "~@12 f#4@13 ~@11 f#3@12, ~@9 b2@13 ~@26, ~@10 [f#3,b3]@13 ~@25, ~@11 d4@13 ~@24", // B5
  N: "[~@16 g4@13 ~@11 a2@3 ~ b2@20 ~@4 [c#4,e4]@47 ~@29, ~@14 [g2,d3]@13 ~@40 [a2,e3,a3]@48 ~@29, ~@15 [g3,b3,d4]@13 ~@116]/3", // C#m G5 A5 G
})).s("gm_acoustic_guitar_steel").gain(0.64)

// chords · acoustic guitar steel
const acoustic_guitar_steel_2 = note("<A B@4 C@3 ~@41 D@2 E F ~@17>".pickRestart({
  A: "~@20 [c#4,e4]@9 [a2,e3,a3,c#4,e4]@3 [a2,e3,a3,c#4,e4]@10 ~ [a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@3, ~@19 [a2,e3,a3]@10 ~@13 [a2,e3]@3 ~@3", // C#m A A5
  B: "[~ [a2,e3,a3,c#4,e4]@3 [d3,g3,b3]@3 [d3,g3,b3]@3 ~@15 f#4@9 [b2,f#3,b3,d4,f#4]@3 [b2,f#3,b3,d4,f#4]@10 ~ f#4@2 [b2,f#3,b3,d4,f#4]@3 [b2,f#3,b3,d4,f#4]@3 ~ [d3,g3,b3]@3 [d3,g3,b3]@3 ~@14 [d3,g3,b3,d4]@9 [g2,d3,g3,b3,d4,g4]@3 ~ [g2,d3,g3,b3,d4,g4]@9 ~@2 g4@2 [g2,d3,g3,b3,d4,g4]@3 [g2,d3,g3,b3,d4,g4]@3 [d3,g3,b3]@3 ~ [d3,g3,b3]@3 ~@14 [a3,c#4,e4]@9 [a2,e3,a3,c#4,e4]@3 [a2,e3,a3,c#4,e4]@10 ~ [a3,c#4,e4]@2 [a2,e3,a3,c#4,e4]@3 ~ [a2,e3,a3,c#4,e4]@3 [d3,g3,b3]@3 [d3,g3,b3]@3 ~ [a2,a3]@13 ~ e4@9, ~@24 [b2,f#3,b3,d4]@10 ~@13 [b2,f#3,b3,d4]@3 ~@26 [g2,g4]@10 ~@13 g2@3 ~@27 [a2,e3]@10 ~@13 [a2,e3]@3 ~@27 [a2,e3,a3,c#4]@10, ~@100 [d3,g3,b3,d4]@3 ~@89]/4", // A G Bm G A G A Bm …
  C: "[[a2,e3,a3,c#4,e4]@3 [a2,e3,a3,c#4,e4]@10 ~ e4@2 [a2,e3,a3,c#4,e4]@3 [a2,e3,a3,c#4,e4]@3 ~ [d3,g3,b3]@3 [d3,g3,b3]@3 ~@14 [f#3,b3,d4,f#4]@9 [b2,f#3,b3,d4,f#4]@3 ~ [b2,f#3,b3,d4,f#4]@9 ~ [f#3,b3,d4,f#4]@3 [b2,f#3,b3,d4,f#4]@3 [b2,f#3,b3,d4,f#4]@3 [d3,g3,b3]@3 ~ [d3,g3,b3]@3 ~@14 [g3,b3,d4]@9 [g2,d3,g3,b3,d4,g4]@3 [g2,d3,g3,b3,d4,g4]@10 ~ [g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@3 ~ [g2,d3,g3,b3,d4,g4]@3 [d3,g3,b3]@3 [d3,g3,b3]@3 ~@10, ~@13 [a2,e3,a3,c#4]@3 ~@26 b2@10 ~@13 b2@3 ~@27 [g2,d3,g4]@10 ~@13 [g2,d3]@3 ~@23]/3", // A G Bm G A G5
  D: "[~@5 [a2,a3]@13 ~ [c#4,e4]@9 [a2,e3,a3,c#4,e4]@3 [a2,e3,a3,c#4,e4]@10 ~ [c#4,e4]@2 [a2,e3,a3,c#4,e4]@3 [a2,e3,a3,c#4,e4]@3 ~ [d3,g3,b3]@3 [d3,g3,b3]@3 ~@14 [b2,f#3,b3,d4,f#4]@9 [b2,f#3,b3,d4,f#4]@3 ~ [b2,f#3,b3,d4,f#4]@10 [b2,f#3,b3,d4,f#4]@2, ~@18 [a2,e3,a3]@10 ~@13 [a2,e3,a3]@3 ~@52]/2", // A C#m A C#m A G Bm A5
  E: "~ [b2,f#3,b3,d4,f#4]@3 [b2,f#3,b3,d4,f#4]@3 [d3,g3,b3]@3 ~ [d3,g3,b3]@3 ~@14 [g3,b3,d4]@9 [g2,d3,g3,b3,d4,g4]@3 [g2,d3,g3,b3,d4,g4]@8, ~@27 [g2,d3,g4]@10 ~@11", // Bm G G5
  F: "~ [g3,b3,d4,g4] [g2,d3,g3,b3,d4,g4]!2 [d3,g3,b3]!2 ~@10, ~@2 [g2,d3]@3 ~@43", // G G5
})).s("gm_acoustic_guitar_steel").gain(0.32)

// other · trumpet
const trumpet = note("<~@48 A@2 ~@20>".pickRestart({
  A: "[~@13 b4@53 ~@30]/2",
})).s("gm_trumpet").gain(0.32)

// other · overdriven guitar
const overdriven_guitar = note("<~@53 A@3 B@3 C D ~@9>".pickRestart({
  A: "[~@19 b3@24 b3@24 b3@36 ~@12 e3@3 f#3@3 ~@3 a3@3 ~@3 b3@3 ~@6 g#3@3 a3@2]/3",
  B: "[~ g#3@3 e3@3 f#3@3 e3@3 d3@3 b2@39 ~@18 c#3@6 e3@3 f#3@3 ~@3 f#3@18 ~@3 e3@6 a3@3 g#3@3 f#3@3 e3@3 f#3@12 ~@5]/3",
  C: "~@19 a4@9 f#4@9 c#4@11", D: "~ b3@6 a3@6 b3@6 a3@24 ~@5",
})).s("gm_overdriven_guitar").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B C B C B C B C@2 B C B C B C B C B C ~ D E D E D E D E@2 D E D E D E D E D E F ~@4 G H I H I H I H@2 I H I H I
  H J ~
>`.pickRestart({
  A: "~@43 x ~@4", B: "~@19 x ~@5 x ~@17 x ~@4", C: "~@16 x ~@2 x ~@5 x ~@17 x ~@4", D: "x ~@3 x!2 ~@2",
  E: "x ~@6 x!2 ~ x ~@5", F: "x", G: "~@19 x ~@23 x ~@4", H: "~ x ~@17 x ~@20 x ~@2 x ~@4", I: "~ x ~@17 x ~@23 x ~@4",
  J: "~ x ~@17 x ~@28",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@9 A@19 ~ B@19 ~@4 C D A@14 E ~>".pickRestart({
  A: "~@7 x ~@23 x ~@16", B: "~ x ~ x", C: "~@25 x ~@5 x ~@2 x ~@5 x ~@2 x ~@2 x ~",
  D: "~@4 x ~@2 x ~@2 x ~@2 x ~@17 x ~@16", E: "~@7 x ~@40",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@28 [~@22 x ~@18 x ~@6] ~@41>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 [~@13 x ~@2] ~@41>").gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@27 [~@43 x ~@4] ~@20 x ~@19 [~@19 x ~@28] ~>").gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@28 [~@33 x ~ x ~@12] ~@41>").gain(0.64)

stack(
  bass, epiano2, acoustic_guitar_steel, acoustic_guitar_steel_2, trumpet, overdriven_guitar, kick, snare, low_tom,
  mid_tom, crash, high_tom
)

More by Sublime