Strudelify
KeyC majorTempo127 bpm
0:00/0:00
// All I Want — Toad the Wet Sprocket
// 127 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 5 "Guitar" named as a guitar, played on electric guitar clean (its harmonica patch is not one)
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(127/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 · "Bass"
const bass = note(`<
  ~@4 A B C D A B C D A B C E A F G H I J K L M J K N O@2 A B C D A B C D A B C E A F C D A P Q@2 R S K T U V W X O@2 Y
  Z AA AB O AC AD@2 AE@2 A B C D A B AF@2 R S K T U S K T U S K T U S K AG AH@2
>`.pickRestart({
  A: "d2@4 ~@2 d2@2 ~@2 d2 ~@3 e2 ~", B: "f2@4 ~@2 f2@2 ~@2 f2 ~@3 d2 ~", C: "c2@4 ~@2 c2@2 ~@2 c2 ~@3 d2 ~",
  D: "a1@4 ~@2 a1@2 ~@2 a1 ~@3 e2 ~", E: "a1@4 ~@2 a1@2 ~@2 a1 ~@3 a1 ~", F: "f2@4 ~@2 f2@2 ~@2 f2 ~@3 f2 ~",
  G: "a#1@2 ~ a#1@2 ~ a#1@2", H: "~@2 a#1@3 ~@3 a#1 ~@3 a#1 ~@3", I: "~ c2@4 ~ c2@6 e2@4",
  J: "a2@4 ~@2 a2@4 g2@2 e2@3 ~", K: "d2@2 ~ d2@2 ~ d2 ~", L: "g2@5 ~ g2@4 ~@2 g2@2 ~@2", M: "c2@4 ~@2 c2@4 ~@2 c2@3 ~",
  N: "g2@4 ~@2 g2@4 ~@2 g2 ~@3", O: "f2@11 ~@5", P: "a1@4 ~@2 a1@2 ~@4 a1 ~@3", Q: "[a#2@3 a2@3 g2@3 f2@3 e2 ~ d2 ~]/2",
  R: "c2@4 ~@2 c2@4 ~@2 g2@3 ~", S: "a2@4 ~@2 a2@4 g2@2 ~ e2@2 ~", T: "g2@4 ~@2 g2@2 ~@2 f2 ~ d2@2 ~@2",
  U: "c2@2 ~ c2@2 ~ g2 ~", V: "a2@3 ~@3 a2@4 g2 ~ e2@4", W: "d2@3 ~@3 d2@3 ~@2 d2@2 ~@3", X: "g2@4 ~@2 g2@4 ~@2 e2@3 ~",
  Y: "g2@13 ~@3", Z: "a2@3 ~ g2@3 ~", AA: "f2@15 ~", AB: "c3@5 ~@3 g2@6 ~@2", AC: "a2@6 ~@2 g2@7 ~",
  AD: "[d3@29 ~@3]/2", AE: "[f2@3 ~]/2", AF: "[a#2@6 ~ a2@5 g2@6 f2@6 e2@2 ~@2 d2@3 ~]/2", AG: "e2@2 ~ e2",
  AH: "[f2@15 ~]/2",
})).s("gm_electric_bass_finger").gain(0.64)

// other · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  ~@15 A ~@2 B@2 C@2 D E F@2 D G H@2 I J K L@2 ~@10 M@2 ~ N@2 O P Q R O S T U V@2 W@2 X Y Z AA AB@4 ~@3 AC@2 ~ AD@2 AE
  AF AG R AE AH@2 AI AE AJ Q AI AK AL@2 AM AN@2
>`.pickRestart({
  A: "c4 b3 g3 [c4,g4]@5", B: "[a#3@7 a3@6 g3@5 f3@6 e3@4 d3@2 c4@2]/2",
  C: "[~@2 c4@2 ~@2 c4@2 ~@2 c4 ~ c4 ~ b3@4 c4 ~@4 c4@4 ~@3 e4@2]/2", D: "~@2 d4@2 ~@2 c4@7 ~ e4@2",
  E: "~@2 f4@3 ~ e4@3 ~ d4 ~ c4 ~ c4@2", F: "[~@2 c4@2 ~@2 c4@5 ~ c4@2 b3@4 c4@2 ~@2 c4@4 ~@4 e4@2]/2",
  G: "~@2 f4@2 ~@2 e4@5 ~ d4 ~@3", H: "[~ d4@3 e4@2 c4@21 ~@5]/2", I: "~@2 f4@4 e4@4 d4@2 d3 ~ e3 ~, d3@11 ~@5",
  J: "~@3 c4@3 d4@4 e4@5 ~, f3@7 ~", K: "b3 c4@2 b3@2 g3@3", L: "[c4 b3 ~ g4@6 ~@7, ~ g3@4 ~@3]/2",
  M: "[c4 b3 ~ g4@7 ~@6, ~ g3@4 ~@3]/2", N: "[~ a#3@5 ~@6 g3@6 f3@6 e3@2 ~@2 d3@2 c4@2, ~@3 a3@6 ~@7]/2",
  O: "~@2 c4@2 ~@2 c4@2 ~@2 c4 ~ c4 ~ b3 ~", P: "~@2 c4 ~@3 c4@2 ~@4 g3@2 e4@2", Q: "~@2 d4 ~@3 c4@4 ~@4 e4@2",
  R: "~@2 f4@2 ~@2 e4@4 d4 ~ c4 ~ c4@2", S: "~@2 c4 ~@3 c4@4 ~@2 g3@2 e4@2", T: "~ e4 ~ d4 ~@2 c4@2 ~@6 e4@2",
  U: "~ f4 ~ e4 ~ d4 ~@2", V: "[d4@2 ~@2 e4 ~@2 c4@14 ~@9 g3!2]/2", W: "[~@10 d4@2 c4@2 ~ g4@9 d4@7 ~, ~ g3@14 ~@17]/2",
  X: "~ a3 ~ f4@2 c4 a3@2, [f3,c4]@2 c4@3 ~@3", Y: "e4@2 f4@2 e4@2 d4@4 c4@5 ~", Z: "c4@5 d4 c4@2",
  AA: "~ g4@4 ~@3 e4 ~@2 d4 ~@2 c4@2",
  AB: "[d4@4 e4@2 d4@4 c4@4 a3@4 c4@11 ~ d4@4 e4@6 ~@2 c4@3 ~ a3@10 ~@8, ~@40 d4@5 ~@19]/4",
  AC: "[c4@2 b3@2 g3@2 [c4,g4]@15 ~@11]/2", AD: "[a#3@6 a3@6 g3@6 f3@6 e3@4 d3@3 c4]/2",
  AE: "~@2 c4@2 ~@2 c4@2 ~@2 c4 ~ c4 ~ b3@2", AF: "~@2 c4@2 ~@2 c4@3 ~@3 g3@2 e4@2", AG: "~@2 d4 ~@3 c4@5 ~@3 e4@2",
  AH: "[~@2 c4@2 ~@2 c4@5 ~@3 e4@4 d4@2 ~@2 c4@5 ~@3 e4@2]/2", AI: "~@2 f4@2 ~@2 e4@2 ~@2 d4 ~ c4 ~ c4@2",
  AJ: "~@3 c4 ~@2 c4@2 ~@4 g3@2 e4@2", AK: "~@3 c4@2 ~ c4@2 ~@2 c4 ~ c4 ~ b3@2",
  AL: "[~@2 c4 ~@3 c4@3 ~@3 g3@2 e4@4 d4@4 c4@6 ~@2 a3@2]/2", AM: "~@2 a3@2 ~@2 g#3@2 ~@2 g#3@3 ~@3", AN: "[f3@15 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.25)

// other · reed organ · "Organ"
const reed_organ = note(`<
  ~@34 A B C D@2 E F G ~@8 H I J K L M N O ~@8 P@2 Q@2 ~@8 H I R O L I N S L B N T L B N U V@2
>`.pickRestart({
  A: "g4", B: "a4", C: "e4", D: "g4@13 ~@3", E: "a4@7 ~", F: "e4@15 ~", G: "c4@7 ~", H: "c4@15 ~", I: "a4@15 ~",
  J: "d4@7 ~", K: "g4@5 ~@3", L: "c4", M: "a4@13 ~@3", N: "d4", O: "g4@3 ~", P: "[f#4@7 ~]/2", Q: "[f4@7 ~]/2",
  R: "d4@15 ~", S: "g4@7 ~", T: "g4@11 ~@5", U: "g4@15 ~", V: "[~ e4@28 ~@3, c4@15 ~@17]/2",
})).s("gm_reed_organ").gain(0.45)

// other · overdriven guitar · "Solo"
const overdriven_guitar = note("<~@59 A B@2 C ~@5 D@2 E@3 F G H I@2 ~@18>".pickRestart({
  A: "~@14 g3!2", B: "[g3@25 ~@7]/2", C: "f3@13 ~@3", D: "[~@14 f4@4 e4@4 ~@4 c4 ~ c4 ~ c4@2, ~@11 d4@3 ~@2]/2",
  E: "[~@3 d4@3 ~@4 a3@4 ~@8 d4 ~@2 d4 ~ d4@2 ~ d4@4 e4@2 ~@2 e4@4 c4@3 ~@3, ~@3 c4@4 g3@17, ~@12 c4 ~@11]/3",
  F: "g4@10 ~ e4@3 f4@2, ~@5 f4 ~@2", G: "e4@10 c4@2 d4 ~ d4@2", H: "~ e4 ~ e4@2 c4@3",
  I: "[g4@3 f4@3 e4@3 d4@3 c4@3 ~]/2",
})).s("gm_overdriven_guitar").gain(0.72)

// other · acoustic guitar steel · "Acoustic"
const acoustic_guitar_steel = note(`<
  ~@4 A B C D E F C G H@2 C I J@2 K@2 L ~@9 M F C N ~@15 O@2 P@2 Q R S@3 T@2 ~@17 O@2 U@3 R V@3 R W@3 X Y@3 Z@2
>`.pickRestart({
  A: "~@2 f4@4 e4@4 d4 ~ d3 ~ e3 ~, d3@11 ~@5", B: "~ c4@2 d4@2 e4@3, f3@15 ~", C: "b3 c4@2 b3@2 g3@3",
  D: "c4 b3 ~ g4@4 ~, ~ g3@2 ~", E: "~@2 f4@4 e4@4 d4@2 e3 ~@3, d3@11 ~@5", F: "~ c4@2 d4@2 e4@3, f3",
  G: "c4@2 b3@2 ~@2 g4@7 ~@3, ~ g3@2 ~", H: "[~@2 f4@5 e4@3 ~@3 d3 ~ e3 ~@3 c4@3 d4@4 e4@6, d3@10 d4@7 f3@15]/2",
  I: "c4 b3 ~ g4@4 ~, ~@4 g3@9 ~@3", J: "[d3@29 ~@3]/2", K: "[a#3@7 a3@5 g3@6 f3@6 e3@4 d3@2 ~@2]/2", L: "c3@3 ~",
  M: "~@2 f4@4 e4@4 d4@2 d3 ~ e3 ~, d3@11 ~@5", N: "c4 b3 ~ g4@5, ~ g3@3",
  O: "[~@15 c4@2 ~ c4@2 ~@2 c4@2 ~@2 c4 ~ c4 ~ b3@2]/2", P: "[~@2 c4@2 ~@2 c4@3 ~@3 g3@2 e4@4 d4@4 c4@5 ~@3 e4@2]/2",
  Q: "~@2 f4@3 ~ e4@4 d4@2 c4 ~ c4@2", R: "~@2 c4@2 ~@2 c4@3 ~ c4 ~ c4 ~ b3@2",
  S: "[~@2 c4 ~@3 c4@3 ~@3 g3@2 e4@4 d4@4 c4@8 e4@4 f4@4 e4@4 d4@3 ~@3]/3", T: "[d4@4 e4@2 c4@23 ~@3]/2",
  U: "[~@2 c4 ~@3 c4@3 ~@3 g3@2 e4@4 d4@4 c4@8 e4@4 f4@4 e4@4 d4@2 c4 ~ c4@2]/3",
  V: "[~@2 c4@2 ~@2 c4@3 ~@3 g3@2 e4@4 d4@4 c4@8 e4@4 f4@4 e4@4 d4@2 c4 ~ c4@2]/3",
  W: "[~@2 c4@2 ~@2 c4@5 ~ g3@2 e4@4 d4@4 c4@8 e4@4 f4@4 e4@4 d4@2 c4 ~ c4@2]/3",
  X: "~@2 c4@2 ~@2 c4@2 ~@2 c4 ~ c4 ~ b3@2", Y: "[~@2 c4@2 ~@2 c4@4 ~@2 g3@2 e4@4 d4@4 c4@8 e4@4 f4@4 e4@4 d4@3 ~@3]/3",
  Z: "[d4@5 e4@2 c4@18 ~@7]/2",
})).s("gm_acoustic_guitar_steel").gain(0.32)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x!2 ~@3]!94 ~@2>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!94 ~@2>").gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@19 A ~@9 A ~@19 A ~@9 A ~@17 A ~@3 B ~@3 B ~@3 A ~@3 B ~@2>".pickRestart({
  A: "~@7 x", B: "~@6 x!2",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!20 ~@10 [x!8]!20 ~@28 [x!8]!8 ~@10>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 A ~@9 A ~@19 A ~@9 A ~@17 A ~@3 B ~@3 B ~@3 C ~@3 B ~@2>".pickRestart({
  A: "~@8 x ~@2 x!2 ~@3", B: "~@5 x ~@2", C: "~@5 x!2 ~",
})).gain(0.45)

// drums · ride bell
const ride_bell = s("rd").struct("<~@20 [x!4]!10 ~@20 [x!4]!28 ~@8 [x!4]!8 ~@2>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@12 A ~@7 A ~@9 A ~@11 A ~@7 A ~@9 A ~@17 A ~@3 A ~@3 A ~@3 A ~@3 B ~>".pickRestart({
  A: "x", B: "~ x ~@14",
})).gain(0.45)

stack(
  bass, electric_guitar_clean, reed_organ, overdriven_guitar, acoustic_guitar_steel, kick, snare, low_tom, hihat,
  mid_tom, ride_bell, crash
)