Strudelify

You Can Run

Jeremy Jackson

KeyE majorTempo103 bpm
0:00/0:00
// You Can Run — Jeremy Jackson
// 103 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "SYN BASS 2" synth bass 2 (copy of ch 8 "SYN BASS 2" synth bass 2); ch 5 "CHURCH ORG" church organ (copy of ch 6 "WARM PAD" pad warm)
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(103/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 · piano · "A.PIANO 3"
const piano = note(`<
  ~@4 A B A B A B A B C D C D C D C D E@2 F@2 G@2 A B A B A B A B C D C D C D C D E@2 F@2 G@2 A B A B A B A B ~@7 H C D
  C D E@2 F@2 G@2 A B A B A B A I A B A B A B A B A B A B A B A J
>`.pickRestart({
  A: "e3!2 [b3,e4] e3!2 [b3,e4] ~ e3 [b3,d4] ~ e3 [b3,e4] e3!2 [b3,e4] e3", // E5 Bm E5
  B: "d3!2 [a3,e4] d3!2 [a3,d4] ~ d3 [a3,e4] ~ a2 [a3,e4] a2!2 [a3,e4] a2", // A5 D5 A5
  C: "e3!2 [b3,e4] e3!2 [b3,e4] ~ e3 [b3,e4] ~ e3 [b3,e4] e3!2 [b3,e4] e3", // E5
  D: "e3!2 [a3,d4] e3!2 [a3,d4] ~ e3 [a3,c#4] ~ e3 [a3,c#4] e3!2 [a3,c#4] e3", // D5 A
  E: "[b3!2 ~ b3!2 ~@2 b3 ~@2 b3 ~ b3!2 ~ b3 b3!2 ~ b3!2 ~@2 b3 ~@2 b3 ~ b3!2 ~ b3, [d#4,f#4,b4,d#5]@5 ~ [d#4,f#4,b4,d#5] [c#4,e4,a4,c#5]@8 ~]/2", // B A
  F: "b3!2 ~ b3!2 ~@2 b3 ~@2 b3 ~ b3!2 ~ b3, [e4,g#4,b4,e5]@7 ~ [e4,a4,b4,c#5,e5]@7 ~", // E A
  G: "[b3!2 ~ b3!2 ~@2 b3 ~@2 b3 ~ b3!2 ~ b3 ~@15 d3, [d#4,f#4,b4,d#5]@5 ~ [d#4,f#4,b4,d#5] [c#4,e4,a4,c#5]@8 ~]/2", // B A
  H: "~@10 e3 [a3,c#4] ~ e3 [a3,c#4] ~", I: "d3!2 [a3,e4] d3!2 [a3,d4] ~ d3 [a3,e4] ~ a3 [a3,e4] ~ a3 [a3,e4] ~",
  J: "d3!2 [a3,e4] d3!2 [a3,d4] ~@10", // A5 D5
})).s("gm_piano").gain(0.42)

// chords · piano · "A.PIANO 3" · soft notes
const piano_soft = note(`<
  ~@4 A B A B A B A B A@8 C@5 ~ A B A B A B A B A@8 C@5 ~ A B A B A B A B ~@8 A@4 C@5 ~ A B A B A B A D A B A B A B A B
  A B A B A B A D
>`.pickRestart({
  A: "~@6 e3 ~@2 e3 ~@6", B: "~@6 d3 ~@2 a2 ~@6", C: "~@6 b3 ~@2 b3 ~@6", D: "~@6 d3 ~@9",
})).s("gm_piano").gain(0.24)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@5 A B ~@2 A B ~@8 C@2 D E@2 F@2 G H G I G H G I ~@7 C@2 D E@2 F@2 G H G I G H G J ~@8 K L M N@2 D E@2 F@2 G H G I G
  H G O G H G I G H G J G H G I G H G P
>`.pickRestart({
  A: "~@10 [a3,e4,a4]!6", B: "[e2,e3,b3,e4]",
  C: "[~@16 b3@2 b3!2 [d#4,f#4]@2 b3!2 [d#4,f#4]@2 b3!2 [d#4,f#4]@2 [f#3,b3]@2, ~@15 b2@16 ~, ~@15 f#3@14 ~@3]/2", // D#m B5
  D: "b3@2 b3!2 [b3,e4]@2 b3!2 [b3,e4]@2 b3!2 [b3,e4]@2 b3!2, [a2,e3]", // E5 A5
  E: "[b3,e4,b4,e5]@2 e4!2 [b3,e4,b4,e5]@2 e4!2 [b3,e4,b4,e5]!2 e4!2 [b3,e4,b4,e5]@2 e4!2", // E5
  F: "[[b2,f#3,b3]@6 [f#3,b3] [a2,e3,b3]@7 ~@2]/2", G: "[e3,b3,e4]", H: "[d3,a3,e4]@8 ~@2 [a3,e4,a4]!4 ~ [a3,e4,a4]",
  I: "[d3,a3,e4]@8 [a3,e4,a4]!4 [c#4,e4,a4] [d4,e4,a4] [c#4,e4,a4] [e4,a4]", // Dsus2 A5 A Dsus2 A A5
  J: "[d3,a3,e4]@2 ~@2 [d3,a3,e4]@2 ~ [a3,b3,e4]!8 [b3,e4]", K: "e3@15 ~", L: "d3@6 c#3 d3 c#3@4 e3@4",
  M: "e2@6 g#3 a3 b3@2 f#3 g3 g#3@4",
  N: "[e2 ~@2 d3 ~@2 b2 c3 c#3@4 a2@3 ~ b3@2 b3!2 [d#4,f#4]@2 b3!2 [d#4,f#4]@2 b3!2 [d#4,f#4]@2 [f#3,b3]@2, ~@15 b2@16 ~, ~@15 f#3@14 ~@3]/2", // D#m B5
  O: "[d3,a3,e4] ~", P: "[d3,a3,e4]@2 ~@2 [d3,a3,e4]@2 ~ [a3,b3,e4]!8 ~",
})).s("gm_distortion_guitar").gain(0.35).pan(0.3)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  ~@4 A B A B A B A B ~@8 C D E@2 C F A B A B A B A B ~@8 C D E@2 C F A B A B A B A B ~@8 A B A B C D E@2 C F A B A B A
  B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "[e5,b5,e6]", B: "[f#5,a5,d6] [e5,a5,c#6]", C: "[f#5,b5,d#6]", D: "[e5,a5,c#6]", E: "[e5,g#5,b5] [e5,a5,c#6]",
  F: "[e5,a5,c#6] ~", // A
})).s("gm_pad_warm").gain(0.22)

// other · orchestra hit · "ORCH.HIT"
const orchestra_hit = note(`<
  A B A B C ~@9 D ~@3 D ~@6 A C ~@9 D ~@3 D ~@6 A C ~@7 A B A B ~@13 A C ~@7 C ~@7 C ~@7
>`.pickRestart({
  A: "e5 ~@3 e5 ~@2 d5 ~@2 e5 ~@3 e5 ~", B: "a4 ~@3 a4 ~@2 d5 ~@2 d5 ~@3 d5 ~", C: "e5 ~@15",
  D: "~@4 e5 ~ e5 ~@5 e5 ~ e5 ~",
})).s("gm_orchestra_hit").gain(0.64)

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@4 A B A B A B A B A B A B A B A B C D E@2 C F A B A B A B A B A B A B A B A B C D E@2 C F A B A B A B A B ~@4 A B A
  B A B A B C D E@2 C F A B A B A B A G A B A B A B A B A B A B A B A H
>`.pickRestart({
  A: "e2!16", B: "d2!8 a1!8", C: "b1!16", D: "a1!16", E: "g#1!8 a1!8", F: "a1@2 ~@2 a1@2 ~ e2@2 ~ a1@2 ~@2 d2!2",
  G: "d2!8 ~@8", H: "d2!8 a1!7 ~",
})).s("gm_synth_bass_2").gain(0.52).pan(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@2
  [x ~ x ~@4 x ~@2 x ~@5]!54
  ~@2
  [x ~ x ~@4 x ~@2 x ~@5]!23
  [x ~ x ~@4 x ~@8]
  [x ~ x ~@4 x ~@2 x ~@5]!16
>`).gain(0.56)

// drums · clap
const clap = s("cp").struct("<~@2 [~ x ~ x]!54 ~@2 [~ x ~ x]!23 [~ x ~@2] [~ x ~ x]!16>").gain(0.56)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@2 A ~ B ~ B ~ B ~ B ~ B ~ B@3 ~ B ~ B ~ B@3 ~ B ~ B ~ B ~ B ~ B ~ B@3 ~ B ~ B ~ B@3 ~ B ~ B ~ B ~ B ~@3 A ~ B ~ B ~
  B ~ B ~ B ~ B@3 ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "~@15 x", B: "~@7 x",
})).gain(0.16)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@2 A@18 B@6 A@16 B@6 A@8 ~@2 A@10 B@6 A@7 ~ A@16>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x",
})).gain(0.16)

// drums · open hat
const open_hat = s("oh").struct("<~@2 A@18 B@6 A@16 B@6 A@8 ~@2 A@10 B@6 A@7 ~ A@16>".pickRestart({
  A: "~@9 x ~@6", B: "~@13 x ~@2",
})).gain(0.56)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@2 A@23 B A@21 B A@8 ~@2 A@15 B A@7 C A@16>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@4 x!2 ~ x", C: "~ x ~ x ~@4",
})).gain(0.48)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@2 A@23 B A@21 B A@8 ~@2 A@15 B A@7 B A@16>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.32)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@4 A@8 ~@14 A@8 ~@14 A@8 ~@18 A@23 B>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x ~",
})).gain(2.04)

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

// drums · shaker
const shaker = s("sh").struct("<~@2 [x!16]!54 ~@2 [x!16]!23 [x!8 ~@8] [x!16]!15 [x!15 ~]>").gain(0.64)

stack(
  piano, piano_soft, distortion_guitar, pad_warm, orchestra_hit, bass, kick, clap, snare, snare_soft, pedal_hat,
  open_hat, crash, tambourine, tambourine_soft, agogo_bells, cabasa, shaker
)