Strudelify

I'll Be Around

Spinners

KeyF majorTempo116 bpm
0:00/0:00
// I'll Be Around — Spinners
// 116 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "Staff-5" acoustic guitar steel (copy of ch 5 "Staff-4" epiano2)
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · electric bass pick · "Staff-3"
const bass = note(`<
  ~@4 A B C B A B C B A B C B A B C B A B C B A B C B A D E F G B C B A B C B A B C B A B C B A B C B A D E F G B C B A
  D E F G B C H ~
>`.pickRestart({
  A: "gb2 ab2 b2 e2@2 e2 e2@2", B: "e2 ab2@2 gb2@2 gb2 gb2@2", C: "gb2 ab2@2 e2@2 e2 e2@2", D: "e2 ab2@2 gb2@5",
  E: "gb2@2 gb2@2 gb2@2 e2@4 e3!2 b2@2 e3 b2", F: "ab2@2 b2 ab2 e2@4 ~@2 e2@2 e2@2 e2@2", G: "e2!6 e2@2",
  H: "e2 ab2@2 gb2@2 ~@3",
})).s("gm_electric_bass_pick").gain(0.48)

// chords · epiano2 · "Staff-4"
const epiano2 = note("<A@4 B@4 C@8 D@8 E@8 F@4 C@4 D@8 E@8 G@8 H@5>".pickRestart({
  A: "[gb3 ~ ab3@2 b3 ~ [ab3,b3,eb4]@12 [b3,eb4,ab4]@2 ~@2 [bb3,eb4,gb4]@12 [b3,eb4,ab4]@2 ~@2 [ab3,b3,eb4]@12 [b3,eb4,ab4]@2 ~@2 [bb3,eb4,gb4]@10]/4", // Abm Ebm Abm Ebm
  B: "[[gb3,gb4] ~ [ab3,ab4]@2 [b3,b4] ~ [ab3,b3,eb4]@12 [b3,eb4,ab4]@2 ~@2 [bb3,eb4,gb4]@12 [b3,eb4,ab4]@2 ~@2 [ab3,b3,eb4]@12 [b3,eb4,ab4]@2 ~@2 [bb3,eb4,gb4]@10]/4", // Gb Ab B Abm Ebm Abm Ebm
  C: "[[gb3,gb4] [ab3,ab4] [b3,b4] [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 [b3,eb4,ab4] ~ [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@5]/4", // Gb Ab B Abm Ebm Abm Ebm
  D: "[[gb3,gb4] [ab3,ab4] [b3,b4] [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 [b3,eb4,ab4] ~ [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 [b3,eb4,ab4] ~ [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 [b3,eb4,ab4] ~ [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@5]/8", // Gb Ab B Abm Ebm Abm Ebm Abm …
  E: "[~ [b3,eb4,ab4] ~ [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 [b3,eb4,ab4] ~ [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 [b3,eb4,ab4] ~ [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 [b3,eb4,ab4] ~ [ab3,b3,eb4]@9 ~@4]/8", // Abm Ebm Abm Ebm Abm Ebm Abm
  F: "[~@4 [ab3,b3,eb4]@5 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 [b3,eb4,ab4] ~ [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@5]/4", // Abm Ebm Abm Ebm
  G: "[~@4 [ab3,b3,eb4]@5 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 [b3,eb4,ab4] ~ [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 [b3,eb4,ab4] ~ [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 [b3,eb4,ab4] ~ [ab3,b3,eb4]@9 ~@4]/8", // Abm Ebm Abm Ebm Abm Ebm Abm
  H: "[~@4 [ab3,b3,eb4]@5 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 [b3,eb4,ab4] ~ [ab3,b3,eb4]@6 [b3,eb4,ab4] ~ [bb3,eb4,gb4]@6 ~@7]/5", // Abm Ebm Abm Ebm
})).s("gm_epiano2").gain(0.56).pan(0.9)

// chords · piano · "Staff-6"
const piano = note(`<
  ~@8 A B C B D E F G@2 B H I J@4 K L M L N ~ O@2 A B P B D Q R S T U H I J@4 K L M L N ~ V@2 K L M L N ~ V@2 K L M ~@2
>`.pickRestart({
  A: "~ [ab4,b4,eb5]", B: "~@3 [gb4,bb4,eb5]@3 [gb4,bb4,db5]@2", C: "b4 [db4,e4,ab4] gb4 [b3,eb4,ab4]@5",
  D: "b4 [b3,eb4,ab4] gb4 [b3,eb4,ab4]@5", E: "~@2 [gb4,bb4,eb5] [gb4,bb4,db5]",
  F: "[eb4,ab4,b4]@3 db5@2 [b3,eb4,ab4]@3", // Abm
  G: "[~ [eb4,ab4,db5]@2 [eb4,gb4,b4]@4 b4@2 [eb4,ab4,b4] db5 [ab4,b4,eb5]@5]/2", // Dbsus2 B Abm
  H: "b4 [eb4,ab4,db5]@2 [b3,eb4,ab4]@5", I: "~@3 ab4 [gb4,bb4,eb5]@2 [gb4,bb4,db5]@2",
  J: "[gb5 [ab4,b4,e5]@2 [ab4,b4,eb5]@2 db5@2 [eb4,ab4,b4]@2 [b3,eb4,ab4]@3 [gb4,bb4,eb5]@2 [gb4,bb4,db5] b4@2 [ab4,b4,eb5]@2 [b3,eb4,ab4]@3 ab4 ab5@2 [ab4,b4,eb5]@2 [bb3,eb4,gb4]@4 gb4]/4", // E Abm Ebm Gb Abm Ebm
  K: "b4 [eb4,ab4,db5] b4 [ab4,b4,eb5]@2 [ab4,b4,eb5] ~@2", L: "~@7 gb4",
  M: "db5 [e4,bb4,eb5] b4 [ab4,b4,eb5]@2 [ab4,b4,eb5] ~@2", N: "b4 [eb4,ab4,db5] ab4 [b4,eb5,ab5]@2 [ab4,b4,eb5] ~@2",
  O: "[gb4 ab4 gb4 [b3,eb4,ab4]@9 ~@4]/2", P: "b4 [db4,e4,ab4]@2 [b3,eb4,ab4]@5",
  Q: "eb4 [ab4,b4]@2 [gb4,bb4]@3 [gb4,bb4]@2", R: "[eb4,ab4]@3 db5@2 [b3,eb4,ab4]@3",
  S: "~ [eb4,ab4,db5]@2 [eb4,gb4,b4]@4 b4", T: "b4 [eb4,ab4,b4] db5 [ab4,b4,eb5]@5",
  U: "~@2 bb4 [gb4,bb4,eb5]@3 [gb4,bb4,db5]@2", V: "[gb4 ab4 gb4 [b3,eb4,ab4]@9 ~@3 gb4]/2",
})).s("gm_piano").gain(0.56)

// other · drawbar organ · "Staff-7"
const drawbar_organ = note("<~@16 A@2 ~@22 A@2 ~@27>".pickRestart({
  A: "[~@12 b4 ab4 eb5@4 b4 ab4 eb5@4 b4 ab4 eb5@4 b4 ab4]/2",
})).s("gm_drawbar_organ").gain(0.4)

// other · drawbar organ · "Staff-7" · soft notes
const drawbar_organ_soft = note("<~@18 [eb5@4 b4 ab4 ~@10] ~@23 [eb5@4 b4 ab4 ~@10] ~@26>")
  .s("gm_drawbar_organ").gain(0.16)

// chords · string ensemble 1 · "Staff-8"
const string_ensemble_1 = note("<~@4 A@16 B@8 C@4 D@8 A@8 E@8 F@8 G@5>".pickRestart({
  A: "[~@3 [b3,eb4,ab4]@8 [bb3,eb4,gb4]@8 [b3,eb4,ab4]@8 [bb3,eb4,gb4]@8 [b3,eb4,ab4]@8 [bb3,eb4,gb4]@8 [b3,eb4,ab4]@8 [bb3,eb4,gb4]@5]/8", // Abm Ebm Abm Ebm Abm Ebm Abm Ebm
  B: "[~@3 [b3,eb4,ab4]@8 [bb3,eb4,gb4]@8 [b3,eb4,ab4]@8 [bb3,eb4,gb4]@8 [eb4,ab4,b4]@8 [bb3,eb4,gb4]@8 [eb4,ab4,b4]@8 [bb3,eb4,gb4]@5]/8", // Abm Ebm Abm Ebm Abm Ebm Abm Ebm
  C: "[~@3 [b3,eb4,ab4]@8 [bb3,eb4,gb4]@9 [b3,eb4,ab4]@8 ~ [b3,eb4,gb4] [b3,eb4,ab4] [b3,eb4,gb4]]/4", // Abm Ebm Abm B Abm B
  D: "[[eb4,gb4,b4] db5 [gb4,b4,eb5] [eb5,gb5] [b3,eb4,ab4]@7 [bb3,eb4,gb4]@8 [b3,eb4,ab4]@8 [bb3,eb4,gb4]@8 [b3,eb4,ab4]@8 [bb3,eb4,gb4]@8 [b3,eb4,ab4]@8 [bb3,eb4,gb4]@5]/8", // B Ebm Abm Ebm Abm Ebm Abm Ebm …
  E: "[~@3 [eb4,ab4,b4]@8 [bb3,eb4,gb4]@8 [eb4,ab4,b4]@8 [bb3,eb4,gb4]@8 [b3,eb4,ab4]@8 [bb3,eb4,gb4]@9 [b3,eb4,ab4]@8 ~ [b3,eb4,gb4] [b3,eb4,ab4] [b3,eb4,gb4]]/8", // Abm Ebm Abm Ebm Abm Ebm Abm B …
  F: "[[eb4,gb4,b4] db5 [gb4,b4,eb5] [eb5,gb5] [eb4,ab4,b4]@7 [bb3,eb4,gb4]@8 [eb4,ab4,b4]@8 [bb3,eb4,gb4]@8 [b3,eb4,ab4]@8 [bb3,eb4,gb4]@9 [b3,eb4,ab4]@8 ~ [b3,eb4,gb4] [b3,eb4,ab4] [b3,eb4,gb4]]/8", // B Ebm Abm Ebm Abm Ebm Abm Ebm …
  G: "[[eb4,gb4,b4] db5 [gb4,b4,eb5] [eb5,gb5] [eb4,ab4,b4]@7 [bb3,eb4,gb4]@8 [eb4,ab4,b4]@8 [bb3,eb4,gb4]@8 ~@5]/5", // B Ebm Abm Ebm Abm Ebm
})).s("gm_string_ensemble_1").gain(0.4)

// chords · electric guitar muted · "Staff-10"
const electric_guitar_muted = note("<~@4 A B@25 C ~ A B@21 C ~ A B@5 C ~@6>".pickRestart({
  A: "~@12 [b4,eb5,ab5] ~@3", B: "~@4 [b4,eb5,ab5] ~@7 [b4,eb5,ab5] ~@3", C: "~@4 [b4,eb5,ab5] ~@11",
})).s("gm_electric_guitar_muted").gain(0.4).pan(0.2)

// chords · brass section · "Staff-11"
const brass_section = note("<~@31 A B ~@22 A B ~@6 A B ~@4>".pickRestart({
  A: "~@10 [eb4,gb4,b4] ~ [eb4,gb4,b4] ~ [eb4,gb4,b4] ~", // B
  B: "[eb4,gb4,b4] ~ [eb4,gb4,b4] ~ [eb4,gb4,b4] ~ [eb4,gb4,b4] ~@9", // B
})).s("gm_brass_section").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@8 A B@20 C D E B@21 C D E B@5 C D E B@3 C ~>".pickRestart({
  A: "x!5 ~ x ~", B: "x!4", C: "x!2 ~@2", D: "x!4 ~@4", E: "~@2 x!2",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@5 A@3 B C@20 A D E C@21 A D E C@5 A D E C@3 A ~>".pickRestart({
  A: "~ x ~@2", B: "x!4 ~@2 x ~", C: "~ x ~ x", D: "x!4 ~@4", E: "~@3 x",
})).gain(0.48)

// drums · clap
const clap = s("cp").struct("<~@9 [~ x ~@2]!56 ~@4>").gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@8 C@7 D C@8 D C D C D C E B E@15 F E F E F E@3 F E F E F E@3 F E F G ~
>`.pickRestart({
  A: "~@10 x!3 ~@3", B: "~@4 x ~@5 x!3 ~@3", C: "x ~ x ~ x ~@5 x!3 ~@3", D: "x ~ x ~ x ~@3 x ~ x!3 ~@3",
  E: "x ~@3 x ~@5 x!3 ~@3", F: "x ~@3 x ~@3 x!2 ~@2 x ~@3", G: "x!2 ~@2",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  [~@8 x ~@5 x!2]
  [x ~@5 x!3 ~@5 x!2]
  [x ~@3 x ~ x ~ x ~@5 x!2]
  [x ~@5 x!3 ~@5 x!2]
  [~@3 x]
  [~ x ~ x]!62
  [~ x ~@2]
  ~
>`).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@16 A ~@8 A ~ A ~ A ~@3 B@15 C B C B C B@3 C B C B C B@3 C B C B ~>".pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@6", C: "~ x ~@3 x ~@2",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@4 [~@10 x!2 ~@4] [~@2 x!2 ~@6 x!2 ~@4]!62 [~@2 x!2 ~@12] ~>").gain(0.32)

// drums · crash
const crash = s("cr").struct("<~@8 A ~@7 B ~@7 A ~@7 A ~@15 A ~@20>".pickRestart({
  A: "~@3 x ~@4", B: "~@3 x",
})).gain(0.48)

// drums · bongos
const bongos = s("bongo:4").struct("<[~@10 x!3 ~@3] [~@2 x!3 ~@5 x!3 ~@3]!3 [~@2 x!3 ~@11] ~@64>").gain(1.26)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<[~ x]!2 [x!2]!2 x ~@64>").gain(1.26)

stack(
  bass, epiano2, piano, drawbar_organ, drawbar_organ_soft, string_ensemble_1, electric_guitar_muted, brass_section,
  kick, snare, clap, hihat, mid_tom, open_hat, high_tom, crash, bongos, bongos_2
)

More by Spinners