Strudelify

When I'm With You

Sheriff

KeyA majorTempo98 bpm
0:00/0:00
// When I'm With You — Sheriff
// 98 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 7, 4/4 at bar 8) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note("<~@19 A B C@2 D E F G H@2 ~@8 C@2 D E C@2 D I J K L@2 M N O P Q@2 ~@9 R@2 ~>".pickRestart({
  A: "d2@6 d3 d3@9", B: "e2@6 e3 e3@4 ~ d3@3 ~", C: "[a2@5 ~ a2@2 d3@6 e3 e3@6 ~ e3@2 d3@3 c#3@3 b2 ~]/2",
  D: "a2@3 a3@3 a2@2 d3@5 ~ d3@2", E: "e3@5 d3 e3@2 d3@3 c#3@3 b2 ~", F: "a2@4 a3@4 d3@5 ~ d3@2",
  G: "e3@5 ~ e3@2 d3@3 c#3@3 b2 ~", H: "[a2@15 ~]/2", I: "e3@4 e3@3 e2 e3@3 ~ e3 e2 e3@2",
  J: "f#3@4 f#3@3 f#2 f#3@2 f#3 ~ f#3 f#2 f#3@2", K: "f#2@15 ~",
  L: "[b2@5 ~ b2@2 e3@6 f#3 f#3@6 ~ f#3@2 e3@3 d#3@3 c#3 ~]/2", M: "b2@3 b3@3 b2@2 e3@5 ~ e3@2",
  N: "f#3@5 e3 f#3@2 e3@3 d#3@3 c#3 ~", O: "b2@4 b3@4 e3@5 ~ e3@2", P: "f#3@5 ~ f#3@2 e3@3 d#3@3 c#3 ~",
  Q: "[b2@15 ~]/2", R: "b2/2",
})).s("gm_acoustic_bass").gain(0.72)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A@4 B C D C D E F G H C D C D E F G H I J K L M N O P C D C D E F G H I J K L M N I Q R S T U V W X Y Z AA AB AC Z AA
  AB AC AD@3 AE@3
>`.pickRestart({
  A: "[~@11 [b3,g#4]@3 ~@6 [b3,g#4]@2 [c#4,a4]@2 [e4,f#4] ~ d4 c#4@2 a3 b3 e3@2 g#3 ~@2 e5@4 ~@3 [b3,g#4]@3 ~@6 [d4,b4]@2 [e4,c#5]@2 [f#4,d5] [e4,c#5] [c#4,a4] ~@3 a4 g#4, ~@8 a2@8 ~ a2@6 ~ [d2,d3]@7 e2@8 ~ a2@8 ~ a2@6 ~@9, ~@9 c#3@8 ~ c#3@5 ~@11 [e3,a3]@5 ~@2 c#3@8 ~ c#3@5 ~ d3@7 ~, ~@10 e3@7 ~@2 e3@4 ~@2 e4@2 ~@4 [c#4,e4]@5 ~@6 e3@7 ~@2 e3@4 ~@6 e5@3, ~@14 [c#4,a4]@6 ~@4 a4@2 ~@20 [c#4,a4]@6 ~@7 [a3,e4]@5]/4", // E F#m Esus2 E G C#m D C#m …
  B: "~ d4 c#4 a3 ~@2 e4@2 [e3,g#3]@4 f#3 c#4 a3@2, e2@7 ~@9, e4@4 g#3@3 ~@5 d3@4, ~@5 b3@3 ~@8", // E
  C: "[a3,b3,e4]@2 ~ a2 [a3,c#4,e4]@2 [a3,c#4,e4]@2, a2@3 ~ a2@4, ~ [a3,c#4,e4] ~@2", // Asus2 A
  D: "[a3,d4,f#4]!2 [b3,e4,g#4]!2, d2 e2", E: "~ d4 [a3,d4,f#4]@2 [b3,e4,g#4]@2 [b3,e4,g#4]@2, d2 ~ e2@2, ~ a3@3 ~@12",
  F: "[a2,a3,c#4,e4]@3 ~ [g#2,g#3,c#4,e4]@4 [f#2,f#3,a3,c#4]@4 [e2,e3,a3,c#4]@4", // A C#m F#m A
  G: "~@5 d5@3, d2@3 a4 d3@4, [d4,f#4]@3 d4@13, ~ a2@7, ~ f#4@3", // D
  H: "~@6 e4@6 [d3,a3,d4,f#4]@3 ~, e3@3 ~, [g#3,b3] g#3@2 ~, ~ e2@5 ~@2, ~@5 b3@7 ~@4", // D G#m
  I: "~ [e4,a4] [d4,f#4,a4]!2, a2 ~, [c#4,e4,a4]@3 c#4@5 ~@8, ~ e3@3 [d3,a3]@4", // A5 D A D5
  J: "b3@4 ~@3 a3 [d4,f#4,a4]@2 ~@4 f#4@2, [e3,b4] d3, [e4,g#4]@5 e4@3 ~@3 [e4,a4]@5, ~@2 b3@2 ~ a3@3, ~@3 g#4 ~@4", // D E5 E A5
  K: "a3@2 ~ b3 [d4,f#4]@2 [e4,a4]@2, [a2,c#4,e4] ~, ~ e3 [d3,a3]@2, ~@5 a3@3 ~@8", // D A5 A D5
  L: "b3@3 ~@3 e4@2 [d4,f#4]@3 ~@3 d4@2, e3 [d3,a3], [e4,g#4]@5 g#4@3 ~@3 e4@5, ~@3 b3@5 ~@8, ~ b4 ~@2", // D D5 E
  M: "[a3,c#4,e4]@3 [a3,c#4,e4] [d4,f#4,a4]@2 [d4,f#4,a4]@2, a2 [d3,a3]", // A D D5
  N: "e4@2 e4@3 ~ e4@2 a4@6 [e4,a4]@2, [e3,b3,g#4,b4] [d3,d4,f#4], ~@5 f#4@3 ~@8", // A5 E D
  O: "b3 ~ e4 [a3,e4] [a2,a3,d4,e4]@4, a2 ~, e4 b3 ~@2, ~ a3@2 ~@5", // A5 Asus4
  P: "a3@5 ~ b3@2 [a2,a3,d4]@4 [a2,b3]@3 ~, [a2,c#4,e4] ~, ~@5 a3@3 ~@8", // D5 Asus2 A
  Q: "g#3 ~@6 g#4, e2, [b3,e4]@3 b3@3 b3@4 b3@6, ~ g#3@3 g#3@4, ~ e4@2 e4", // E5
  R: "[f#3,c#4]@2 ~@4 [f#3,b3,c#4]@4 [b3,c#4]@3 ~ [f#3,b3,c#4]@2, a#3@3 ~@5, ~@2 [f#3,b3,c#4]@4 ~@4 f#3 ~@5, ~@4 f#2@9 f#2@3", // F#5 F#sus4 Bsus2 F#sus4
  S: "[f#2,f#3,a#3,c#4]@15 ~", T: "~ [f#4,b4] [e4,g#4,b4]!2, b2 ~, [d#4,f#4,b4]@3 d#4@5 ~@8, ~ f#3@3 [e3,b3]@4",
  U: "c#4@4 ~@3 b3 [e4,g#4,b4]@2 ~@4 g#4@2, [f#3,c#5] e3, [f#4,a#4]@5 f#4@3 ~@3 [f#4,b4]@5, ~@2 c#4@2 ~ b3@3, ~@3 a#4 ~@4", // E F#5 F# B5
  V: "b3@2 ~ c#4 [e4,g#4]@2 [f#4,b4]@2, [b2,d#4,f#4] ~, ~ f#3 [e3,b3]@2, ~@5 b3@3 ~@8", // E B5 B E5
  W: "c#4@3 ~@3 f#4@2 [e4,g#4]@3 ~@3 e4@2, f#3 [e3,b3], [f#4,a#4]@5 a#4@3 ~@3 f#4@5, ~@3 c#4@5 ~@8, ~ c#5 ~@2", // E E5 F#
  X: "[b3,d#4,f#4]@3 [b3,d#4,f#4] [e4,g#4,b4]@2 [e4,g#4,b4]@2, b2 [e3,b3]", // B E E5
  Y: "f#4@2 f#4@3 ~ f#4@2 b4@6 [f#4,b4]@2, [f#3,c#4,a#4,c#5] [e3,e4,g#4], ~@5 g#4@3 ~@8", // B5 F# E
  Z: "c#4 ~ f#4 [b3,f#4] [b2,b3,e4,f#4]@4, b2 ~, f#4 c#4 ~@2, ~ b3@2 ~@5", // B5 Bsus4
  AA: "b3@5 ~ c#4@2 [b2,b3,e4]@4 [b2,c#4]@3 ~, [b2,d#4,f#4] ~, ~@5 b3@3 ~@8", // E5 Bsus2 B
  AB: "b3@2 ~@2 d#4@2 ~ d#4 ~@6 b2@2, b2@7 ~, [d#4,f#4] f#4@2 ~, ~ b3@2 b3@2 b3@3, ~@2 d#4 [d#4,f#4]", // D#m
  AC: "[a#3,d#4,f#4]@4 [a#3,d#4,f#4]@4 g#3 ~@3 [b3,e4]@4, b2!2, ~@2 [b3,e4] ~, ~@5 g#3@3", // D#m E5
  AD: "[b3 ~@10 e4@12 ~, d#4@6 b2@2 [b2,f#4]@15 ~, f#4@7 e4 f#4@5 ~@35, b2@2 b2@3 e4@3 e4@3 ~@13, ~@2 b3@4 b3@7 ~ b3@4 b3@28 ~@2]/3", // B5
  AE: "[[b2,d#3,f#3,c#4,d#4,f#4]@11 ~@5]/3", // B
})).s("gm_epiano2").gain(0.46)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@5 A B C D E F G H A B C D I J K L M N O P Q R S T A B C D I U K L M N O P Q R M V W X Y Z AA AB AC AD AE AF@2 ~@8
  AG@3
>`.pickRestart({
  A: "~@7 a3, a2 [a2,e3], ~ e3@3 ~@4, ~ a3@2 a3@2 a3@2 ~, ~ [b3,e4] ~ [b3,e4]", // A5 E5
  B: "~@3 a3 ~@3 b3, [d3,f#3] [e3,g#3], ~ a3@2 ~@2 b3@2 ~, ~ [d4,e4] ~ e4", // D E Dsus2
  C: "~@7 a3, [a2,e3]!2, ~ a3@2 a3@2 a3@2 ~, ~ [b3,e4]@2 [b3,e4]", // A5 E5
  D: "a3 ~@2 a3 ~@3 b3, [d3,f#3] [e3,g#3], d4 [d4,e4] ~ e4, ~@2 a3@4 ~@4 b3@3 d4@3", // D E Dsus2
  E: "~@4 a3@2 ~ a3 ~@6 g#3@2, d3 e3, ~ f#3@3 ~ g#3@2 ~, ~@3 d4 ~@2 [b3,e4]@2", // E5
  F: "a3@2 a3@2 g#3@2 g#3@2 f#3 ~ f#3@2 [e3,c#4,e4]@4, [c#4,e4]!3 ~", G: "f#3 ~@6 a3, d4!2, a3@2 a3@5 ~, ~ f#3@5 f#3@2",
  H: "~ e4@2 [d3,f#3,a3], g#3@3 ~, ~ b3@5 ~@2", // D
  I: "a3@2 f#3@2 ~ a3 f#3 a3 ~@4 e4@3 ~, d3 ~, d4@2 d4 ~@2 b3@2 ~, f#3 ~@7 g#3@7 ~",
  J: "[a3,c#4,e4]@3 ~ [g#3,c#4,e4]@3 ~ [f#3,c#4,e4]@3 ~ [e3,c#4,e4]@3 ~", K: "~@6 [d3,a3] [d3,a3]@9, d2@7 ~",
  L: "~@6 [e3,b3] [e3,b3]@4 ~ [d2,d3,a3]@4, e2@11 ~@5", // E5 D5
  M: "~ [e4,a4] [d4,f#4,a4]!2, a2 ~, [c#4,e4,a4]@3 c#4@5 ~@8, ~ e3@3 [d3,a3]@4", // A5 D A D5
  N: "b3@4 ~@3 a3 [d4,f#4,a4]@2 ~@4 f#4@2, [e3,b4] d3, [e4,g#4]@5 e4@3 ~@3 [e4,a4]@5, ~@2 b3@2 ~ a3@3, ~@3 g#4 ~@4", // D E5 E A5
  O: "a3@2 ~ b3 [d4,f#4]@2 [e4,a4]@2, [a2,c#4,e4] ~, ~ e3 [d3,a3]@2, ~@5 a3@3 ~@8", // D A5 A D5
  P: "b3@3 ~@3 e4@2 [d4,f#4]@3 ~@3 d4@2, e3 [d3,a3], [e4,g#4]@5 g#4@3 ~@3 e4@5, ~@3 b3@5 ~@8, ~ b4 ~@2", // D D5 E
  Q: "[a3,c#4,e4]@3 [a3,c#4,e4] [d4,f#4,a4]@2 [d4,f#4,a4]@2, a2 [d3,a3]", // A D D5
  R: "e4@2 e4@3 ~ e4@2 a4@6 [e4,a4]@2, [e3,b3,g#4,b4] [d3,d4,f#4], ~@5 f#4@3 ~@8", // A5 E D
  S: "b3 ~ e4 [a3,e4] [a2,a3,d4,e4]@4, a2 ~, e4 b3 ~@2, ~ a3@2 ~@5", // A5 Asus4
  T: "a3@5 ~ b3@2 [a2,a3,d4]@4 [a2,b3]@3 ~, [a2,c#4,e4] ~, ~@5 a3@3 ~@8", // D5 Asus2 A
  U: "[a4,c#5,e5]@3 ~ [g#4,c#5,e5]@3 ~ [f#4,c#5,e5]@3 ~ [e4,c#5,e5]@3 ~", // A C#m F#7 C#m
  V: "g#3 ~@6 g#4, e2, [b3,e4]@3 b3@3 b3@4 b3@6, ~ g#3@3 g#3@4, ~ e4@2 e4", // E5
  W: "[f#3,c#4]@2 ~@4 [f#3,b3,c#4]@4 [b3,c#4]@3 ~ [f#3,b3,c#4]@2, a#3@3 ~@5, ~@2 [f#3,b3,c#4]@4 ~@4 f#3 ~@5, ~@4 f#2@9 f#2@3", // F#5 F#sus4 Bsus2 F#sus4
  X: "[f#2,f#3,a#3,c#4]@15 ~", Y: "~ [f#4,b4] [e4,g#4,b4]!2, b2 ~, [d#4,f#4,b4]@3 d#4@5 ~@8, ~ f#3@3 [e3,b3]@4",
  Z: "c#4@4 ~@3 b3 [e4,g#4,b4]@2 ~@4 g#4@2, [f#3,c#5] e3, [f#4,a#4]@5 f#4@3 ~@3 [f#4,b4]@5, ~@2 c#4@2 ~ b3@3, ~@3 a#4 ~@4", // E F#5 F# B5
  AA: "b3@2 ~ c#4 [e4,g#4]@2 [f#4,b4]@2, [b2,d#4,f#4] ~, ~ f#3 [e3,b3]@2, ~@5 b3@3 ~@8", // E B5 B E5
  AB: "c#4@3 ~@3 f#4@2 [e4,g#4]@3 ~@3 e4@2, f#3 [e3,b3], [f#4,a#4]@5 a#4@3 ~@3 f#4@5, ~@3 c#4@5 ~@8, ~ c#5 ~@2", // E E5 F#
  AC: "[b3,d#4,f#4]@3 [b3,d#4,f#4] [e4,g#4,b4]@2 [e4,g#4,b4]@2, b2 [e3,b3]", // B E E5
  AD: "f#4@2 f#4@3 ~ f#4@2 b4@6 [f#4,b4]@2, [f#3,c#4,a#4,c#5] [e3,e4,g#4], ~@5 g#4@3 ~@8", // B5 F# E
  AE: "c#4 ~ f#4 [b3,f#4] [b2,b3,e4,f#4]@4, b2 ~, f#4 c#4 ~@2, ~ b3@2 ~@5", // B5 Bsus4
  AF: "[b3@5 ~ c#4@2 [b2,b3,e4]@4 [b2,c#4]@6 ~@14, [b2,d#4,f#4] ~@3, ~@5 b3@3 ~@24]/2", // E5 Bsus2 B
  AG: "[[b2,d#3,f#3,c#4,d#4,f#4]@11 ~@5]/3", // B
})).s("gm_acoustic_guitar_nylon").gain(0.43)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@19 A B C@2 D@2 E@2 F ~@6 G A B C@2 D@2 E@2 H I J K L@2 M@2 N@2 O ~@13
>`.pickRestart({
  A: "~@6 [d3,a3] [d3,a3]@9, d2@7 ~", B: "~@6 [e3,b3] [e3,b3]@4 ~ [d2,d3,a3]@4, e2@11 ~@5",
  C: "[[a2,e3]@8 [d3,a3]@5 ~ [e3,b3] [e3,b3]@8 ~ [d3,a3]@7 ~]/2", // A5 D5 E5 D5
  D: "[[a2,e3]@7 ~ [d3,a3]@5 ~ [e3,b3] [e3,b3]@6 ~ [e3,b3]@2 [d3,a3]@3 [c#3,g#3]@3 [b2,f#3] ~]/2", // A5 D5 E5 D5 C#5 B5
  E: "[[a2,e3]@7 ~ [d3,a3]@5 ~ [e3,b3] [e3,b3]@8 ~ [d3,a3]@7 ~]/2", F: "a2@15 ~", G: "a3@4 g#3@4 f#3@4 e3@3 ~",
  H: "[a2,e3]@8 [d3,a3]@5 ~ [e3,b3]!2", I: "[g#3,b3,e4]@9 [g#3,b3,e4]@3 [g#3,b3,e4]@4",
  J: "b3@5 ~@2 f#4 [b3,c#4,f#4]@4 [b3,c#4,f#4]@4, [c#4,f#4]@3 c#4 ~@4, ~@5 b3@3 ~@8", K: "[f#2,a#3,c#4,f#4]@15 ~",
  L: "[[b2,f#3]@8 [e3,b3]@5 ~ [f#3,c#4] [f#3,c#4]@8 ~ [e3,b3]@7 ~]/2", // B5 E5 F#5 E5
  M: "[[b2,f#3]@7 ~ [e3,b3]@5 ~ [f#3,c#4] [f#3,c#4]@6 ~ [f#3,c#4]@2 [e3,b3]@3 [d#3,a#3]@3 [c#3,g#3] ~]/2", // B5 E5 F#5 E5 D#5 C#5
  N: "[[b2,f#3]@7 ~ [e3,b3]@5 ~ [f#3,c#4] [f#3,c#4]@8 ~ [e3,b3]@7 ~]/2", O: "b2@15 ~",
})).s("gm_electric_guitar_jazz").gain(0.43)

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

// drums · snare
const snare = s("sd").struct("<~@19 A B A@3 C A@2 ~@2 A@7 B A@3 C A@3 C A D A@3 E A@2 ~@14>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!2 ~@2", C: "~@4 x ~@8 x ~@2", D: "~@4 x ~@2 x ~ x ~@2 x!3 ~", E: "~@4 x ~@7 x!4",
})).gain(0.56)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@24 A ~@15 A ~@3 A ~ B ~@3 C ~@16>".pickRestart({
  A: "~@11 x!2 ~@3", B: "~@3 x ~@6 x!2 ~@4", C: "~@9 x!3 ~@4",
})).gain(0.17)

// drums · low tom
const low_tom = s("lt").struct("<~@20 A ~@3 B ~@3 B ~@7 A ~@3 B ~@3 B ~ C ~@3 D ~@16>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@7 x", C: "~@14 x!2", D: "~@13 x!3",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~@21 [x!4]!6 [~ x ~ x]!2 [x!4]!6 ~@2 [x!4]!16 [~ x ~ x]!10 ~@4>").gain(0.56)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@21 A@6 ~@2 A@6 ~@2 A@16 ~@10 B ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@4 x ~@7 x!2 ~@2",
})).gain(0.17)

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 [~@10 x ~@2 x ~@2] ~@17 [~@3 x] ~@3 [~@3 x] ~@16>").gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<~@63 [~@7 x] ~@3>").gain(0.33)

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

// drums · ride
const ride = s("rd").struct("<~@19 A@2 B@6 ~@7 C A@2 B@8 D ~ B@6 ~@11 E ~@2>".pickRestart({
  A: "x!4", B: "x!8", C: "x ~ x ~ x!4", D: "~ x!7", E: "x",
})).gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct("<~@13 [~ x ~ x]!6 ~@10 [~@3 x]!6 ~@32>").gain(0.56)

stack(
  bass, epiano2, acoustic_guitar_nylon, electric_guitar_jazz, kick, snare, snare_soft, low_tom, hihat, hihat_soft,
  mid_tom, open_hat, crash, ride, tambourine
)