Strudelify
(Don't Mess With) My Toot Toot cover art

1985 · My Toot Toot

(Don't Mess With) My Toot Toot

LaSalle

KeyD majorTempo173 bpm
0:00/0:00
// (Don't Mess With) My Toot Toot — LaSalle
// 173 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 208 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(173/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger
const bass = note(`<
  ~ A@4 B@2 A@6 B@2 A@6 C@2 D@6 C@2 D@6 C@2 D@6 C@2 D@6 C@2 D@6 C@2 D@6 C@2 D@6 C@2 D@6 C@2 D@6 C@2 D@6 C@2 D@6 C@2 D@2
  ~@8 D@4 C@2 D@6 C@2 D@6 C@2 D@6 C@2 D@6 C@2 D@6 C@2 D@6 C E@2 F@5 G@2 F@6 G@2 H F@4 I G J K F L M F@2 G@2 N
>`.pickRestart({
  A: "d2@8 ~ d2@2 ~ a1@5 ~ b1@5 ~", B: "a1@8 ~ a1@2 ~ e1@5 ~ f#1@5 ~", C: "~ a1@8 ~ a1@2 ~ e1@5 ~ f#1@5",
  D: "~ d2@8 ~ d2@2 ~ a1@5 ~ b1@5", E: "[~@2 a1@8 ~ a1@2 ~ b1@6 c#2@6 d2@8 ~ d2@2 ~ a1@5 ~ b1@4]/2",
  F: "~@2 d2@8 ~ d2@2 ~ a1@5 ~ b1@4", G: "~@2 a1@8 ~ a1@2 ~ e1@5 ~ f#1@4", H: "~@2 d2 d2@6 ~@2 d2@2 ~ a1@5 ~ b1@4",
  I: "~ d2@4 ~ d2 a1@3 b1@2", J: "~@2 a1@7 ~@2 a1@3 e1@6 f#1@4", K: "~@2 d2@7 ~@2 d2!2 ~ a1@5 ~ b1@4",
  L: "~@2 d2@8 ~ d2@2 ~ a1@4 b1@2 b1@4", M: "d2@2 d2@4 ~@5 d2@2 ~ a1@5 ~ b1@4", N: "~@2 d2@3 ~@3 d2@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · epiano2
const epiano2 = note(`<
  ~ A@4 B@2 C A@5 B@2 A@6 D@2 E@6 D@2 E@6 F D E@2 G E@3 D@2 H E@5 D F E@6 D@2 E@6 D@2 E@6 D@2 G E@5 D F I E@5 D@2 E@6 F
  D E@6 D@2 I J ~@32 J@4 F D J@6 K D J@6 D@2 J@6 D@2 J@6 K L J@4 M J K@2 J@6 K@2 J@6 K@2 N
>`.pickRestart({
  A: "~@6 [d4,f#4] ~@2 [f#4,a4]@2 ~@7 [d4,f#4] ~@5, ~@6 a4@2 ~ d4 ~@8 a4@2 ~@4", // D F#m D
  B: "~@6 [c#4,e4]@2 ~ [c#4,e4]@2 ~@7 [a3,c#4,e4]@2 ~@4, ~@6 a3 ~@2 a3 ~@14", // C#m A
  C: "~@6 a4@2 ~ [d4,f#4,a4] ~@8 [d4,f#4,a4]@2 ~@4, ~@6 f#4 ~@17", // D
  D: "~@7 [a3,c#4,e4]@2 ~ [c#4,e4]@2 ~@7 [a3,c#4] ~@4, ~@10 a3 ~@8 e4@2 ~@3", // A C#m A
  E: "~@7 [d4,f#4,a4] ~@2 [d4,a4] ~@8 [d4,f#4,a4]@2 ~@3, ~@5 f#4 ~@6", // D D5 D
  F: "~@7 [a3,c#4] ~@2 [c#4,e4]@2 ~@7 [c#4,e4]@2 ~@3, ~@7 e4@2 ~ a3 ~@8 a3 ~@4", // A C#m
  G: "~@7 [f#4,a4]@2 ~ [d4,f#4,a4] ~@8 [d4,f#4,a4]@2 ~@3, ~@7 d4 ~@16", // F#m D
  H: "~@7 [d4,f#4] ~@2 [d4,f#4] ~@8 [d4,f#4,a4]@2 ~@3, ~@7 a4@2 ~ a4@2 ~@12", // D
  I: "~@7 [d4,f#4] ~@2 [f#4,a4]@2 ~@7 [f#4,a4]@2 ~@3, ~@7 a4@2 ~ d4 ~@8 d4 ~@4", // D F#m
  J: "~@8 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@8 [d4,f#4,a4] ~@3", // D
  K: "~@8 [c#4,e4]@2 ~ [a3,c#4,e4] ~@8 [a3,c#4] ~@3, ~@8 a3 ~@11 e4@2 ~@2", // C#m A
  L: "~@8 [a3,c#4,e4] ~@2 [a3,c#4,e4] ~@8 [a3,c#4,e4] ~@3", // A
  M: "~@8 [d4,f#4] ~@2 [f#4,a4]@2 ~@8 [d4,f#4,a4] ~@2, ~@8 a4@2 ~ d4 ~@12", // D F#m D
  N: "~ [f#4,a4] ~@2 [f#4,a4] ~@7, ~@2 d4 ~@5 d4 ~@15", // F#m
})).s("gm_epiano2").gain(0.62).pan(0.3)

// other · pad sweep
const pad_sweep = note(`<
  ~@8 A B ~@6 A B ~@6 C D ~@6 C D ~@6 C D ~@6 C D ~@14 C D ~@6 C D ~@6 C D ~@6 C D ~@6 C D ~@14 C D ~@30 C D ~@6 C D ~@6
  C D ~@6 C D ~@6 E F ~@6 E F ~@6 E F ~@6 E F ~@6
>`.pickRestart({
  A: "~@15 d6@2 ~ f#6 ~@2 a6 ~@2", B: "d7 ~@23", C: "~@16 d6 ~@2 f#6 ~@2 a6 ~", D: "~ d7 ~@22",
  E: "~@17 d6 ~@2 f#6 ~@2 a6", F: "~@2 d7 ~@21",
})).s("gm_pad_sweep").gain(0.35)

// chords · drawbar organ
const drawbar_organ = note(`<
  A B C D E F C B A B C D G H A B ~@32 I J I K L M I J I J I K N O I J ~@32 I J I K L M I J I J I K N O P J ~@32 Q@2 R@2
  L M S@2 T@2 U@2 V W T@2 ~@32 T@2 U@2 X Y T@4 U@2 V W Z@2
>`.pickRestart({
  A: "~@6 [a4,f#5] ~@8 e5@2 ~ d5@3 b4@2 ~, ~@9 [a4,f#5]@13 ~@2", B: "[f#4,a4,d5] ~@5 [f#4,a4,d5]@16 ~@2",
  C: "~@6 [a4,f#5] ~@8 e5@2 d5@4 b4@2 ~, ~@9 [a4,f#5]@13 ~@2", D: "[a4,d5,f#5] ~@5 [a4,d5,f#5]@16 ~@2",
  E: "~@3 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,b4] ~@2 [d4,f#4,b4] ~@2 [d4,f#4,b4] ~@2 [d4,f#4,b4] ~@2", // D Bm
  F: "[c#4,e4,a4] ~@5 [c#4,e4,a4]@16 ~@2", // A
  G: "~@3 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~@2 [d5,f#5,b5] ~@2 [d5,f#5,b5] ~@2 [d5,f#5,b5] ~@2 [f#5,b5] ~@2, ~@21 d5@2 ~", // D Bm B5
  H: "[c#5,e5,a5] ~@5 [c#5,e5,a5]@16 ~@2", I: "~@7 [a4,f#5] ~@8 e5@2 d5@4 b4@2, ~@10 [a4,f#5]@13 ~",
  J: "~ [f#4,a4,d5] ~@5 [f#4,a4,d5]@16 ~", K: "~ [a4,d5,f#5] ~@5 [a4,d5,f#5]@16 ~",
  L: "~@4 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,b4] ~@2 [d4,f#4,b4] ~@2 [d4,f#4,b4] ~@2 [d4,f#4,b4] ~", // D Bm
  M: "~ [c#4,e4,a4] ~@5 [c#4,e4,a4]@16 ~", // A
  N: "~@4 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~@2 [d5,f#5,b5] ~@2 [d5,f#5,b5] ~@2 [d5,f#5,b5] ~@2 [d5,f#5,b5] ~", // D Bm
  O: "~ [c#5,e5,a5] ~@5 [c#5,e5,a5]@16 ~", P: "~@7 [a4,f#5] ~@8 e5@3 d5@3 b4@2, ~@10 [a4,f#5]@13 ~",
  Q: "[~@8 [a4,f#5] ~@8 e5@2 d5@4 b4@2 d5 [f#4,a4,d5] ~@5 [f#4,a4,d5]@16, ~@11 [a4,f#5]@13 ~@24]/2", // D
  R: "[~@8 [a4,f#5] ~@8 e5@2 d5@4 b4@2 [a4,d5,f#5] ~@5 [a4,d5,f#5]@16 ~, ~@11 [a4,f#5]@13 ~@24]/2", // D
  S: "[~@8 [a4,f#5] ~@8 e5@2 d5@4 b4@2 [f#4,a4,d5] ~@5 [f#4,a4,d5]@16 ~, ~@11 [a4,f#5]@13 ~@24]/2", // D
  T: "[~@8 [a4,f#5] ~@8 e5@2 d5@4 b4@2 ~ [f#4,a4,d5] ~@5 [f#4,a4,d5]@16, ~@11 [a4,f#5]@13 ~@24]/2", // D
  U: "[~@8 [a4,f#5] ~@8 e5@2 d5@4 b4@2 ~ [a4,d5,f#5] ~@5 [a4,d5,f#5]@16, ~@11 [a4,f#5]@13 ~@24]/2", // D
  V: "~@5 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~@2 [d5,f#5,a5] ~@2 [d5,f#5,b5] ~@2 [d5,f#5,b5] ~@2 [d5,f#5,b5] ~@2 [d5,f#5,b5]", // D Bm
  W: "~@2 [c#5,e5,a5] ~@5 [c#5,e5,a5]@16", // A
  X: "~@5 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,a4] ~@2 [d4,f#4,b4] ~@2 [d4,f#4,b4] ~@2 [d4,f#4,b4] ~@2 [d4,f#4,b4]", // D Bm
  Y: "~@2 [c#4,e4,a4] ~@5 [c#4,e4,a4]@16", // A
  Z: "[~@8 [a4,f#5] ~@8 e5@2 d5@4 b4@2 ~ [a4,d5,f#5] ~@5 [a4,d5,f#5] ~@15, ~@11 [a4,f#5]@13 ~@24]/2", // D
})).s("gm_drawbar_organ").gain(0.49).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  x
  [x ~@2 x!2 ~@3]!20
  [~ x ~@8 x ~@2 x ~@10]!134
  [~@2 x ~@5 x ~@2 x ~@2 x ~@9]
  [~ x ~@8 x ~@2 x ~@10]!19
  [~@2 x ~@8 x ~@2 x ~@9]!32
  [~ x ~@2 x ~@7]
>`).gain(0.64)

// drums · clap
const clap = s("cp").struct(`<
  ~
  [~ x ~ x]!20
  [~@7 x ~@11 x ~@4]!134
  [~@9 x ~@10 x ~@3]
  [~@7 x ~@11 x ~@4]!19
  [~@2 x ~@2 x]!32
  [~ x ~@2 x ~@7]
>`).gain(0.57)

// drums · snare
const snare = s("sd").struct("<~ A@20 B@19 C B@114 D B@19 E@32 ~>".pickRestart({
  A: "~ x ~ x", B: "~@7 x ~@11 x ~@4", C: "~@7 x ~@11 x ~@2 x ~", D: "~@5 x", E: "~@2 x ~@2 x",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@8 A ~@15 B ~@15 C ~@7 B ~@7 B ~@15 B ~@7 C ~@7 B ~@15 B ~@7 B ~@23 B ~@7 B ~@7 B ~@15 D ~@7 D ~@7 D ~@7 D ~@15
>`.pickRestart({
  A: "~@6 x!2", B: "~@19 x ~@2 x ~", C: "~@16 x ~@2 x ~@4", D: "~@20 x ~@2 x",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~ A@20 B@131 C B C B@2 C B C@2 B@3 C B@3 C B@5 C@33 ~>".pickRestart({
  A: "x!8", B: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", C: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
})).gain(0.43)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@8 A ~@15 B ~@7 C ~@7 D ~@7 B ~@7 B ~@15 B ~@7 D ~@7 E ~@7 F ~@7 B ~@7 B ~@23 B ~@7 B ~@7 B ~@15 B ~@7 G ~@7 H ~@7 G
  ~@14 I
>`.pickRestart({
  A: "~@3 x ~ x ~@2", B: "~@5 x ~@2 x ~@3", C: "~@16 x ~@2 x ~@2 x ~", D: "~ x ~@2 x ~@5 x ~@13",
  E: "~ x ~@2 x ~@5 x ~@5 x ~@7", F: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", G: "~@11 x ~@5 x ~@6",
  H: "~@12 x ~@4 x ~@6", I: "~ x ~@2 x ~@7",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@8 A ~@15 B ~@23 B ~@7 B ~@15 B ~@31 B ~@7 B ~@23 B ~@7 B ~@7 B ~@15 B ~@7 C ~@7 C ~@7 C ~@15
>`.pickRestart({
  A: "x!2 ~@6", B: "~ x ~@2 x ~@19", C: "~@2 x ~@2 x ~@18",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@207 [~ x ~@2 x ~@7]>").gain(0.71)

stack(bass, epiano2, pad_sweep, drawbar_organ, kick, clap, snare, low_tom, hihat, mid_tom, high_tom, crash)