Strudelify

Can't Get Enough of You Baby

Smash Mouth

KeyF♯ majorTempo124 bpm
0:00/0:00
// Can't Get Enough of You Baby — Smash Mouth
// 124 bpm, 4/4, key F# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(124/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 · synth bass 1 · "untitled"
const bass = note(`<
  ~ A B C D E@2 F G H I J I K D L I M N M O P M A B E@2 F G H I J I K D L I M N M O P M Q R@2 ~@2 A B C D E@2 F G H I J
  I M N M O P M S A B E@2 F G H I T
>`.pickRestart({
  A: "f#1@4 ~@2 f#1@2 b1@5 ~ b1@2", B: "f#1@5 ~ f#1@2 b1@3 ~ b1@2 c#2@2", C: "f#1@5 ~ f#1@2 b1@6 b1@2",
  D: "f#1@5 ~ f#1@2 b1@3 ~ b1@4", E: "f#1@5 ~ f#1@2 b1@7 ~", F: "f#1@6 f#1@2 b1@5 ~ b1@2", G: "f#1@5 ~ f#1@2 b1@4 b1@4",
  H: "f#1@5 ~ f#1@2 b1@5 ~ b1@2", I: "f#1@6 f#1@2 b1@3 ~ b1@4", J: "f#1@3 f#1 b1@4",
  K: "f#1@6 ~@2 b1@7 ~, ~@7 f#1@2 ~@7", L: "f#1@5 ~ f#1@2 b1@8", M: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~",
  N: "d#2 ~ d#2 ~ d#2 ~ d#2 ~ d#2 ~ d#2 ~ d#2 ~ d#2@2", O: "g#1 ~ g#1 ~ g#1 ~ g#1 ~ a#1 ~ a#1 ~ a#1 ~ a#1 ~",
  P: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", Q: "c#2@2 f#2@2 f2@2 c#2@2 f#2@2 f2@2 c#2@2 f#1 ~", R: "[f#1@23 ~@9]/2",
  S: "c#2@2 f#2@2 f2@2 c#2@2 f#2@2 f2@2 c#2 ~ c#2@2", T: "f#1 ~@7",
})).s("gm_synth_bass_1").gain(0.33)

// chords · drawbar organ
const drawbar_organ = note("<A B C B D ~@4 B E B C ~@10 B C ~@4 B E B C ~@34 F ~ F ~ F ~ F ~@2>".pickRestart({
  A: "~@2 f#5@2 a5@2 b5 ~ c#6@2 b5@2 a5@2 b5@2, ~@8 b5 ~@7",
  B: "[a#5,c#6,e6,f#6] ~ [a#5,c#6,e6,f#6] ~ [a#5,c#6,e6,f#6] ~ [a#5,c#6,e6,f#6] ~ [a5,b5,d#6,f#6] ~ [a5,b5,d#6,f#6]@2 ~@2 [a#5,c#6,e6,f#6]@2", // F#7 B7 F#7
  C: "~@2 [a#5,c#6,e6,f#6] ~ [a#5,c#6,e6,f#6]@2 ~@2 [a5,b5,d#6,f#6] ~ [a5,b5,d#6,f#6] ~ [a5,b5,d#6,f#6]@2 ~@2", // F#7 B7
  D: "~@2 [a#5,c#6,e6,f#6] ~ [a#5,c#6,e6,f#6]@2 ~@2 [a5,b5,d#6,f#6] ~ [a5,b5,c6,d#6,f#6] ~ [a5,b5,d#6,f#6]@2 ~@2", // F#7 B7
  E: "~@2 [a#5,c#6,e6,f#6] ~ d#6 a5 ~@2 [a5,b5,d#6,f#6] f6 [a5,b5,d#6,f#6] ~ [a5,b5,d#6,f#6]@2 ~@2, ~@2 [a#5,c#6,e6,f#6] ~@5", // F#7 B7 F#7
  F: "[f#5,f#6]", // F#
})).s("gm_drawbar_organ").gain(0.22)

// chords · church organ
const church_organ = note("<~@17 A B A C D E ~@14 A B A C D F@2 G@4 ~@12 A B A C D F@2 ~@9>".pickRestart({
  A: "[c#5,g#5]", B: "[d#5,a#5]", C: "[g#5,b5,d#6] [a#5,c#6,f#6]", D: "[b5,d#6,f#6]", E: "[g#5,c#6,g#6]",
  F: "[g#5,c#6,g#6]/2", G: "[f#5,c#6]/4",
})).s("gm_church_organ").gain(0.14)

// chords · rock organ
const rock_organ = note("<~@17 A B A C D E ~@14 A B A C D F@2 G@2 H@2 ~@12 A B A C D F@2 ~@9>".pickRestart({
  A: "[c#5,g#5]", B: "[d#5,a#5]", C: "[g#5,b5,d#6] [a#5,c#6,f#6]", D: "[b5,d#6,f#6]", E: "[g#5,c#6,g#6]",
  F: "[g#5,c#6,g#6]/2", // C#5
  G: "[[f#4,a#4,c#5,e5,f#5]@22 [a#4,f#5] f#4 f#4@2 [b4,c#5,e5,f#5] ~ [b4,c#5,e5,f#5]@2 f#4 ~, ~@11 [c#5,e5] ~@4]/2", // F#7 D#m Bsus4 C#m
  H: "[~@20 f#4@2 ~@4 [b5,c6,d6,e6] [f6,g6,a6,b6,c7,d7,e7] [a6,b6,c7,d7,f7] [a5,b5,c6,d6,e6,f6,g6] [b4,c5,d5,e5,f5,g5] [f4,g4,a4], [c#5,e5,f#5]@23 ~ [a4,b4]@2 a5@2 ~@4, a#4@20 ~@3 f#4@4 ~@5, f#4@18 ~@4 [c#4,a#4]@3 [c#4,c5,d5,e5,f5,g5]@3 ~@4, ~@4 f#3@3 ~]/2", // Cmaj7 Fmaj7 Dm7 Am7 Cmaj7 F F#7 Asus2 …
})).s("gm_rock_organ").gain(0.14)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~ A@6 B@2 C B@2 C@5 ~@6 A@4 B@2 C B@2 C@5 ~@11 A@6 B@2 C B@2 C ~@7 A@4 B@2 C B ~
>`.pickRestart({
  A: "~@2 [f#3,a#3,e4] ~@3 [f#3,a3,d#4] ~", B: "~@4 [f#3,a#3,e4]@2 ~@6 [f#3,a3,d#4] ~@3",
  C: "~@4 [f#3,a#3,e4] ~@7 [f#3,a3,d#4] ~@3", // F#7 D#dim
})).s("gm_overdriven_guitar").gain(0.17)

// chords · rock organ
const rock_organ_2 = note("<~@47 A B@3 C D E F G ~@20>".pickRestart({
  A: "~@10 [c#3,d#3,f3,f#3] [g#3,a#3,b3,c#4] [d#4,f4,f#4,g#4] [a#4,b4,c#5,d#5] [f5,f#5,g#5,a#5] [b5,c#6,d#6]", // D#m7 C#7 Fm7 D#7 F#maj7 B
  B: "[f#6@18 e6 ~ e6@6 c#6 b5 c#6@6 b5 a5 b5@10 a5 f#5, f6 ~@18 c#6@2 ~@27]/3",
  C: "f#5@2 g#5 ~ f#5@8 f5 [b4,c#5,d#5] [f4,f#4,g#4,a#4] d#4, e5 ~@15", D: "~@6 e5 f#5 a5 c#6 e6 ~ f#6@4, ~@9 b5@2 ~@5",
  E: "a6 f#6@3 e6@4", F: "c6 b5 a5 ~ f#6@2 b5 a5 b5 a5 e5 ~ f#5@4, [c#6,f#6]@3 ~ b5 ~@11",
  G: "a5 f#5 a5 f#5 [f#5,a5] a5 f#5 [f#5,a5] a5 f#5 a5 [f#5,a5] f#5 a5 [f#5,a5]!2", // F#m
})).s("gm_rock_organ").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~ A@16 B@6 A@14 B@6 ~@4 C A@12 B@7 A@8 D>".pickRestart({
  A: "x ~@3 x!2 ~ x", B: "~ x ~ x ~ x ~ x", C: "~@5 x ~@2", D: "x",
})).gain(0.42)

// drums · snare
const snare = s("sd").struct("<~ A@16 B@5 C A@14 B@6 C ~@3 D A@12 B@6 C A@8 ~>".pickRestart({
  A: "~@4 x ~@2 x ~@4 x ~@2 x", B: "x!4", C: "x ~ x ~ x ~ x ~ x ~ x ~ x!4", D: "~@12 x ~ x!2",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct("<[x!4] ~@75>").gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@22 [~@3 x!5] ~@20 [~@3 x!5] ~@22 [~@3 x!5] ~@9>").gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<~ A@21 ~ A@20 ~ B@4 A@18 ~ A@8 ~>".pickRestart({
  A: "x!4", B: "x!2",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@23 x ~@24 x ~@18 x ~@8>").gain(0.42)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ A@16 B C@5 A@2 D A@11 B C@5 ~@5 A@12 B C@4 E C A@2 D A@5 ~>".pickRestart({
  A: "x!8", B: "x!3 ~ x ~ x ~", C: "x!4", D: "~ x!7", E: "~ x!3",
})).gain(1.52)

stack(
  bass, drawbar_organ, church_organ, rock_organ, overdriven_guitar, rock_organ_2, kick, snare, hihat, low_tom, open_hat,
  crash, cabasa
)

More by Smash Mouth