Strudelify
Fire cover art

Valleys Of Neptune

Fire

Jimi Hendrix

KeyD majorTempo156 bpm
0:00/0:00
// Fire — Jimi Hendrix
// 156 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 4 "bass" named as a bass, played on electric bass finger (its rock organ patch is not one)
// note: Full arrangement: all 105 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(156/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass finger · "bass"
const bass = note(`<
  A B C B D E F E F E F E F E F E ~ G H I H G H I H F E F E F E F E F E ~ G H I H G H I H J K L M N O P Q R S R S T S U
  V W X B Y E F E F E F E ~ G H I H G H I H T S T Z I H G H T S T Z G H I H T S T Z G H I H AA
>`.pickRestart({
  A: "~@3 g#3", B: "g3@2 ~@4 f3 g3", C: "d3!2 d3@2 ~@2 g#3@2", D: "d3!2 d3@2 ~ a2 c3 d3", E: "d3 ~@3",
  F: "~@5 a2 c3 d3", G: "d3@2 d3@2 f#2 g2 g#2 a2", H: "a2!2 b2!2 c3!2 c#3!2", I: "d3!4 f#2 g2 g#2 a2",
  J: "[d3,d4] d3 d3@2 d3@2 c4 a3", K: "d3@2 d3 [d3,d4] d3@2 c4 a3", L: "[a#2,c4]@2 c3@2 c3@2 a#3 g3",
  M: "c3@2 c3!2 c3@2 a#3 g3", N: "g3@2 a3!2 a3@4 a3@2 a3@2 a3@4", O: "a3!4", P: "c3!4", Q: "c3!8",
  R: "e3@2 e3@2 g#2 a2 a#2 b2", S: "b2!2 c#3!2 d3!2 d#3!2", T: "e3!4 g#2 a2 a#2 b2", U: "e3@2 e3!2 g#2 a2 a#2 b2",
  V: "b2!2 c#3!2 d3 ~ g#3@2", W: "g3 ~@5 f3 g3", X: "d3!2 ~@2 d3@2 g#3@2", Y: "d3 d3@2 ~@2 a2 c3 d3",
  Z: "b2!2 c#3!2 d3!2 e3!2", AA: "d3",
})).s("gm_electric_bass_finger").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C D E F E F E F E@2 F G ~@2 H I J I J I K E F E F E F E@2 F G ~@2 L H I J I J I K L M N@5 L@2 C O@2 L O P C O
  C@2 Q E F E F E@2 F ~ E O F L R I S I S I R T R T R L C L U L U I U L U V C L U W C@2 ~
>`.pickRestart({
  A: "~@3 x ~ x ~ x", B: "x", C: "x ~@2 x ~ x ~ x", D: "x ~@6 x", E: "x ~@3 x!2 ~ x", F: "x!2 ~ x ~ x ~ x",
  G: "x ~@2 x ~ x ~@2", H: "x ~ x!3 ~@2 x", I: "~ x!7", J: "x!6 ~ x", K: "x!5 ~@2 x", L: "x!8", M: "x ~@2 x!3 ~ x",
  N: "x!2 ~ x!3 ~ x", O: "x ~@2 x!5", P: "~ x!6 ~", Q: "x!5 ~ x!2", R: "x ~@3 x!4", S: "x ~@2 x!2 ~@2 x",
  T: "~ x!4 ~ x!2", U: "x!4 ~ x ~ x", V: "x ~ x!2", W: "x!3 ~ x ~ x ~",
})).gain(0.32)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@2 A ~ B C ~ C ~ C ~ D@2 ~ E ~@4 F ~ F ~@2 C ~ C ~ C ~ D@2 ~ E ~@5 F ~ F ~@3 D G@5 ~ H ~ I J K ~ L ~ I ~ J M C ~ C ~
  D@2 ~@2 C I ~ K ~ N ~ N ~ N ~ O ~ O ~ K J P J Q J ~ J Q J R J K J S J@2 ~
>`.pickRestart({
  A: "~@9 x!2 ~@5", B: "~ x!2 ~@2 x ~ x!2 ~@2 x ~@4", C: "~@7 x ~@8", D: "~@2 x ~@4 x ~ x ~@5 x", E: "~ x ~@6",
  F: "~@11 x ~ x ~@2", G: "~ x ~@5 x ~ x ~@5 x", H: "~ x!3 ~@12", I: "~@2 x ~@4 x ~ x!3 ~@4", J: "~@15 x",
  K: "~ x ~ x ~ x!2 ~@2 x ~@6", L: "~ x ~@2", M: "~ x!2 ~@2 x ~ x ~ x!2 ~@5", N: "~@7 x ~ x!2 ~@2 x ~@2",
  O: "~@7 x ~ x!2 ~@5", P: "~ x!2 ~@2 x ~ x!4 ~@5", Q: "~ x!2 ~@2 x ~ x ~ x!3 ~@4", R: "~@6 x ~@2 x!5 ~@2",
  S: "~ x ~@3 x!2 ~@2 x!2 ~@5",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ A B A C ~@11 D ~@18 D ~@16 C ~@3 C ~@5 A C ~@7 D ~@3 C ~@7 C ~ C ~ C ~ E ~ E ~@3 E ~@3 C ~ F ~@3
>`.pickRestart({
  A: "~@3 x", B: "~@2 x ~@9 x!3 ~", C: "~@12 x!3 ~", D: "~@2 x ~@3 x ~@7 x!2", E: "~ x ~@2", F: "~@13 x!3",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~@51 [x!8] ~@53>").gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A B A C ~@11 A ~@2 D ~ D ~@13 A ~@3 D ~ D ~@10 E ~ F ~ G ~@3 F ~ A H ~@7 A ~ F ~ G ~ I ~ I ~ I ~ J ~ J ~ G ~ K ~ L
  ~@3 L ~ M ~ G ~ N ~@3
>`.pickRestart({
  A: "~ x", B: "~@4 x ~@6 x ~@4", C: "~@3 x ~@6 x ~@5", D: "~@5 x ~@2", E: "~@9 x!3 ~@4", F: "~@13 x!3",
  G: "~@2 x ~@7 x!2 ~@4", H: "~@3 x!2 ~@6 x ~@4", I: "~@14 x!2", J: "~@11 x ~@4", K: "x ~@2 x ~@2 x ~@5 x ~ x ~",
  L: "x ~@2 x ~@2 x ~@5 x!3 ~", M: "~@7 x", N: "~@2 x ~@4 x ~@3 x!2 ~@3",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@15 A ~ B ~@16 A ~@2 B ~@7 C ~@31 D ~ D ~ D ~@23>".pickRestart({
  A: "~ x ~ x", B: "~@3 x!2 ~@3", C: "x!2 ~@2", D: "~@2 x!2 ~@4",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@4 A ~@49 B ~ C ~@3 B ~@2 D ~@9 B ~ C ~ B ~ B ~ B ~ B ~ B ~ C ~@11 C ~@5
>`.pickRestart({
  A: "x ~@3 x ~ x ~@2 x ~@6", B: "~ x", C: "~ x ~@2", D: "x",
})).gain(0.64)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@52 [~@4 x!3 ~@9] ~@36 [~@13 x ~ x] ~@7 [~ x ~@6] ~@7>").gain(0.32)

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

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@23 [~@7 x] ~@19 [~@7 x] ~@61>").gain(0.32)

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

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~@5 A B A B A B C@2 B@2 ~@3 A D A D A B A B A B A B C@2 B@2 ~@2 B ~ A D A D A B@2 ~@8 B E A ~ A F B E B ~@2 A B A B
  C@2 B ~ A E B ~ G ~ H ~ H ~ G ~ G ~ G ~ A ~ G ~ G A G ~ G ~ A ~ G ~ A@2 ~
>`.pickRestart({
  A: "~ x", B: "x!2", C: "x ~@3 x!2 ~ x", D: "x ~@2 x!2 ~@3", E: "x", F: "~ x!2 ~@5", G: "~@4 x ~@2 x", H: "~@3 x ~@4",
})).gain(0.32)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@45 [~@3 x!5] [x!7 ~]!5 ~@54>").gain(2.04)

stack(
  bass, kick, snare, snare_soft, low_tom, hihat, mid_tom, open_hat, high_tom, high_tom_soft, crash, crash_soft, ride,
  ride_soft, agogo_bells
)

More by Jimi Hendrix