Strudelify

Mexican Seafood

Nirvana

KeyA♭ majorTempo170 bpm
0:00/0:00
// Mexican Seafood — Nirvana
// 170 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(170/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~ A@8 B@2 C@2 B@2 C@2 A@10 B@2 C@2 B@2 C@2 A@10 D@2 E@2 D@2 E@2 F G F G F G F G B@2 C@2 B@2 H@2 I@8 J@2 ~
>`.pickRestart({
  A: "[[ab2,eb3,ab3]@4 [ab3,eb4,ab4]@2 [ab2,eb3,ab3]@2 [gb2,db3,gb3]@2 [ab2,eb3,ab3]@2 [gb2,db3,gb3]@2 [f2,c3,f3]@4 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3] [gb2,db3,gb3] [f2,c3,f3]@2 [eb2,bb2,eb3]@4]/2", // Ab5 Gb5 Ab5 Gb5 F5 Gb5 F5 Eb5
  B: "[[ab2,eb3,ab3]@4 [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3]@6 [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3]@3 ~ [gb2,db3,gb3]@4]/2", // Ab5 Gb5
  C: "[[ab2,eb3,ab3]@4 [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3]@6 [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3]@3 ~ [b2,gb3,b3]@4]/2", // Ab5 B5
  D: "[[ab2,eb3,ab3]@4 [f3,c4,f4] [e3,b3,e4] [eb3,bb3,eb4] [ab3,eb4,ab4]@2 [g3,d4,g4] [gb3,db4,gb4]@3 [f3,c4,f4]@3]/2", // Ab5 F5 E5 Eb5 Ab5 G5 Gb5 F5
  E: "[[ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 [f3,c4,f4] [e3,b3,e4] [eb3,bb3,eb4] [ab3,eb4,ab4]@2 [g3,d4,g4] [gb3,db4,gb4]@3 [f3,c4,f4]@3]/2", // Ab5 F5 E5 Eb5 Ab5 G5 Gb5 F5
  F: "[eb2,bb2,eb3] [gb2,db3,gb3] [g2,d3,g3] [eb2,bb2,eb3] [g2,d3,g3] [ab2,eb3,ab3] [a2,e3,a3] [eb2,bb2,eb3]", // Eb5 Gb5 G5 Eb5 G5 Ab5 A5 Eb5
  G: "[eb3,bb3,eb4] [db3,ab3,db4] [bb2,f3,bb3] [a2,e3,a3] [ab2,eb3,ab3] [gb2,db3,gb3] [eb2,bb2,eb3] [db2,ab2,db3]", // Eb5 Db5 Bb5 A5 Ab5 Gb5 Eb5 Db5
  H: "[[ab2,eb3,ab3]@4 [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3]@6 [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3] ~ [ab2,eb3,ab3]@3 ~ [ab2,eb3,ab3]@4]/2", // Ab5
  I: "[[ab2,eb3,ab3]@2 [a2,e3,a3] [ab2,eb3,ab3] [a2,e3,a3] [ab2,eb3,ab3] [a2,e3,a3]@3 [ab2,eb3,ab3] [a2,e3,a3] [ab2,eb3,ab3] [a2,e3,a3]@2 [gb2,db3,gb3]@2]/2", // Ab5 A5 Ab5 A5 Ab5 A5 Ab5 A5 …
  J: "[c3,g3,c4]/2", // C5
})).s("gm_overdriven_guitar").gain(0.64)

// bass · electric bass finger
const bass = note(`<
  ~ A@8 B@2 C@2 B@2 C@2 A@10 B@2 C@2 B@2 C@2 A@10 D@8 E F E F E F E F B@2 C@2 B@2 C@2 G@8 H@2 ~
>`.pickRestart({
  A: "[ab1@4 ab2@2 ab1@2 gb1@2 ab1@2 gb1@2 f1@4 f1@2 f1@2 f1@2 f1 gb1 f1@2 eb1@4]/2",
  B: "[ab1@4 ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1@6 ab1 ~ ab1 ~ ab1 ~ ab1@3 ~ gb1@4]/2",
  C: "[ab1@4 ab1 ~ ab1 ~ ab1 ~ ab1 ~ ab1@6 ab1 ~ ab1 ~ ab1 ~ ab1@3 ~ b1@4]/2", D: "[ab1@3 ab1@4 ab2@3 ab2@6]/2",
  E: "eb2@2 ~ eb2 eb2@2 ~ eb2", F: "bb2!3 a2 ab2 gb2 eb2 db2", G: "[ab1@2 a1 ab1 a1 ab1 a1@3 ab1 a1 ab1 a1@2 gb1@2]/2",
  H: "c2/2",
})).s("gm_electric_bass_finger").gain(0.64)

// other · guitar harmonics
const guitar_harmonics = note("<[~@3 ab4] ~@79>").s("gm_guitar_harmonics").gain(0.64)

// drums · rim
const rim = s("rim").struct("<~@79 x>").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  A B C B D B E B F G H G H G H G H B C B D B E B E B F G H G H G H G H B C B D B E B E B E I J I K I J I K I A I L I A
  I M G H G H G H G H N K N K N K N K O ~@2
>`.pickRestart({
  A: "~@7 x", B: "x ~@3 x!2 ~ x", C: "~ x ~ x!2 ~@3", D: "~@2 x!2 ~@2 x!2 ~@8", E: "~ x ~@2 x!2 ~ x",
  F: "~@2 x!2 ~@2 x!2 ~@2 x!3 ~@3", G: "x ~@2 x!3 ~@2", H: "~ x ~@2 x ~@3", I: "x ~@2 x ~@2 x!2", J: "~ x ~@6",
  K: "~ x ~@2 x!2 ~@2", L: "x!3 ~", M: "~ x ~ x ~ x ~@2", N: "x ~@3 x!2 ~@2", O: "x",
})).gain(0.64)

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

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

// drums · hihat
const hihat = s("hh").struct("<~@53 A ~ A B A ~ A ~@20>".pickRestart({
  A: "~ x!3", B: "x!3 ~",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@38 A ~@15 B ~ C ~ D ~@21>".pickRestart({
  A: "~@10 x!4 ~@2", B: "x!2 ~@2", C: "~@5 x!2 ~", D: "~ x ~@2",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A B A B A C A C A C A C@5 A B A B A C A C A C A C A C@5 A B A B A C A C A C A C A C A C A C ~@3 D ~@3 E A C A C@5
  ~@11
>`.pickRestart({
  A: "~ x!3", B: "x!3 ~", C: "x!4", D: "~ x ~ x ~@4", E: "~@3 x",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@54 [x!2 ~@6] ~@3 [x!2 ~@6] ~@21>").gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~@5 A ~@3 A ~@3 A ~@2
>`.pickRestart({
  A: "x",
})).gain(0.64)

// drums · ride bell
const ride_bell = s("rd").struct("<~@69 [~ x!3] [x!4]!3 [~ x!3] [x!4]!3 ~@3>").gain(0.64)

stack(
  overdriven_guitar, bass, guitar_harmonics, rim, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  ride_bell
)

More by Nirvana