Strudelify

Always With Me, Always With You

Joe Satriani

KeyB majorTempo67 bpm
0:00/0:00
// Always With Me, Always With You — Joe Satriani
// 67 bpm, 6/8, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: bank select 127 on channels 2, 4 is ignored: the parts fit General MIDI, not the Roland MT-32 map it names
// note: Full arrangement: all 75 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(67/3)

// 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.

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@2 A B A B A B C D A B A B A B C E A B A B A B C E A B A B A B F G F G H A B A B A B C E A B A B A B C D I J I J I J
  K L A B A B A B C E M N O@2 P@2
>`.pickRestart({
  A: "b1@3 ~ b2@3 ~", B: "e1@3 ~ f#1@3 ~", C: "g#1@3 ~ e1@3 ~", D: "f#1@9 ~@3 f#2@5 ~ f#1 ~ g#1@2 f#1 ~",
  E: "f#1@9 ~@3 f#2@5 ~ f#1@2 g#1@2 f#1 ~", F: "g1@3 ~ e1@3 ~", G: "f#1@3 ~ f#2@3 ~",
  H: "f#1@9 ~@3 f#2@5 ~ f#2@2 g#2@2 f#2 ~", I: "b1@3 g#1@2 f#1 b1@2 d#2@2 f#2@2", J: "e1@3 g#1@2 b1 f#1@2 a#1@2 c#2@2",
  K: "g#1 e1", L: "f#1@6 ~ g#1 b1 c#2 d#2 c#2, ~ f#1", M: "b1", N: "e1", O: "[b1@15 ~]/2", P: "[b1@3 ~]/2",
})).s("gm_fretless_bass").gain(0.39)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<~@26 A ~ A ~ A ~ B C B D C E ~@23 E ~@3 E ~@3 E ~@3 E ~>".pickRestart({
  A: "~ [f#3,c#4]@15 ~@8, [d4,f#4]@2 ~", B: "~ a3 b3 d4 b3 a3 ~ f#3 g3 b3 g3 f#3",
  C: "~ e3 a#3 c#4 a#3 e3 ~ e3 a#3 c#4 a#3 e3", D: "~ e3 b3 c#4 b3 e3 ~ e3 b3 c#4 b3 e3", E: "[b3,f#4] ~",
})).s("gm_electric_guitar_clean").gain(0.3).pan(0.2)

// drums · clap
const clap = s("cp").struct("<~@2 [~ x]!73>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@37 A ~@23 A ~@3 A ~@3 A ~ A ~ A ~>".pickRestart({
  A: "x",
})).gain(0.24)

// drums · shaker
const shaker = s("sh").struct("<[x!6]!2 [x!12]!72 [x!7 ~@5]>").gain(0.24)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<[~ x ~ x ~ x ~ x ~ x ~ x]!74 [~ x ~ x ~ x ~@6]>").gain(0.12)

stack(bass, electric_guitar_clean, clap, crash, shaker, shaker_soft)

More by Joe Satriani