Strudelify

Ring My Bell

Anita Ward

KeyC minorTempo123 bpm
0:00/0:00
// Ring My Bell — Anita Ward
// 123 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 2 "Bass" named as a bass, played on electric bass finger (its piano patch is not one)
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(123/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 · electric bass finger · "Bass"
const bass = note(`<
  A B C D A E C D A B C D A E C D A B C D A E C D F G H D I B J D A B C D A B C D A B C D A E C D A B C D A E C D A B C
  D A E C D A B C D F G C D A B C D A E C D A B C D F G C D A B C D F G C D A B C D A E K
>`.pickRestart({
  A: "c2@3 ~@3 c2 ~ c2@4 ~@2 eb2@2", B: "f2@2 f3 f2 eb2@2 eb3@2 d2@2 d3@2 db2@2 db3@2",
  C: "c2@4 ~@2 c2 ~ c2@4 ~@2 f2 ~", D: "g2 g3 f2 f3 g2 g3 f2 f3", E: "f2@2 f3 f2 eb2@2 eb3@2 d2@2 d3 d2 db2@2 db3@2",
  F: "c2@4 ~@2 c2 ~ c2@4 bb2@3 ~", G: "f1 f2 g1 g2 ab1 ab2 bb1 bb2", H: "c2@4 ~@2 c2 ~ c2@4 ~@2 f2 gb2",
  I: "c2@3 ~@3 c2 ~ c2@4 ~@2 eb2 e2", J: "c2@4 ~@2 c2 ~ c2@4 ~@2 f2@2", K: "c2 ~@3",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · piano
const piano = note(`<
  A B A C A D A E A B A C A D A E A B A C A D A E A B A C A D A E A B A C A D A E A B A C A D A E A B A C A D A E A B A
  C A D A E A B A C A D A E A B A C A D A E A B A C A D A E A B A C A D A E A B A C A D F
>`.pickRestart({
  A: "[c4,eb4,g4]@2 ~ [c4,eb4,g4] ~@2 [c4,eb4,g4]@3 ~ [c4,eb4,g4] ~@2 [c4,eb4,g4] ~@2", // Cm
  B: "[c4,f4,ab4]@2 ~ [c4,f4,ab4] ~@2 [c4,f4,ab4]@3 ~ [c4,f4,ab4] ~@2 [c4,f4,ab4] ~@2", // Fm
  C: "[b3,d4,g4]@2 ~ [b3,d4,g4] ~@2 [b3,d4,g4]@3 ~ [b3,d4,g4] ~@2 [b3,d4,g4] ~@2", // G
  D: "[c4,f4,ab4]@3 [c4,f4,ab4] ~@2 [c4,f4]@3 ~ [c4,f4,ab4] ~@2 [c4,f4,ab4] ~@2, ~@6 ab4 ~@9", // Fm F5 Fm
  E: "[b3,d4]@2 ~ [b3,d4,g4] ~@2 [b3,d4,g4]@3 ~ [b3,d4,g4] ~@2 [b3,d4,g4] ~@2, g4 ~@15", // Bm G
  F: "[c4,eb4,g4]@2 ~ [c4,eb4,g4] ~@2 [c4,eb4,g4]@3 ~@7", // Cm
})).s("gm_piano").gain(0.25)

// other · piano
const piano_2 = note(`<
  ~@7 A@3 B C@6 D E@2 F@3 G H I ~ J H K ~ J H I ~ J H L ~ M@7 N O@8 J H P ~ G H Q ~ G H R ~ G H L ~@25 J H P ~ G H Q ~
>`.pickRestart({
  A: "[~@12 c4 ~ eb4@9 ~@5 g4@7 ~ f4@3 ~@5 c4@2 bb3 ~]/3", B: "c4@4 bb3@2 g3 ~ c4@3 ~ c4 ~ eb4@2",
  C: "[~@2 eb4@4 ~@6 c4 ~ f4@5 eb4@5 ~@4 g4@2 f4@5 ~ f4 ~ eb4 ~ f4 ~ f4@2 eb4 ~ g4@8 bb4@2 g4@6 [eb4,f4] c4@6 ~@9 f4@4 eb4@6 ~@2 eb4 ~ g4@4, ~@2 c4 ~@93]/6", // Ebsus2
  D: "~ f4@4 ~@7 c4@2 bb3 ~", E: "[c4@4 bb3@2 g3 ~ c4@3 ~ c4 ~ eb4@4 c4@4 ~@6 c4 ~ f4@2]/2",
  F: "[~ eb4@9 ~@2 g4@2 f4@6 ~@2 f4@2 ~ eb4 ~ f4 ~ f4@2 eb4@2 c4@8 ~@7]/3", G: "~@4 c5 ~ c5 ~ c5@2 ~@2 c5@3 ~",
  H: "eb5 d5", I: "c5@4 ab4 ~ ab4 g4", J: "~@4 c5 ~ c5 ~ c5@2 ~@2 c5@2 ~@2", K: "c5@7 ~ ab4@4 g4@2 c5@2",
  L: "c5@4 ab4@2 g4 c5",
  M: "[~@12 c4 ~ f4@8 eb4@3 ~@3 g4 ~ g4@8 f4@2 ~@4 c5 ~ c5@8 bb4@2 c5@4 bb4@2 c4@9 ~@5 c4 ~ f4@8 eb4@4 ~@2 c5 ~ f5@8 eb5@2 f5@2 eb5@2 c5@2 bb4 ~]/7",
  N: "c5@6 bb4@2 c5@2 bb4@2 g4@2 f4 ~",
  O: "[c4@10 ~@2 c5 ~ eb5@14 c5 ~ c5@4 bb4@2 c5@2 bb4@2 g4@2 f4 ~ c5 ~ c5@8 bb4@2 c5@4 bb4 ~ g4@6 f4@2 ~@6 c4 ~ f4@6 eb4@7 ~ g4@2 f4@5 ~ f4 ~ eb4 ~ f4 ~ f4@3 ~ eb4@8 c4@7 ~@3, ~@92 gb4 ~@35]/8",
  P: "c5@8 ab4@4 ab4@2 g4 ~", Q: "c5@8 ab4@3 ~ ab4@2 c5 ~", R: "c5@8 ab4@3 ~ ab4@2 g4@2",
})).s("gm_piano").gain(0.4)

// chords · piano
const piano_3 = note(`<
  A B C D E D F D G H I J I K I L G H I J I K I L A B C D E D F D A B C D E D F D G H I J I K I L G H I J I K I L A B C
  D E D F D A B C D E D F D A B C D E D F D A B C D E D F D A B C D E D F D A B C D E D M
>`.pickRestart({
  A: "~@2 f5 eb5 ~ f5 eb5 ~ [c5,f5] ~@3 eb5!2 ~@2, ~ c5 ~@4 c5 ~", // F5
  B: "~@2 f5 eb5 ~ f5 eb5 ~ [c5,f5] ~ c5!2 eb5!2 [c5,f5] f5, ~ c5 ~@6", // F5
  C: "~@2 f5 eb5 ~ f5 eb5 ~ [c5,f5] ~@3 eb5!2 ~@2, ~@2 c5@2 ~ c5@2 ~@5 c5@2 ~@2", // F5
  D: "~@2 f5 eb5 ~ f5 eb5 ~ f5 ~ c5!2 eb5!2 [c5,f5]!2, ~ c5 ~@6", // F5
  E: "~@2 [c5,f5] eb5 ~ f5 eb5 ~ [c5,f5] ~@3 [c5,eb5] eb5 ~@2, ~@5 c5@2 ~@9", // F5 Cm
  F: "~@2 f5 eb5 ~ f5 eb5 ~ [c5,f5] ~@3 [c5,eb5] eb5 ~@2, ~ c5 ~@6", // F5 Cm
  G: "~@2 [c5,f5] eb5 ~ f5 eb5 ~ [c5,f5] ~@3 eb5!2 ~@2", H: "~@2 f5 eb5 ~ f5 eb5 ~ f5 ~ c5!2 eb5!2 [c5,f5] f5",
  I: "~@2 [c5,f5] eb5 ~ f5 eb5 ~ [c5,f5] ~@3 [c5,eb5] eb5 ~@2", // F5 Cm
  J: "~@2 [c5,f5] eb5 ~ f5 eb5 ~ f5 ~ c5 ~ eb5!2 [c5,f5] f5", // F5
  K: "~@2 [c5,f5] eb5 ~ f5 eb5 ~ f5 ~ c5!2 eb5!2 [c5,f5] f5", L: "~@2 f5 eb5 ~ f5 eb5 ~ f5 ~ c5!2 eb5!2 [c5,f5]!2",
  M: "~@2 f5 eb5 ~@12, ~ c5 ~@6",
})).s("gm_piano").gain(0.25)

// chords · piano · soft notes
const piano_soft = note(`<
  A B ~ C D A E F G H I J K L K M G H I J K L K M A B ~ C D A E F A B ~ C D A E F G H I J K L K M G H I J K L K M A B ~
  C D A E F A B ~ C D A E F A B ~ C D A E F A B ~ C D A E F A B ~ C D A E F A B ~ C D A ~
>`.pickRestart({
  A: "~@5 c5@2 ~@9", B: "~@5 c5@2 ~@8 c5", C: "~@5 c5@2 ~@5 c5!2 ~@2", D: "~@13 c5 ~@2", E: "~@5 c5@2 ~@6 c5 ~@2",
  F: "~@5 c5@2 ~ c5 ~@4 c5 ~@2", G: "~@5 c5 ~@6 c5 ~@3", H: "~@2 c5 ~@2 c5 ~@2 c5 ~@6 c5", I: "~@5 c5 ~@10",
  J: "~@5 c5 ~@5 c5!3 ~ c5", K: "~@5 c5 ~@7 c5 ~@2", L: "~@5 c5 ~@9 c5", M: "~@2 c5 ~@2 c5 ~@2 c5 ~@4 c5 ~@2",
})).s("gm_piano").gain(0.15)

// other · piano
const piano_4 = note(`<
  A B C D A B E ~@19 F G ~@2 H I ~@2 F G ~@2 H I ~@18 F G ~@2 H I ~@2 F G ~@2 H I ~@26 F G ~@2 J
>`.pickRestart({
  A: "c5 ~@11 f5 ~@3", B: "eb5 ~@7 d5 ~@3 eb5 ~@3", C: "c5 ~@7 g4 ~@3 f4 ~@3", D: "g4 ~@15", E: "c5 ~@7 g4 ~@7",
  F: "c5@2 ~@2 ab5 ~@3 g5 ~@7", G: "f5 ~@3 eb5@2 ~@2 f5@2 ~@2 g5 ~@3", H: "c5@2 ~@2 ab5@2 ~@2 g5 ~@7", I: "f5 ~@15",
  J: "c5 ~ ab5 ~@5",
})).s("gm_piano").gain(0.35)

// other · piano
const piano_5 = note(`<
  ~@7 A ~@6 B C ~@2 D@2 ~@4 E F ~@2 G H ~@2 E F ~@2 G H ~@3 I ~@6 J K ~@6 E L M N O P M Q E L M N O P M Q ~@8 R S T U V
  W X Y R S T U V W X Y E L M N O P M
>`.pickRestart({
  A: "c8@15 ~", B: "c5 ~ c5 ~ c5 ~ c5 ~@9", C: "b4 ~ b4 ~ b4 ~ b4 ~@9", D: "[~@15 gb4@4 ~ gb4 ~@3 eb4 ~@7]/2",
  E: "c6 bb5", F: "~@8 ab5@2 ~@4 g5 ~", G: "c6 ~", H: "~@8 ab5@3 ~@3 c6@2", I: "~@3 c5@3 ~@2", J: "c5 ~@3 c5 ~ c5 ~@9",
  K: "ab4 ~@3 ab4 ~ ab4 ~@9", L: "ab5@8 ab5@2 ~@2 ab5@2 g5 ~", M: "c5 ~@3 ab5 ~@3 g5 ~@7",
  N: "f5 ~@3 eb5 ~@3 f5 ~@3 c6@4", O: "c6 ~@15", P: "ab5@7 ~ ab5@3 ~@3 c6@2", Q: "f5 ~ f5 ~ f5 ~ f5 ~ f5 ~@3 c6 ~@3",
  R: "~@2 c5 ~ eb5 ~ gb5@2 ~@2 f5 ~ f5@2 ~@2", S: "~@2 c5 ~ eb5 ~ gb5@2 ~@2 f5 ~ f5 ~@3",
  T: "g5 ~@3 eb5 ~@3 g5 ~@3 c6@4", U: "b5@11 ~ c6 ~ c6 ~", V: "~@2 c5 ~ eb5 ~ gb5@3 ~ f5 ~ f5@4",
  W: "eb5 ~ f5 ~ eb5 ~@3 c5 ~ bb4 ~ c5 ~@3", X: "c5 ~ c5 ~@5 eb5 ~ eb5 ~@5", Y: "g5 ~ g5 ~ g5 ~ g5 ~@9",
})).s("gm_piano").gain(0.3)

// other · piano · soft notes
const piano_soft_2 = note("<~@7 A ~@11 B ~@5 C ~@2 D E ~@3 C ~@2 D E ~@22 D F ~@6 D F ~@30 D F ~>".pickRestart({
  A: "c6 ~@15", B: "~@2 g4 ~@3 g4 ~@3 c4 ~@5", C: "ab5@4 ~@2 ab5 ~", D: "~ bb5", E: "ab5@7 ~@5 ab5@2 ~@2",
  F: "~@6 ab5 ~",
})).s("gm_piano").gain(0.15)

// other · piano
const piano_6 = note(`<
  ~@14 A B ~@2 C@2 ~@4 D E ~@2 D E ~@2 D E ~@2 D E ~@10 F G ~@6 D E H I D E H J D E H I D E H J ~@8 K L M N O P Q R K L
  M N O P Q R D E H I D E H
>`.pickRestart({
  A: "eb5 ~ eb5 ~ eb5 ~ eb5 ~@9", B: "d5 ~ d5 ~ d5 ~ d5 ~@9", C: "[~@14 gb4@4 g4 ~ gb4 ~ g4 ~ eb4@2 c4 ~@5]/2",
  D: "g5 f5", E: "eb5@7 ~ eb5@2 ~@2 eb5@2 g5@2", F: "eb5 ~@3 eb5 ~ eb5 ~@9", G: "c5 ~@3 c5 ~ c5 ~@9",
  H: "c5 ~@3 ab5 ~@3 g5 ~@7", I: "f5 ~@3 eb5 ~@3 f5 ~@3 c6@3 ~", J: "b5 ~ b5 ~ b5 ~ b5 ~ b5 ~@3 c6 ~@3",
  K: "~@2 c5 ~ eb5 ~ gb5@3 ~ f5 ~ f5 ~@3", L: "~@2 c5 ~ eb5 ~ gb5@2 ~@2 f5 ~ f5@2 ~@2",
  M: "c6 ~@3 g5 ~@3 c6@2 ~@2 eb6@3 ~", N: "d6@11 ~ eb6@2 eb6 ~", O: "~@2 c5 ~ eb5 ~ gb5@3 ~ f5 ~ f5@3 ~",
  P: "eb5 ~ f5 ~ eb5@3 ~ c5 ~ bb4 ~ c5 ~@3", Q: "g5 ~ g5 ~@5 c6 ~ c6 ~@5", R: "b5 ~ b5 ~ b5 ~ b5 ~@9",
})).s("gm_piano").gain(0.35)

// other · piano
const piano_7 = note("<~@79 A ~@3 B ~@3 C ~@3 B ~@3 B ~@7>".pickRestart({
  A: "~@4 c6 ~@3 a4 ~@3 c4 ~@3", B: "~@8 c6 ~@3 a4 ~@3", C: "~@10 c6 ~@2 a4 ~@2",
})).s("gm_piano").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
>`.pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3",
})).gain(0.63)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@23 A ~@7 A ~@3 A ~@3 A ~@15 A ~@47>".pickRestart({
  A: "~@7 x",
})).gain(0.47)

// drums · hihat
const hihat = s("hh").struct("<A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@23 B A@7 B A@7 B A@6 C>".pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x!2 ~@4", C: "x!5 ~@3",
})).gain(0.39)

// drums · open hat
const open_hat = s("oh").struct("<~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 B ~@23 A ~@7 B ~@3 A ~@3 B ~@7>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@3 x",
})).gain(0.31)

// drums · crash
const crash = s("cr").struct("<A ~@7 A ~@15 A ~@7 A ~@3 A ~@3 A ~@15 A ~@2 B ~@28 A ~ A ~@5 A ~@6>".pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.24)

// drums · tambourine
const tambourine = s("tb").struct("~ x").gain(0.47)

stack(
  bass, piano, piano_2, piano_3, piano_soft, piano_4, piano_5, piano_soft_2, piano_6, piano_7, kick, snare, clap,
  low_tom, hihat, open_hat, crash, tambourine
)