Strudelify

Bernadette

Four Tops

KeyE♭ majorTempo112 bpm
0:00/0:00
// Bernadette — Four Tops
// 112 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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 pick · "bass"
const bass = note(`<
  A@2 B C D E B C F G H I J I K L M L M L N B C D E B C F G H I J I K L M L M L N B C D E B C F G H O P Q R O P S T I J
  I K L M L M L N B C D E B C F G U ~@2 B C D E B C D V ~@5
>`.pickRestart({
  A: "eb2@3 ~ eb2@3 ~ eb2@3 ~ eb2@3 ~", B: "eb2@4 ~@2 f1 bb2 eb2@2 ~ bb1 eb1@2 d1@2, ~@5 eb2 ~@2",
  C: "db2@4 ~@3 ab2 db3@2 ~ ab2 db2@2 c2@2, ~@5 db3 ~@2", D: "b1@4 ~@3 gb2 b2@2 ~ gb2 b1@2 ab1@2, ~@5 b2 ~@2",
  E: "bb1@4 ~@3 eb2 db2@3 bb1 bb2 c2 db2 d2", F: "b1@4 ~@3 bb1 ab1@3 ~ a1@3 ~",
  G: "bb1 d2 ~ f2 ~ ab2 ~ bb2 ~ ab2 f2 ~ ab2@2 bb2 ~", H: "bb1 ~@7", I: "db2@2 db2@4 db2 d2 eb2@2 eb2@3 ~ db2 eb2",
  J: "ab1@2 ab1@4 ~@2 db2@4 db2 bb1 b1 c2", K: "ab1@2 ab1@4 ~@2 db2@4 db2 ~@3",
  L: "ab1@2 ab1@3 ~@2 ab1 bb1@2 bb1@2 ~@3 bb1", M: "db2@2 db2@3 bb1 db2 ~@2 bb1 ab1 ~ db2@2 db2 eb2",
  N: "db2@2 db2@3 bb1 db2 ~@2 bb1 ab1 ~ db2@2 d2 ~", O: "gb1@3 ~ gb1@3 ~ gb1@2 gb1@2 ab1@2 bb1@2",
  P: "b1@3 ~ b1@3 b1 gb1@2 b1@2 db2@2 d2@2", Q: "eb2@3 ~ eb2@3 eb2 bb1@2 d2@2 eb2@2 a1@2",
  R: "bb1@3 ~ bb1@3 ~ b1@3 ~ b1@3 ~", S: "eb2@2 eb2@2 ~ eb2 bb1 d2 eb2@2 eb2@2 ~@2 gb2 ab2", T: "bb2", U: "bb1",
  V: "bb1@4 ~@3 eb2 db2@3 bb1 ~@4",
})).s("gm_electric_bass_pick").gain(0.72)

// bass · electric bass pick · "bass" · soft notes
const bass_soft = note(`<
  ~@85
  [~@12 bb2 c2 db2 d2]
  [eb2@4 ~@2 f1 bb2 eb2@2 ~ bb1 eb1@2 d1@2, ~@5 eb2 ~@2]
  [db2@4 ~@3 ab2 db3@2 ~ ab2 db2@2 c2@2, ~@5 db3 ~@2]
  [b1@4 ~@3 gb2 b2@2 ~ gb2 b1@2 ab1@2, ~@5 b2 ~@2]
  [bb1@4 ~@3 eb2 db2@3 bb1 bb2 c2 db2 d2]
  ~
>`).s("gm_electric_bass_pick").gain(0.16)

// chords · electric guitar clean · "guitar"
const electric_guitar_clean = note(`<
  A B ~@9 C D C D E F E F G F ~@9 C D C D E F E F G F ~@9 H I J K H I J L C D C D E F E F G F ~@24
>`.pickRestart({
  A: "[bb3,eb4,g4]@3 ~ [bb3,eb4,g4]@3 ~ [bb3,eb4,g4]@3 ~ [bb3,eb4,g4]@3 ~", // Eb
  B: "[bb3,eb4,g4]@3 ~ [bb3,g4]@3 ~ [bb3,eb4,g4]@3 ~ [bb3,eb4,g4]@3 ~", // Eb
  C: "[bb3,db4,gb4]@3 ~ [bb3,db4,gb4]@3 ~ [bb3,eb4,gb4]@3 ~ [bb3,eb4,gb4]@3 ~", // Gb Ebm
  D: "[b3,eb4,ab4]@3 ~ [b3,eb4,ab4]@3 ~ [b3,db4,gb4]@3 ~ [b3,eb4,gb4]@3 ~", // Abm Bsus2 B
  E: "[b3,eb4,ab4]@3 ~ [b3,eb4,ab4]@3 ~ [bb3,db4,gb4]@3 ~ [bb3,db4,gb4]@3 ~", // Abm Gb
  F: "[ab3,db4,gb4]@3 ~ [ab3,db4,gb4]@3 ~ [ab3,db4,f4]@3 ~ [ab3,db4,f4]@3 ~", // Dbsus4 Db
  G: "[b3,eb4,ab4]@3 ~ [b3,eb4,ab4]@3 ~ [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~", // Abm Bbm
  H: "[bb3,db4,gb4]@3 ~ [bb3,db4,gb4]@3 ~ [bb3,db4,gb4]@3 ~ [bb3,db4,gb4]@3 ~", // Gb
  I: "[bb3,eb4,gb4]@3 ~ [b3,eb4,ab4]@3 ~ [bb3,eb4,gb4]@3 ~ [b3,eb4,ab4]@2 ~@2", // Ebm Abm Ebm Abm
  J: "[bb3,eb4,ab4]@3 ~ [bb3,eb4,gb4]@3 ~ [bb3,eb4,gb4]@3 ~ [bb3,eb4,gb4]@3 ~", // Ebsus4 Ebm
  K: "[d4,f4,bb4]@3 ~ [d4,f4,bb4]@3 ~ [ab3,d4,f4,b4]@3 ~ [ab3,d4,f4,b4]@3 ~", L: "[d4,f4]!16",
})).s("gm_electric_guitar_clean").gain(0.29).pan(0.8)

// other · rock organ · "organ"
const rock_organ = note("<A@2 B C@2 D C@3 ~@12 A@7 ~@12 B C@6 ~@20 B C@6 ~@4 B C@3 B C@2 E ~@5>".pickRestart({
  A: "eb6!8", B: "eb6!2 [eb5,eb6]!6", C: "[eb5,eb6]!8", D: "[d5,d6]!4 [eb5,eb6]!4", E: "[d5,d6]!4 [eb5,eb6]!2 ~@2",
})).s("gm_rock_organ").gain(0.12).pan(1)

// other · rock organ · "organ" · soft notes · Eb D Eb
const rock_organ_soft = note("<~@85 [~@6 [eb5,eb6]!2] [eb6!2 [eb5,eb6]!6] [[eb5,eb6]!8]!2 [[d5,d6]!4 [eb5,eb6]!4] ~>")
  .s("gm_rock_organ").gain(0.03).pan(1)

// other · oboe
const oboe = note(`<
  ~@2 A@2 B C A@2 D E ~@11 A@2 B C A@2 D E ~@11 A@2 B C A@2 D E ~@19 A@2 B C A@2 D E ~@3 A@2 B C A@2 B F ~@5
>`.pickRestart({
  A: "[eb5@18 db5@4 eb5@2 f5@3 eb5@2 db5@3]/2", B: "gb5", C: "f5@2 db5 f5", D: "gb5 ab5", E: "bb5", F: "f5@2 db5 ~",
})).s("gm_oboe").gain(0.29).pan(1)

// other · oboe · soft notes
const oboe_soft = note("<~@85 A B@2 C D ~>".pickRestart({
  A: "~@3 f5", B: "[eb5@18 db5@4 eb5@2 f5@3 eb5@2 db5@3]/2", C: "gb5", D: "f5@2 db5 f5",
})).s("gm_oboe").gain(0.07).pan(1)

// other · french horn · "horn"
const french_horn = note("<~@11 A B A B ~@15 A B A B ~@15 A C D E F C@2 G A B A B ~@30>".pickRestart({
  A: "gb4", B: "eb4@4 db4 ~ eb4 ~", C: "eb4", D: "eb4@3 ~@5", E: "bb3@3 bb3 b3@4", F: "gb4@6 ~ eb4", G: "bb3 ~",
})).s("gm_french_horn").gain(0.29).pan(0)

// chords · piano
const piano = note(`<
  A@3 B C D A B C E F G H G H I J I J K J A B C D A B C E F G H G H I J I J K J L M N O L M N P F ~@8 G H G H I J I J K
  J A B C D A B C E Q@3 A B C D A B C D A B C D ~
>`.pickRestart({
  A: "[eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@3 ~", // Eb
  B: "[db4,f4,ab4]@3 ~ [db4,f4,ab4]@3 ~ [db4,f4,ab4]@3 ~ [db4,f4,ab4]@3 ~", // Db
  C: "[b3,eb4,gb4]@3 ~ [b3,eb4,gb4]@3 ~ [b3,eb4,gb4]@3 ~ [b3,eb4,gb4]@3 ~", // B
  D: "[bb3,d4,f4]@3 ~ [bb3,d4,f4]@3 ~ [ab4,db5,f5]@3 ~ [ab4,db5,f5]@3 ~", // Bb Db
  E: "[bb3,d4,f4]@3 ~ [bb3,d4,f4]@3 ~ [bb3,d4,f4]@3 ~ [bb3,d4,f4]@3 ~", F: "[bb2,d4,f4]",
  G: "[bb3,db4,gb4]@3 ~ [bb3,db4,gb4]@3 ~ [bb3,eb4,gb4]@3 ~ [bb3,eb4,gb4]@3 ~", // Gb Ebm
  H: "[b3,eb4,ab4]@3 ~ [b3,eb4,ab4]@3 ~ [b3,db4,gb4]@3 ~ [b3,eb4,gb4]@3 ~", // Abm Bsus2 B
  I: "[b3,eb4,ab4]@3 ~ [b3,eb4,ab4]@3 ~ [bb3,db4,gb4]@3 ~ [bb3,db4,gb4]@3 ~", // Abm Gb
  J: "[ab3,db4,gb4]@3 ~ [ab3,db4,gb4]@3 ~ [ab3,db4,f4]@3 ~ [ab3,db4,f4]@3 ~", // Dbsus4 Db
  K: "[b3,eb4,ab4]@3 ~ [b3,eb4,ab4]@3 ~ [db4,f4,bb4]@3 ~ [db4,f4,bb4]@3 ~", // Abm Bbm
  L: "[eb4,g4,bb4,bb5,eb6] [bb5,eb6] [eb4,g4,bb4,bb5,eb6] [bb5,eb6] [eb4,g4,bb4,bb5,eb6] [bb5,eb6] [eb4,g4,bb4,bb5,eb6] [bb5,eb6]", // Eb Eb5 Eb Eb5 Eb Eb5 Eb Eb5
  M: "[db4,f4,ab4,ab5,eb6] [ab5,eb6] [db4,f4,ab4,ab5,eb6] [ab5,eb6] [db4,f4,ab4,ab5,eb6] [ab5,eb6] [db4,f4,ab4,ab5,eb6] [ab5,eb6]", // Db Ab5 Db Ab5 Db Ab5 Db Ab5
  N: "[b3,eb4,gb4,b5,gb6] [b5,gb6] [b3,eb4,gb4,b5,gb6] [b5,gb6] [b3,eb4,gb4,b5,gb6] [b5,gb6] [b3,eb4,gb4,b5,gb6] [b5,gb6]", // B B5 B B5 B B5 B B5
  O: "[bb3,d4,f4,bb5,d6] [bb5,d6] [bb3,d4,f4,bb5,d6] [bb5,d6] [ab4,db5,f5,bb5,db6] [bb5,db6] [ab4,db5,f5,bb5,db6] [bb5,db6]", // Bb Bbm7 Bbm Bbm7 Bbm
  P: "[bb3,d4,f4,bb5,d6] [bb5,d6] [bb3,d4,f4,bb5,d6] [bb5,d6] [bb3,d4,f4,bb5,d6] [bb5,d6] [bb3,d4,f4,bb5,d6] [bb5,d6]", // Bb
  Q: "[[bb2,d4] ~@2, f4@5 ~]/3", // Bb
})).s("gm_piano").gain(0.05).pan(0)

// chords · piccolo
const piccolo = note(`<
  A@3 B C D A B C E ~@11 A B C D A B C E ~@11 A B C D A B C E ~ F G H I F G H J ~@10 A B C D A B C E ~@3 A B C D A B C K
  ~@5
>`.pickRestart({
  A: "[bb5,eb6]!8", B: "[ab5,eb6]!8", C: "[b5,gb6]!8", D: "[bb5,d6]!4 [bb5,db6]!4", E: "[bb5,d6]!8",
  F: "bb5@4 ~ ab5 gb5 ab5", G: "bb5@2 ab5@2 gb5 f5 eb5 f5", H: "ab5@2 gb5@3 f5 eb5@2", I: "f5@2 ~ f5 f5@4", J: "bb5",
  K: "[bb5,d6]!4 [bb5,db6]!2 ~@2", // Bb Bbm
})).s("gm_piccolo").gain(0.04).pan(0)

// chords · piccolo · soft notes · Bbm Eb5 Ab5 B5 Bb Bbm
const piccolo_soft = note(`<
  ~@85
  [~@6 [bb5,db6]!2]
  [[bb5,eb6]!8]
  [[ab5,eb6]!8]
  [[b5,gb6]!8]
  [[bb5,d6]!4 [bb5,db6]!4]
  ~
>`).s("gm_piccolo").gain(0.01).pan(0)

// drums · kick
const kick = s("bd").struct("<A@10 ~ A@18 ~ A@18 ~ A@26 ~@3 A@12 ~>".pickRestart({
  A: "x!4",
})).gain(0.26)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@85 [~@12 x!3 ~] [x!4]!3 [x ~@3 x ~@3 x ~ x ~ x!3 ~] ~>").gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~@8 A ~@18 A ~@18 A ~@42>".pickRestart({
  A: "~@12 x!3 ~",
})).gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<~ A ~@8 A ~@13 B ~@4 A ~@18 A ~@42>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x",
})).gain(0.51)

// drums · tambourine
const tambourine = s("tb").struct("<~@2 A@8 ~ A@18 ~ A@18 ~ A@26 ~@3 A@7 B ~@5>".pickRestart({
  A: "x!8", B: "x!6 ~@2",
})).gain(0.51)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<[x!16]!2 ~@83 [~@6 x!2] [x!8]!4 ~>").gain(0.31)

stack(
  bass, bass_soft, electric_guitar_clean, rock_organ, rock_organ_soft, oboe, oboe_soft, french_horn, piano, piccolo,
  piccolo_soft, kick, snare, snare_soft, mid_tom, high_tom, tambourine, tambourine_soft
)

More by Four Tops