Strudelify

I Got You Babe

Cher

KeyF majorTempo110 bpm
0:00/0:00
// I Got You Babe — Cher
// 110 bpm, 12/8, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 59 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/6)

// 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 · "Bass"
const bass = note(`<
  A@3 B C A B C D E F A B C A B C D E G H I H I A J@2 K L M N L M N O@4 P O P O P O P O P O Q R@2 S T S T S T S U
>`.pickRestart({
  A: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~", B: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~ eb2@3 ~ eb2 ~",
  C: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ d2@3 ~ d2 ~ e2@3 ~ e2 ~", D: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@2 ~@2 f2 ~ f2@3 ~ f2 ~",
  E: "f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@4 f2 ~ f2@3 ~ f2 ~", F: "f2@4 f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~ f2@3 ~ f2 ~",
  G: "f2@4 f2 ~ f2@2 ~@2 f2 ~ f2 ~@11", H: "g2@3 ~ g2 ~ g2@3 ~ g2 ~ g2@3 ~ g2 ~ g2@3 ~ g2 ~",
  I: "c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~ c2@3 ~ c2 ~", J: "bb2@3 ~ bb2 ~ bb2@3 ~ bb2 ~ bb2@3 ~ bb2 ~ bb2@3 ~ bb2 ~",
  K: "c3@3 ~ c3 ~ c3@2 ~@2 c3 ~ db3@3 ~ db3 ~ db3@3 ~ db3 ~",
  L: "gb2@3 ~ gb2 ~ gb2@3 ~ gb2 ~ gb2@3 ~ gb2 ~ gb2@3 ~ gb2 ~",
  M: "gb2@3 ~ gb2 ~ gb2@3 ~ gb2 ~ gb2@3 ~ gb2 ~ e2@3 ~ e2 ~",
  N: "db2@3 ~ db2 ~ db2@3 ~ db2 ~ eb2@3 ~ eb2 ~ f2@3 ~ f2 ~",
  O: "gb2@3 ~ gb2 ~ gb2@3 ~ gb2 ~ gb2@2 ~@2 gb2 ~ gb2@3 ~ gb2 ~",
  P: "gb2@3 ~ gb2 ~ gb2@3 ~ gb2 ~ db2@2 ~@2 db2 ~ db2@3 ~ db2 ~", Q: "gb2@3 ~ gb2 ~ gb2@3 ~ gb2 ~ db2@2 ~@10",
  R: "[~@2 b1@12 ~@4 gb2@9 ~@3 gb2@3 ~ gb2 ~ gb2@3 ~ gb2 ~ gb2@2 ~@2 gb2 ~]/2",
  S: "gb2@3 ~ gb2 ~ gb2@3 ~ gb2 ~ gb2@3 ~ gb2 ~ db2@2 ~@2 db2 ~",
  T: "db2@3 ~ db2 ~ gb2@3 ~ gb2 ~ gb2@3 ~ gb2 ~ gb2@2 ~@2 gb2 ~", U: "db2@3 ~ db2 ~ gb2@12 ~@6",
})).s("gm_acoustic_bass").gain(0.44)

// chords · pad poly · "Keyboard 1"
const pad_poly = note(`<
  A@3 B C A B C A@4 B C A B C A@2 D E F G H I J@2 K L M N L M N L@4 O L O L O L O L O L P ~ Q@8 R
>`.pickRestart({
  A: "[c4,f4] [d4,f4]", B: "[c4,f4]@2 [d4,f4] [eb4,g4]", C: "[c4,e4]!2 [d4,f4] [e4,g4]", D: "[c4,f4] ~", E: "[bb3,d4]",
  F: "[c4,e4]", G: "[d4,g4]@23 ~", H: "[c4,g4]@23 ~", I: "[c4,f4]@23 ~", J: "[f4,bb4]@23 ~", K: "[c4,g4] [db4,ab4]",
  L: "[db4,gb4] [eb4,gb4]", M: "[db4,gb4]@2 [eb4,gb4] [e4,ab4]", N: "[db4,f4]!2 [eb4,gb4] [f4,ab4]",
  O: "[db4,gb4] [db4,f4]", P: "[db4,gb4] ~",
  Q: "[~ [db4,gb4]@2 [eb4,gb4]@2 [db4,gb4]@2 [db4,f4]@2 [db4,gb4]@2 [eb4,gb4]@2 [db4,gb4]@2 [db4,f4]@2 [db4,gb4]@2 [eb4,gb4]@2 [db4,gb4]@2 [db4,f4]@2 [db4,gb4]@2 [eb4,gb4]@2 [db4,gb4]@2 [db4,f4]]/8", // Gb5 Ebm Gb5 Db Gb5 Ebm Gb5 Db …
  R: "~@6 [bb3,gb4]@13 ~@5", // Ebm
})).s("gm_pad_poly").gain(0.28).pan(0.8)

// other · music box · "Keyboard 2"
const music_box = note(`<
  ~@3 A B C A B C ~@3 A B C A B C ~@2 D@4 E F G ~@2 H I J H I J ~@4 K L K L K L K L K M ~ N O P O Q O R O S
>`.pickRestart({
  A: "~@6 bb5 ~ a5 g5 ~ f5", B: "g5 ~@2 c5 ~@2 d5 ~@2 e5 ~@2", C: "f5 ~@11", D: "~@4 d5 f5 e5@4 ~@2",
  E: "~@2 a5@2 f5@3 ~", F: "~@6 a5@5 ~ f5@7 ~@5", G: "~@6 a5@6 f5@7 ~@5", H: "~@6 b5 ~ bb5 ab5 ~ gb5",
  I: "ab5 ~@2 db5 ~@2 eb5 ~@2 f5 ~@2", J: "gb5 ~@11", K: "bb5@5 ~ bb5@2 ab5@2 gb5@2 b5@5 ~ b5@2 bb5@2 ab5@2",
  L: "bb5@5 ~ bb5@2 ab5@2 gb5@2 ab5@4 ~@2 db5@4 ~@2", M: "bb5@5 ~ bb5@2 ab5@2 gb5@2 ab5@2 ~@10",
  N: "~@6 bb5@5 ~ bb5@2 ab5@2 gb5@2 b5@5 ~", O: "b5@2 bb5@2 ab5@2 bb5@5 ~ bb5@2 ab5@2 gb5@2 ab5@4 ~@2",
  P: "db5@4 ~@2 bb5@5 ~ bb5@2 ab5@2 gb5@2 b5@5 ~", Q: "db5@4 ~@2 bb5@5 ~@3 ab5@2 ~@2 b5@5 ~",
  R: "db5@4 ~@2 bb5@5 ~@3 ab5@2 gb5@2 b5@5 ~", S: "db5@4 ~@2 gb5 ~@17",
})).s("gm_music_box").gain(0.36).pan(0.2)

// other · pad new age · "Keyboard 3"
const pad_new_age = note("<~@3 A B C A B C ~@3 A B C A B C ~@11 D E F D E F ~@24>".pickRestart({
  A: "~@12 bb4 ~@3 a4 ~ g4 ~@3 f4 ~", B: "g4 ~@5 c4 ~@5 d4 ~@5 e4 ~@5", C: "f4 ~@23",
  D: "~@12 b4 ~@3 bb4 ~ ab4 ~@3 gb4 ~", E: "ab4 ~@5 db4 ~@5 eb4 ~@5 f4 ~@5", F: "gb4 ~@23",
})).s("gm_pad_new_age").gain(0.29).pan(0.2)

// other · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note("<A@4 ~@16 B@4 C D E ~@12 F G F G F G F G F H ~ I J K J K J K J L>".pickRestart({
  A: "~@2 [c4,f4] f4 ~ f4 [d4,f4] ~ [d4,f4]!2 ~ [d4,f4], [c4,f4]@2 ~ c4@2 c4@2 ~@5, ~ a3@3 a3@3 bb3@3 bb3@2", // F5 Dm F5
  B: "~@4 d4 f4 e4@4 ~@2", C: "~@2 a4@2 f4@3 ~", D: "~@6 a4@5 ~ f4@7 ~@5", E: "~@6 a4@6 f4@7 ~@5",
  F: "bb4@5 ~ bb4@2 ab4@2 gb4@2 b4@5 ~ b4@2 bb4@2 ab4@2", G: "bb4@5 ~ bb4@2 ab4@2 gb4@2 ab4@4 ~@2 db4@4 ~@2",
  H: "bb4@5 ~ bb4@2 ab4@2 gb4@2 ab4@2 ~@10", I: "~@6 bb4@5 ~ bb4@2 ab4@2 gb4@2 b4@5 ~",
  J: "b4@2 bb4@2 ab4@2 bb4@5 ~ bb4@2 ab4@2 gb4@2 ab4@4 ~@2", K: "db4@4 ~@2 bb4@5 ~ bb4@2 ab4@2 gb4@2 b4@5 ~",
  L: "db4@2 ~ bb3 ~@8",
})).s("gm_acoustic_guitar_nylon").gain(0.44).pan(0.4)

// other · oboe
const oboe = note("<A B ~@6 C@3 ~@6 C@2 D ~@14 E@4 ~@12 F G H I J K J G L>".pickRestart({
  A: "f2 ~@2 f2 ~@2 bb2 ~@2 bb2 ~@2", B: "f2@2 ~@4 f2@2 ~@4 bb2@3 ~@3 bb2@2 ~@4",
  C: "~@2 a4 ~ a4@3 ~ a4 ~ a4@3 ~ bb4 ~ bb4@3 ~ bb4 ~ bb4@2", D: "~@2 a4 ~ a4@3 ~ a4 ~ a4@3 ~@11",
  E: "~@2 bb4 ~ bb4@3 ~ bb4 ~ bb4@3 ~ b4 ~ b4@3 ~ b4 ~ b4@2", F: "~@9 bb4 ~ bb4@2 ~ bb4 ~ bb4@2 ~@2 b4 ~ b4@2",
  G: "~@2 b4 ~ b4@2 ~@2 bb4 ~ bb4@3 ~ bb4 ~ bb4@2 ~@2 ab4 ~ ab4@2",
  H: "~@2 ab4 ~ ab4 ~@3 bb4 ~ bb4@3 ~ bb4 ~ bb4@3 ~ b4 ~ b4@2",
  I: "~@2 b4 ~ b4@2 ~@2 bb4 ~ bb4@3 ~ bb4 ~ bb4@3 ~ ab4 ~ ab4@2",
  J: "~@2 ab4 ~ ab4@2 ~@2 bb4 ~ bb4@3 ~ bb4 ~ bb4@3 ~ b4 ~ b4@2",
  K: "~@2 b4 ~ b4@3 ~ bb4 ~ bb4@3 ~ bb4 ~ bb4@2 ~@2 ab4 ~ ab4@2", L: "~@2 ab4 ~ ab4@2 gb4@12 ~@6",
})).s("gm_oboe").gain(0.42).pan(0.6)

// other · taiko drum · "Timpani"
const taiko_drum = note("<~@2 A@17 B A@14 C@14 D ~ E F@7 G>".pickRestart({
  A: "c4 ~ c4!3 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4!3 ~ c4 ~ c4 ~ c4 ~", B: "c4 ~ c4!3 ~ c4 ~ c4 ~ c4 ~ c4 ~@11",
  C: "db4 ~ db4!3 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4!3 ~ db4 ~ db4 ~ db4 ~", D: "db4 ~ db4!3 ~ db4 ~ db4 ~ db4 ~ db4 ~@11",
  E: "~@6 db4 ~ db4!3 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4!3 ~",
  F: "db4 ~ db4 ~ db4 ~ db4 ~ db4!3 ~ db4 ~ db4 ~ db4 ~ db4 ~ db4!3 ~", G: "db4 ~ db4 ~ db4 ~@19",
})).s("gm_taiko_drum").gain(0.25)

// drums · snare
const snare = s("sd").struct("<~ A B@3 C@5 D E@6 C@2 F C@8 E@6 C@14 G H I J@7 K>".pickRestart({
  A: "~@9 x!3", B: "~ x ~@2 x ~@2 x ~@2 x ~", C: "~ x ~ x", D: "~@3 x ~@5 x!3", E: "~ x!5 ~ x!5",
  F: "~@6 x ~ x ~ x ~ x ~@10 x", G: "~ x!2 ~", H: "~ x ~@7 x ~@2", I: "~ x", J: "x!2", K: "x",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~ A ~@3 B@5 C B@8 D E B@27 F G H I@7 J>".pickRestart({
  A: "~@10 x!2", B: "~ x ~ x", C: "~@3 x ~@6 x!2", D: "~@6 x ~ x ~ x ~ x ~@7 x!4", E: "x!2 ~ x", F: "~ x!2 ~",
  G: "~ x ~@7 x ~@2", H: "~ x", I: "x!2", J: "x",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~ [~@3 x] ~@8 [~@3 x] ~@8 [~@5 x] ~@39>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@20 x ~@28 [~ x ~@7 x ~@2] ~@9>").gain(0.25)

// drums · ride
const ride = s("rd").struct("<~@2 [~@2 x ~@2 x ~@2 x ~@2 x]!3 ~@53 [~ x ~@2]>").gain(0.25)

// drums · tambourine
const tambourine = s("tb").struct("<~@20 [x!12] [x!11 ~] [x!6]!6 ~@31>").gain(0.35)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@21 [~@11 x] [~ x ~ x ~ x ~ x ~ x ~ x]!6 ~@31>").gain(0.2)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A@19 B A@28 B ~ C A@4 D A@2 E>".pickRestart({
  A: "x!12", B: "x!7 ~@5", C: "~@3 x!9", D: "~ x!11", E: "x!3 ~@9",
})).gain(1.26)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!19
  [~ x ~ x ~ x ~ x ~ x ~ x ~@12]
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!28
  [~ x ~ x ~ x ~ x ~ x ~ x ~@12]
  ~
  [~@7 x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!7
  [~ x ~ x ~ x ~@18]
>`).gain(0.25)

// drums · jingle bells
const jingle_bells = s("sleighbells:4").struct("<~@5 A@3 B@3 A@6 B@2 C D B@7 A@6 B@14 E ~ D B@7 F>".pickRestart({
  A: "x!12", B: "x!4", C: "x!3 ~", D: "~ x!3", E: "x!2 ~@2", F: "x",
})).gain(0.43)

stack(
  bass, pad_poly, music_box, pad_new_age, acoustic_guitar_nylon, oboe, taiko_drum, snare, low_tom, mid_tom, crash, ride,
  tambourine, tambourine_soft, cabasa, cabasa_soft, jingle_bells
)

More by Cher