Strudelify

Radio Friendly Unit Shifter

Nirvana

KeyA minorTempo154 bpm
0:00/0:00
// Radio Friendly Unit Shifter — Nirvana
// 154 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: duplicate parts dropped: ch 4 "KDC-Guitar 2" overdriven guitar (copy of ch 1 "KDC-Guitar 1" overdriven guitar)
// note: Full arrangement: all 187 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(154/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 · "KDC-Guitar 1"
const overdriven_guitar = note(`<
  A@3 B C D E F@2 G H I J K L M N O P@2 Q R S T U T U T U T U V@4 W@3 X@2 Y Z AA AB AC AD AE T U T U T U T U AF@4 AG AH
  AI AJ AK AL AM AN AO AM AI AP T U T U T U T U AQ AR AS AT AQ AU AS AT AQ AU AS AT AV AW T U T U T U T U AX AY AZ BA
  BB@2 BC@2 BD BE BF BG BD BE BH BI T U T U T U T U T U T U T U T U BJ@2 ~ BK@2 BL@2 BM BN@2 BO BP BQ BR BS@2 BT@2 BU BV
  BW BX BW BY BZ CA CB CC CD CE CF CG CH CI CJ CK CL CM CN CO CP CQ CR CS CT ~ CU CV ~@6
>`.pickRestart({
  A: "[~@6 a#5@4 a5@4 b5@4 a5@4 b5@3 a5@4 b5 ~ a#5@2 a5 ~ a5 ~ c6@4 a5@4 b5@3, ~@6 a5 ~@24 a5 ~@16]/3",
  B: "~ a5@4 b5@4 a5@4 b5 a#5@2, ~@14 a5 ~", C: "a5 ~ a5 ~ c6@4 a5@4 b5@4", D: "a5 e6 d6 e6, ~@4 d6 ~@11",
  E: "d6@3 [b5,e6]@4 [a5,d6]@4 [b5,e6] ~ e6@2 d6, ~@3 [a5,d6] ~@9 d6 ~@2", // E5 D5 E5 D5
  F: "[~ d6 ~ e6@4 d6@4 e6@4 d6@4 [b5,e6]@4 [a5,d6]@3 [b5,e6] ~ e6@2 d6 ~, ~@19 [a5,d6] ~@8 d6 ~@3]/2", // E5 D5 E5 D5
  G: "d6 ~ e6@4 d6@2 d6@2 e6@4 d6@2", H: "a5@2 b5@4 a5@2 d6@2 f6@5 ~", I: "c#4 d4@4 c#4@4 d4@4 c#4@3",
  J: "~ d4@4 c#4@4 d4@4 c#4@3", K: "~ d4@4 c#4@3 d4@4 c#4@4", L: "d4 c#4 d4 c#4", M: "d4@3 ~ [a4,c5] ~ a#5@7 ~@3",
  N: "[g3,c4] ~@3 [g3,c4] ~@3 [g3,c4] ~@3 a4 ~ [c4,f4] ~", O: "[c4,f4] ~@3 [c4,f4] ~@3 [c4,f4] ~@3 [c4,f4] ~@2 [d3,f4]",
  P: "[a4,d5] ~@3 [a4,d5] ~@3 [a4,d5] ~@3 [a4,d5] ~@3", Q: "[a4,d5] ~@3 [a4,d5] ~@3 [a4,d5] ~@3 [a4,d5] ~ [a4,d5]!2",
  R: "[a4,d5] ~@3 [a4,d5] ~@3 [a4,d5] ~@3 [a3,d4] ~ a3!2", S: "a3 ~ a3 ~ d5 b4 e5 b4 e5 ~ a3 ~ e4@3 ~",
  T: "[a3,e4,a4] ~ [a3,e4,a4] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ a3 ~ [g3,d4,g4] ~ [g3,d4,g4] ~ d3 ~", // A5 C5 G5
  U: "[b3,f#4,b4] ~ [b3,f#4,b4] ~ a3 ~ [f#3,c#4,f#4]@3 ~ e3 ~ [f#3,c#4] ~ e3 ~", V: "[a3@59 ~@5]/4",
  W: "[~ [e5,a5,c6]@5 ~ e5@3 ~ [g#3,d#4], ~ a3@9 ~@2]/3", X: "[a#3,f4] [g#3,d#4] [a#3,f4] [g#3,d#4]",
  Y: "[a#3,f4]@4 [g#3,d#4]@4 [a#3,f4]@4 ~@2 g#4 ~, ~@3 [g#3,d#4]", Z: "a4 g#4 a4 g#4", AA: "a4 g#4 a#4 g#4",
  AB: "a#4 g#4 a#4 g#4", AC: "a#4@2 g#4 a#4@2 ~@2 a#4, ~@5 g#4@3", AD: "~@2 g#4@4 a#4@4 g#4@3 ~ g#4 ~",
  AE: "a#4 ~ g#4@4 a4@4 ~@2 [a3,d4,g4]@3 ~", AF: "[~@8 e4@51 ~@5, a3@59 ~@5]/4", AG: "~@2 [g#3,d#4] [a#3,f4]",
  AH: "[g#3,d#4] [a#3,f4] [g#3,d#4] [a#3,f4]", AI: "g#4 a4 g#4 a4", AJ: "g#4 a4 g#4 a#4", AK: "g#4 a#4 b5 c6",
  AL: "b5 c6 b5 c#6", AM: "b5 c#6 b5 c#6", AN: "b5 ~@5 [g5,c6] ~ [f5,b5]@4 [g5,c6]@4",
  AO: "[f#5,b5] [g5,c6] [f#5,b5] [g5,c#6]", AP: "g#4@4 e4@4 d#6 c6 d#6 ~ [a3,d4,g4] ~@3",
  AQ: "[c4,g4,c5]@3 ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~ [c4,g4,c5] ~", // C5
  AR: "[e4,b4,e5] ~ [e4,b4,e5] ~ [e4,b4,e5] ~ [b4,e5] ~ [d4,e4,b4,e5] ~ [e4,b4,e5] ~ [b4,e5] ~ d4 ~", // E5 E7 E5
  AS: "[a3,e4,a4]@3 ~ [a3,e4,a4]@3 ~ [a3,e4,a4] ~ [a3,e4,a4] ~ [a3,e4,a4] ~ g#3 ~", // A5
  AT: "[g3,d4,g4]@3 ~ [g3,d4,g4] ~ [g3,d4,g4] ~ [g3,d4,g4] ~ [g3,d4,g4] ~ [g3,d4,g4] ~ [g3,d4,g4] ~", // G5
  AU: "[d#4,e4,b4,e5] ~ [d#4,a#4,d#5] ~ [d#4,a#4,d#5] ~ [d#4,a#4,d#5] ~ [e4,b4,e5] ~ [e4,b4,e5] ~ [b4,e5] ~ d4 ~", // Emaj7 D#5 E5
  AV: "[c4,g4,c5]@3 ~ [c4,g4,c5]!8 [c4,g4,c5]@3 ~", AW: "[e4,b4,e5]@3 ~ [e4,b4,e5,g5] ~ [e4,b4,e5,g5] ~ a4@3 ~ g#4@3 ~",
  AX: "a3@3 ~ d5@3 ~ [g5,c6]@5 ~@3", AY: "d5@9 ~ g5!2 g5@3 ~", AZ: "g5 ~ d5 ~ d5@3 ~ d5 ~ d5@4 ~@2", BA: "d5 ~ d5 ~@13",
  BB: "[[d5,g5,c6]@27 ~@5, a4]/2", BC: "[f4,a#4] [e4,a4] [f4,a#4] [e4,a4]", BD: "c6 b5 c6 b5", BE: "c#6 b5 c#6 b5",
  BF: "a#3 a3 a#3 a3", BG: "a#3 g#3 a#3 g#3", BH: "c6@2 b5@2 [g5,c6]@2 [f5,b5] g#3",
  BI: "a3@4 g#3@4 a#4@3 ~ [a3,d4] ~ [a3,d4] ~", BJ: "[[a3,e4,a4] ~@3 a5 ~ a5@21 ~@5]/2",
  BK: "[[g5,c6] [a5,d6]@2 [g5,c6]@2 [a5,d6]@2 [g5,c6]@2 [a5,d6]@2 [g5,c6]@2 [a5,d6]@2 [g5,c6]]/2", // C5 D5 C5 D5 C5 D5 C5 D5 …
  BL: "[[g#5,c#6] [a#5,d#6]@2 [g#5,c#6]@2 [a#5,d#6]@2 [g#5,c#6]@2 [a#5,d#6]@2 [g#5,c#6]@2 [a#5,d#6]@2 [g#5,c#6]]/2", // C#5 D#5 C#5 D#5 C#5 D#5 C#5 D#5 …
  BM: "[c6,f6]@4 [c#6,f#6]@2 [c6,f6]@5 ~ [d6,g6]@4", BN: "[c6,f6] [d6,g6] [c6,f6] [d6,g6]", BO: "g#4 a#4 g#4 a#4",
  BP: "g#4@4 a#4@4 g#4@4 g#4 ~@2 [g#4,a#4]", BQ: "g#4@2 a#4!2 g#4@2 a#4!2", BR: "g#4@4 a#4@2 a#4@2 g#4@4 [e4,a4]@3 ~",
  BS: "[f#3@4 g#3@4 f#3@4 g#3@2 e3@5 ~ f3@4 e3@5 ~@3]/2",
  BT: "[c3@5 ~ c#3 ~ c#3@2 b2@4 c#3@4 b2@4 c3@4 b2@4 c3@2, ~@8 e3 ~@23]/2", BU: "~@4 a#2@4 b2@2 b2@2 a#2@3 ~",
  BV: "b2@2 b2@2 a#2@4 b2@4 a#2@2 b2 ~", BW: "b2 a#2 b2 a#2", BX: "b2@2 a#2@2 b2!2 a#2@2",
  BY: "b2 ~ [b2,a3] ~@3 a#2@2 b2@4 a#2@4", BZ: "b2@4 a#2 ~ a#5 ~ b5@4 a#5@4", CA: "b5@4 a#5@4 b5@2 e6@2 d#6@2 d#6 ~",
  CB: "e6@4 d#6@3 ~ f6@4 d#6@4", CC: "~@2 f#5@2 f5@4 f#5@2 g6 ~ d#6@4", CD: "a#5@3 ~ c#6@2 a5 ~ a5@3 ~ a#5@3 ~",
  CE: "e5@3 ~ c#6@3 ~ g5 ~ d#5 ~ [d#5,g5] ~ [d5,f#5] ~", // D# D
  CF: "[c#5,f5] ~ d5 ~ f#5 ~ [c#5,f5] ~ [c5,e5] ~ [c#5,f5] ~ [c#5,f5] ~ b5 ~", // C# C C#
  CG: "e6 ~ a#5 ~ d#6 ~ a6 ~ a6 ~ a#6 ~ b6@3 ~", CH: "e6 ~ f6 ~ f6@3 ~ f6 ~ e4 ~ g4 ~@3",
  CI: "d4@3 ~ f4@3 ~ g4 ~ f4 ~ d6 ~ d6 ~", CJ: "a6 ~ b6@3 ~ b6 ~ a6 ~ e6@3 ~ f6 ~",
  CK: "e5@3 ~ [g4,d5] ~ e4@4 ~@2 f4 ~@3", CL: "g6 ~ e6@3 ~ a6@3 ~ g6 ~ a6@3 ~", CM: "e6 ~ a#5 ~ e5@3 ~ e4@3 ~@2 f4 ~@2",
  CN: "~@2 d#6@3 ~ b6@3 ~ a6 ~ d#6 ~ e6 ~", CO: "b5 ~ a#5 ~ e5 ~ c#5 ~ c#5 ~ c5 ~ d#5 ~ g6 ~",
  CP: "d#6 ~ d6 ~ a6 ~ a#6 ~ a#6 ~ e6 ~ e6 ~ e6 ~", CQ: "f6 ~ a#5 ~ a5 ~ e5 ~ g5 ~ e5 ~ d5 ~@3",
  CR: "~@2 a6 ~ a6 ~ a#6 ~ b6 ~ b6 ~ a6 ~ d#6 ~", CS: "a#5@3 ~ a5 ~ g4 ~ f#4 ~ d4 ~ f#5@3 ~", CT: "e5@5 ~@11",
  CU: "~@2 a3@4 ~@2 b2 ~@3 b2@4, ~@2 e4 ~@13", CV: "~@2 g#4 ~ b2@5 ~@7",
})).s("gm_overdriven_guitar").gain(0.41)

// bass · electric bass finger · "KAN-Bass"
const bass = note(`<
  ~@15 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B C D E F C D E F C D E F C D A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B G@6
>`.pickRestart({
  A: "a1 ~ a1 ~ c2@3 ~ a1 ~ g1@4 ~@2", B: "b1 ~ b1 ~ e1 ~ f#1@3 ~ e1 ~ f#1 ~ e1 ~",
  C: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ b1 ~ c2 ~", D: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  E: "a1@3 ~ a1@3 ~ a1!3 ~ a1@3 ~", F: "g1 ~ g1 ~ g1 ~ g1!3 ~ g1 ~ g1@3 ~", G: "[a6@23 ~]/6",
})).s("gm_electric_bass_finger").gain(0.41)

// other · piano · "KDC-Noise"
const piano = note(`<
  ~@16 A B@5 C ~@12 D E F G H ~ H ~@3 I J ~@14 K ~ L M N O P Q R S ~@37 T U V@2 W X W Y Z ~@16 AA AB@2 AC AD AE AF AG AH
  AI AJ AK AJ AK AL ~ AK AJ AL ~ AJ U AJ AL ~@2 AM ~ AN AO AP AI AQ AK@7 AR AS@5 AT AU AV AW AX AY AZ ~
>`.pickRestart({
  A: "c4 ~ c4 ~ c4 ~@5 c4 ~ c4 ~ c4 ~", B: "c4 ~ c4 ~ c4 ~@5 c4 ~ c4 ~@3", C: "c4 ~ c4 ~ c4 ~ c4 ~ c4@3 ~ c4@3 ~",
  D: "~@9 a4 ~@6", E: "a4 ~@15", F: "a4 ~ a4 ~ a4 ~@11", G: "~@4 a6@5 ~@7", H: "a4 ~ a4 ~ a4 ~ a4 ~ a4 ~@7",
  I: "a4@2 a4 ~ a4 ~ a4 ~ a4 ~ a4@3 ~@3", J: "~@4 a4@3 ~ a4@3 ~@5", K: "~@6 a6 ~@9",
  L: "a5 ~ a5 ~ a5 ~ a5 ~ a5 ~ a5 ~ a5 ~ a5 ~", M: "a5 ~@15", N: "a5 ~ a5 ~ a5 ~ a5 ~ a5 ~ a5 ~ a5 ~@3",
  O: "a5 ~@3 a5 ~@11", P: "a5 ~ a5 ~ a5 ~ a5 ~ a5 ~@7", Q: "a5 ~ a5 ~ a5 ~@3 a5 ~@7",
  R: "a5 ~ a5 ~@3 a5 ~ a5@3 ~ a5@3 ~", S: "a5@3 ~ a5@3 ~ a5@3 ~ a5@3 ~", T: "~@8 a6 ~@7",
  U: "a6 ~@3 a6 ~@3 a6 ~ a6 ~ a6 ~ a6 ~", V: "a6 ~@3 a6 ~@3 a6 ~@3 a6 ~@3", W: "a6 ~ a6 ~ a6 ~@3 a6 ~ a6 ~ a6 ~ a6 ~",
  X: "a6 ~ a6 ~ a6 ~@3 a6 ~@3 a6 ~@3", Y: "a6 ~@3 a6 ~ a6!3 ~@3 a6 ~@3", Z: "a6 ~ a6 ~ a6 ~@3 a6@3 ~ a6@2 a6 ~",
  AA: "a6@3 ~ a6@3 ~@3 a6@4 ~@2", AB: "~@4 a6 ~ a6 ~@5 a6@3 ~", AC: "~@4 a6@3 ~@3 a6 ~ a6@3 ~",
  AD: "~@4 a6@3 ~@5 a6 ~@3", AE: "~@4 a6 ~ a6 ~@5 a6 ~@3", AF: "~@4 a6 ~@7 a6 ~@3", AG: "~@4 a6 ~@8 a6 ~@2",
  AH: "~@4 a6 ~@8 a6@2 ~", AI: "~@2 a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~", AJ: "a6 ~ a6 ~ a6 ~@5 a6 ~ a6 ~ a6 ~",
  AK: "a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~", AL: "a6 ~@3 a6 ~@11", AM: "~@2 a6 ~ a6 ~ a6 ~ a6 ~@7",
  AN: "a6 ~ a6 ~ a6 ~@11", AO: "a6 ~@3 a6 ~ a6 ~ a6 ~@7", AP: "~@2 a6 ~ a6 ~ a6 ~ a6 ~ a6 ~ a6 ~@3",
  AQ: "a6 ~ a6 ~ a6 ~ a6 ~ a6 ~@3 a6 ~ a6 ~", AR: "a6 ~ a6 ~ a6 ~ a6 ~ a6@3 ~ a6@3 ~",
  AS: "a6@3 ~ a6@3 ~ a6@3 ~ a6@3 ~", AT: "a6@3 ~ a6@3 ~ a6 ~ a6 ~ a6@3 ~", AU: "a6@3 ~@9 a6 ~@3",
  AV: "~@6 d7 ~ f7 ~@3 c7@3 ~", AW: "~ d#7@3 ~@3 a6 ~ b6@3 ~@2 a6@2", AX: "f6@2 ~ g#6@4 f#6@5 g#6@4",
  AY: "~ f#6@5 g#6@5 f#6@5", AZ: "~ g6@5 f#6@6 ~@4",
})).s("gm_piano").gain(0.41)

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

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@15 A@31 B A@32 ~@14 A@72 ~@12 A@4 ~@6>".pickRestart({
  A: "x!4", B: "x!2 ~@2",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@79 [x!4]!14 ~@94>").gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~@45 [~@3 x] [x!4] ~@118 [x!4]!12 ~@10>").gain(0.41)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@15 A@9 ~ A ~ A ~ A ~ A ~@15 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@15 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@7 A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~@55
>`.pickRestart({
  A: "x",
})).gain(0.41)

stack(overdriven_guitar, bass, piano, kick, snare, pedal_hat, mid_tom, open_hat, ride_bell)

More by Nirvana