Strudelify

Frances Farmer Will Have Her Revenge on Seattle

Nirvana

KeyB majorTempo114 bpm
0:00/0:00
// Frances Farmer Will Have Her Revenge on Seattle — Nirvana
// 114 bpm, 4/4, key B 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: Full arrangement: all 122 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Grt 3.
setcpm(114/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.

// chords · acoustic guitar steel · "Grt 2"
const acoustic_guitar_steel = note(`<
  A B ~ C@2 D ~@2 E F G ~@2 E F G ~@2 E F G ~@18 E F G ~@2 E F G ~@2 E F G ~@37 E F G ~@2 E F G ~@2 E F G ~@20
>`.pickRestart({
  A: "~@11 d#3@2 b2@2 ~", B: "~@6 c#3 b2", C: "[~@13 d#3@2 b2@2 ~@13 c#3@2]/2", D: "b2 ~@7", E: "[g#2,d#3]!8",
  F: "[e2,b2]!4 [g2,d3]!4", G: "[e2,b2]!3 e2 [g2,d3]!4",
})).s("gm_acoustic_guitar_steel").gain(0.64)

// chords · distortion guitar · "Grt 3"
const distortion_guitar = note(`<
  ~@7 A ~@4 B ~@3 C D E F G H ~@21 I ~@4 J ~@3 K ~@16 L ~@23 M ~@4 N ~@21 O ~
>`.pickRestart({
  A: "~@7 [f#3,b3] [f#3,b3]@2 ~@6", B: "~@7 [f#3,b3] ~@8", C: "~@7 e2",
  D: "~@7 [f#3,b3] ~@2 [e2,b2]@2 [e2,b2]@2 [f#2,c#3]@2", // B5 E5 F#5
  E: "[g2,d3]@2 [g2,d3]@2 [g#2,d#3]@2 [g#2,d#3]@2 g#2 d#3 b7@2 [g#2,d#3]@2 [g#2,d#3]@2", // G5 G#5
  F: "d#3 b7@7 [g2,d3]@2 [g2,d3]@2 a#7@2 [g2,d3]@2", G: "b7@4 ~@2 [g2,d3] [a2,d3,g3]", H: "~@15 [f#3,b3]",
  I: "~ [b2,f#3,b3] ~ [f#2,b2,f#3,b3]@2 ~@3", J: "~@3 [b2,f#3,b3]!2 ~@3", K: "~ [f#3,b3] ~@6", L: "~ a7",
  M: "~@6 [b2,f#3,b3]@2 [f#2,c#3]!2 ~@6", N: "~@2 f#2@2 ~@2 [f#3,b3]!2 [b2,f#3,b3]@2 ~@6",
  O: "~ [a#2,b2,c3] [c#3,d3,d#3,e3] [f3,f#3,g3] [g#3,a3,a#3] ~@11, a2 ~@7",
})).s("gm_distortion_guitar").gain(0.64)

// chords · distortion guitar · "Grt 4"
const distortion_guitar_2 = note(`<
  ~@6 A B ~@3 C D ~@3 C D ~@3 C E F@2 G@2 H@2 I@2 J@2 K L M N O P ~@3 A B ~@3 A B ~@3 C E F@2 G@2 H@2 I@2 J@2 K L M N O
  Q R@2 S T U R@3 V W X@2 R Y W Z AA AB P ~@3 A B ~@3 A B ~@3 AC AD F@2 G@2 H@2 I@2 J@2 K L M N O P AE ~
>`.pickRestart({
  A: "[b2,f#3,b3]@4 [b2,f#3,b3]@3 [f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [f#3,b3]!2", // B5
  B: "[b2,f#3,b3]@3 [f#3,b3] [b2,f#3,b3]@5 ~ [f#2,c#3]@2 [f#2,c#3]@2 [g2,d3]@2", // B5 F#5 G5
  C: "[b2,f#3,b3]@4 [b2,f#3,b3]@3 [f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2", // B5
  D: "[b2,f#3,b3]@2 [f#3,b3]!2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [f#2,c#3]@2 [f#2,c#3]@2 [g2,d3]@2", // B5 F#5 G5
  E: "[b2,f#3,b3]@3 [f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]@4 [f#2,b2,f#3,b3]@4 [g2,c3,g3,c4]@2", // B5 C5
  F: "[[g#2,c#3,g#3,c#4]@4 [g#2,c#3,g#3,c#4]@3 [g#3,c#4] [g#2,c#3,g#3,c#4]@2 g#2@2 [g#3,c#4]@2 [b2,e3,b3,e4]@4 [e3,b3,e4]@2 [b2,e3,b3,e4]@4 [a2,d3,a3,d4]@2 [a2,d3,a3,d4]@2 [a2,d3]@2 [f#3,b3]@2]/2", // C#5 E5 D5 B5
  G: "[[f#2,b2,f#3,b3]@4 [b2,f#3,b3]@3 [f#3,b3] [b2,f#3,b3]@2 f#2@2 [b2,f#3,b3]@2 ~@2 [b2,f#3,b3]@4 [f#2,b2,f#3,b3]@2 [f#2,b2,f#3,b3]@2 [f#2,b2,f#3,b3]@2 [f#2,b2,f#3,b3]@2 [f#2,b2,f#3,b3]@2 [g2,c3,g3,c4]@2, ~@14 f#2@5 ~@13]/2", // B5 C5
  H: "[[g#2,c#3,g#3,c#4]@4 [g#2,c#3,g#3,c#4]@3 [g#3,c#4] [g#2,c#3,g#3,c#4]@2 g#2@2 [g#3,c#4]@2 [b2,e3,b3,e4]@4 [b3,e4]@2 [b2,e3,b3,e4]@4 [a2,d3,a3,d4]@2 [a2,d3,a3,d4]@2 [a2,d3]@2 [f#3,b3]@2]/2", // C#5 E5 D5 B5
  I: "[[f#2,b2,f#3,b3]@4 [f#2,b2,f#3,b3]@3 [f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 ~@2 [b2,f#3,b3]@4 [f#2,b2,f#3,b3]@2 [f#2,b2,f#3,b3]@2 [f#2,b2,f#3,b3]@2 [f#2,b2,f#3,b3]@2 [f#2,b2,f#3,b3]@2 [g2,c3,g3,c4]@2, ~@14 f#2@5 ~@13]/2", // B5 C5
  J: "[[g#2,c#3,g#3,c#4]@4 [c#3,g#3,c#4]@3 [g#3,c#4] [g#2,c#3,g#3,c#4]@2 g#2@2 [g#3,c#4]@2 [b2,e3,b3,e4]@4 [b3,e4]@2 [b2,e3,b3,e4]@4 [a2,d3,a3,d4]@2 [a2,d3,a3,d4]@2 [a2,d3]@2 [f#2,b2,f#3,b3]@2]/2", // C#5 E5 D5 B5
  K: "[f#2,b2,f#3,b3]@4 [b2,f#3,b3]@3 [f#3,b3] [b2,f#3,b3]@2 [b2,f#3,b3]@2 [f#3,b3]@2 [f3,a#3]@2", // B5 A#5
  L: "[a2,e3,a3]@2 e3 c#4@2 [e3,a3,c#4] a2 a#2", M: "[b2,f#3]@2 f#3 d#4@2 [f#3,b3]!2 [f3,a#3]",
  N: "[a2,e3,a3]@2 e3 c#4@2 [e3,a3] [a2,e3,a3] e2", // A5
  O: "[g2,d3,g3]@3 [b3,g4] [g2,d3,g3,b3,g4]@4 [g3,b3,g4]@2 [b3,g4]@2 [g2,d3,g3]@2 [g2,d3,g3]@2", // G5 Em G Em G5
  P: "[f#2,c#3]!7 [g2,d3]", Q: "[f#2,c#3]!4 ~@2 e3 f3",
  R: "[g#2,d#3,g#3]@4 [g#2,d#3,g#3]@2 e2!2 [e3,b3,e4,g#4]!2 [e3,b3,e4,g#4]@2 [e3,b3,e4,g#4]@2 [a2,d3]@2", // G#5 E D5
  S: "[g#2,d#3,g#3]@4 [g#2,d#3,g#3]@2 e2@2 [e3,b3,e4,g#4] [e3,b3,e4,g#4]@3 [e3,b3,e4,g#4]@2 [a2,d3]@2", // G#5 E D5
  T: "[c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]!4", U: "[c#3,g#3,c#4] [d3,g#3,c#4]!3 d3 c#3 b2 a2",
  V: "[c#3,g#3,c#4]@4 [c#3,g#3,c#4]@3 [g#3,c#4] [c#3,g#3,c#4]@4 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2", // C#5
  W: "[c#3,g#3,c#4] d3 [g#3,c#4] [d3,g#3,c#4]!2 c#3 b2 a2", // C#5 C#
  X: "[g#2,d#3,g#3]@4 [g#2,d#3,g#3]@2 e2!2 [e3,b3,e4] [e3,b3,e4,g#4] [e3,b3,e4,g#4]@2 [e3,b3,e4,g#4]@2 [a2,d3]@2", // G#5 E5 E D5
  Y: "[c#3,g#3,c#4]@4 [c#3,g#3,c#4]@3 [g#3,c#4] [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2 [c#3,g#3,c#4]@2", // C#5
  Z: "[b2,f#3,b3]@2 f#3 d#4@2 b2 [f#3,b3] [f3,a#3]", AA: "[a2,e3]@2 e3 [e3,a3,c#4]@2 [e3,a3,c#4]!2 [a2,d3,g3]",
  AB: "g2@2 [d3,g3,b3,g4] g4@2 [d3,g3,b3] g2 [d3,g3]", // G G5
  AC: "[b2,f#3,b3]@4 [b2,f#3,b3]@2 [f#3,b3]!2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 f#2@2", // B5
  AD: "[b2,f#3,b3] f#2 [b2,f#3,b3] [f#2,b2,f#3,b3]!4 [g2,c3,g3,c4]", AE: "[g#2,d#3] ~@4 b3@3 ~@2 f#2 ~@4 f#2",
})).s("gm_distortion_guitar").gain(0.64)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@6 A B C D@2 A B C D@2 A B C D@2 A E F@2 G@2 F@2 H@2 F@2 I J K L M N C D@2 A B C D@2 A B C D@2 A E F@2 O P F@2 O P
  F@2 I J K L M Q R@3 S T R@3 S T R@3 S T K U M N C D@2 V W C D@2 V W C D@2 V X F@2 O P F@2 O P F@2 I J K L M N Y ~
>`.pickRestart({
  A: "b1@2 b1@2 b1!2 b1@2", B: "b1@4 b1@5 ~ f#1@2 f#1@2 g1@2", C: "g#1!8", D: "e1!4 g1!4", E: "b1@4 b1@5 ~ f#1@4 g1@2",
  F: "[g#1@2 g#1@2 g#1!3 b1@2 b1 b1@2 a1!3 f#1]/2", G: "[f#1@2 f#1@2 f#1!3 f#1@3 f#1!5 g1]/2",
  H: "[f#1@4 f#1@4 f#1@2 f#1@2 f#1@2 f#1@5 ~ f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 g1@2]/2", I: "f#1@2 f#1@2 f#1!3 f1",
  J: "a1@2 a1!5 a#1", K: "b1@2 b1!5 a#1", L: "a1@2 a1!5 e1", M: "g1!8", N: "f#1!7 g1", O: "f#1@2 f#1@2 f#1!4",
  P: "f#1@2 f#1!5 g1", Q: "f#1!4 ~@4", R: "g#1@4 g#1@2 g#1!2 e2!2 e2@2 e2@2 a1@2", S: "c#2@2 c#2@2 c#2!4",
  T: "c#2 d2!4 c#2 b1 a1", U: "a1@2 a1!6", V: "b1@2 b1@2 b1!4", W: "b1@2 b1@2 b1 f#1!2 g1", X: "b1@2 b1@2 f#1!3 g1",
  Y: "g#1 ~@7",
})).s("gm_electric_bass_finger").gain(0.64)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@22 A ~ B ~@3 B ~@3 B ~ C@3 D E ~@12 C ~ A ~ B ~@3 B ~@3 B ~ C@3 D F ~@18 E ~@12 C ~ A ~ B ~@3 B ~@3 B ~ C@3 D E ~@2
>`.pickRestart({
  A: "~@14 x!2", B: "~@4 x!3 ~", C: "~@4 x!2 ~@2", D: "x!2 ~@2 x!2 ~@2", E: "x!8", F: "x!4 ~@4",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A@2 B ~@2 A@2 B ~@2 A@2 B ~@18 A@2 B ~@2 A@2 B ~@2 A@2 B ~@37 A@2 B ~@2 A@2 B ~@2 A@2 B ~@20
>`.pickRestart({
  A: "x!8", B: "x!6 ~@2",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@22 A ~ B ~@3 B ~@3 B ~ C@3 D E ~@12 F ~ A ~ B ~@3 B ~@3 B ~ C@3 D G ~@18 E ~@12 C ~ A ~ B ~@3 B ~@3 B ~ C@3 D E ~@2
>`.pickRestart({
  A: "~@13 x!2 ~", B: "~@3 x", C: "~@5 x ~@2", D: "~ x ~@3 x ~@2", E: "~@2 x!4 ~@2", F: "~ x", G: "~@2 x!2 ~@4",
})).gain(0.64)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@4 A ~@4 A ~@4 A ~ B C A D B C A D B C A@4 B ~@4 A ~@4 A ~@4 A ~ B C A D B C A D B C A@4 B ~ E@3 ~ F E@3 ~ F
  E@3 ~ F A@3 ~@4 A ~@4 A ~@4 A ~ B C A D B C A D B C A@4 B G A ~
>`.pickRestart({
  A: "x", B: "x!4", C: "x ~ x ~ x!3 ~", D: "~@3 x", E: "x ~@2 x ~@4", F: "~ x!2 ~", G: "~@7 x",
})).gain(0.64)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@23 A@16 ~@15 A@15 B A@19 ~@15 A@16 ~@2>".pickRestart({
  A: "x!16", B: "x!7 ~@9",
})).gain(3.24)

stack(
  acoustic_guitar_steel, distortion_guitar, distortion_guitar_2, bass, kick, snare, low_tom, hihat, mid_tom, open_hat,
  crash, ride_bell, cabasa
)

More by Nirvana