Strudelify

Paper Cuts

Nirvana

KeyE♭ minorTempo110 bpm
0:00/0:00
// Paper Cuts — Nirvana
// 109.9 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(109.9/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 · overdriven guitar
const overdriven_guitar = note(`<
  ~ A B A C A D A E A F A F A F A F A F A F A F A G H@12 I J I J I J I J K L K L K M@2 N@2 A F A F A F A F A F A F A F A
  G H@12 I J I J I J I J K L K L K M@4 ~
>`.pickRestart({
  A: "[eb2,bb2,eb3]!6 ~ [eb2,bb2,eb3]", B: "[eb2,bb2,eb3]!2 ~@6",
  C: "[eb2,bb2,eb3]@2 [eb2,bb2,eb3]@2 [eb2,bb2,eb3] ~@11", D: "[eb2,bb2,eb3]!2 [e2,b2,e3]@6",
  E: "[eb2,bb2,eb3]!2 ~ [f2,f3] [gb2,gb3] [a2,a3] [f2,f3] [gb2,gb3]", // Eb5 F Gb A F Gb
  F: "[eb2,bb2,eb3]!3 [f2,f3] [gb2,gb3] [a2,a3] [f2,f3] [gb2,gb3]", G: "[eb2,bb2,eb3]!3 ~@5",
  H: "[eb2,bb2,eb3]@2 [g2,d3,g3] [a2,e3,a3]@2 [bb2,f3,bb3] [eb2,bb2,eb3] [g2,d3,g3]", // Eb5 G5 A5 Bb5 Eb5 G5
  I: "[e2,b2,e3] [f2,c3,f3]!2 [gb2,db3,gb3]!2 [g2,d3,g3]!2 [ab2,eb3,ab3]", // E5 F5 Gb5 G5 Ab5
  J: "[bb2,f3,bb3] [a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3]!3", // Bb5 A5
  K: "[g2,d3,g3] [gb2,db3,gb3]!2 [gb2,db3,gb3]@2 [gb2,db3,gb3] [gb2,db3,gb3]@2", // G5 Gb5
  L: "[bb2,f3,bb3] [a2,e3,a3]!2 [a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@2", M: "[[f2,c3,f3]!7 [f2,c3,f3]@9]/2",
  N: "[[f2,c3,f3]!7 [f2,c3,f3]@5 [e2,b2,e3]@4]/2", // F5 E5
})).s("gm_overdriven_guitar").gain(0.64)

// bass · electric bass finger
const bass = note(`<
  ~ A B A C A D A E A F A F A F A F A F A F A F A G H@12 I J I J I J I J K L K L K M@2 N@2 A F A F A F A F A F A F A F A
  G H@12 I J I J I J I J K L K L K M@4 ~
>`.pickRestart({
  A: "eb1!6 ~ eb1", B: "eb1!2 ~@6", C: "eb1@2 eb1@2 eb1 ~@11", D: "eb1!2 e1@6", E: "eb1!2 ~ f1 gb1 a1 f1 gb1",
  F: "eb1!3 f1 gb1 a1 f1 gb1", G: "eb1!3 ~@5", H: "eb1@2 g1 a1@2 bb1 eb1 g1", I: "e1 f1!2 gb1!2 g1!2 ab1",
  J: "bb1 a1!2 a1@2 a1!3", K: "g1 gb1!2 gb1@2 gb1 gb1@2", L: "bb1 a1!2 a1@2 a1 a1@2", M: "[f1!7 f1@9]/2",
  N: "[f1!7 f1@5 e1@4]/2",
})).s("gm_electric_bass_finger").gain(0.64)

// other · guitar harmonics
const guitar_harmonics = note(`<
  A@2 B C D C ~ C E C ~ C ~ C ~ C ~ C ~ C ~ C ~ C F ~@29 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C F ~@30
>`.pickRestart({
  A: "[~ g4@8 ~@5 a4 ~, a4 ~]/2", B: "~@4 g4 a4 f4 ~@9, ~@4 db4@11 ~, ~@5 c5@8 ~@3", C: "~@6 a4 ~",
  D: "~@7 e4 ~@8, ~ f4@3, ~@5 a4@7 ~@4", E: "~@2 a4 ~@5", F: "~@3 a4@5",
})).s("gm_guitar_harmonics").gain(0.64)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@99>").gain(0.64)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A ~@3 B@15 C B@13 D B D B D B D E@5 F ~ F ~ B@15 C B@13 D B D B D B D E@5 F ~ F ~@2
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "x ~@2 x", E: "x", F: "~@2 x ~@2 x ~ x",
})).gain(0.64)

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

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

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

// drums · high tom
const high_tom = s("ht").struct("<~@24 [~@5 x ~@2] ~@44 [~@5 x ~@2] ~@30>").gain(0.64)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@8 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 B C@3 B C@3 B C@3 ~@18 A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 B C@3 B C@3 B C@3 ~@18
>`.pickRestart({
  A: "~@3 x!5", B: "~ x!7", C: "x!8",
})).gain(0.64)

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

More by Nirvana