Strudelify

I Got You Babe

Sonny & Cher

KeyF♯ majorTempo109 bpm
0:00/0:00
// I Got You Babe — Sonny & Cher
// 109 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(109/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 ~ d#2@3 ~ d#2 ~",
  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: "a#2@3 ~ a#2 ~ a#2@3 ~ a#2 ~ a#2@3 ~ a#2 ~ a#2@3 ~ a#2 ~",
  K: "c3@3 ~ c3 ~ c3@2 ~@2 c3 ~ c#3@3 ~ c#3 ~ c#3@3 ~ c#3 ~",
  L: "f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~",
  M: "f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ e2@3 ~ e2 ~",
  N: "c#2@3 ~ c#2 ~ c#2@3 ~ c#2 ~ d#2@3 ~ d#2 ~ f2@3 ~ f2 ~",
  O: "f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2@2 ~@2 f#2 ~ f#2@3 ~ f#2 ~",
  P: "f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ c#2@2 ~@2 c#2 ~ c#2@3 ~ c#2 ~", Q: "f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ c#2@2 ~@10",
  R: "[~@2 b1@12 ~@4 f#2@9 ~@3 f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2@2 ~@2 f#2 ~]/2",
  S: "f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ c#2@2 ~@2 c#2 ~",
  T: "c#2@3 ~ c#2 ~ f#2@3 ~ f#2 ~ f#2@3 ~ f#2 ~ f#2@2 ~@2 f#2 ~", U: "c#2@3 ~ c#2 ~ f#2@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] [d#4,g4]", C: "[c4,e4]!2 [d4,f4] [e4,g4]", D: "[c4,f4] ~", E: "[a#3,d4]",
  F: "[c4,e4]", G: "[d4,g4]@23 ~", H: "[c4,g4]@23 ~", I: "[c4,f4]@23 ~", J: "[f4,a#4]@23 ~", K: "[c4,g4] [c#4,g#4]",
  L: "[c#4,f#4] [d#4,f#4]", M: "[c#4,f#4]@2 [d#4,f#4] [e4,g#4]", N: "[c#4,f4]!2 [d#4,f#4] [f4,g#4]",
  O: "[c#4,f#4] [c#4,f4]", P: "[c#4,f#4] ~",
  Q: "[~ [c#4,f#4]@2 [d#4,f#4]@2 [c#4,f#4]@2 [c#4,f4]@2 [c#4,f#4]@2 [d#4,f#4]@2 [c#4,f#4]@2 [c#4,f4]@2 [c#4,f#4]@2 [d#4,f#4]@2 [c#4,f#4]@2 [c#4,f4]@2 [c#4,f#4]@2 [d#4,f#4]@2 [c#4,f#4]@2 [c#4,f4]]/8", // F#5 D#m F#5 C# F#5 D#m F#5 C# …
  R: "~@6 [a#3,f#4]@13 ~@5", // D#m
})).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 a#5 ~ 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 ~ a#5 g#5 ~ f#5",
  I: "g#5 ~@2 c#5 ~@2 d#5 ~@2 f5 ~@2", J: "f#5 ~@11", K: "a#5@5 ~ a#5@2 g#5@2 f#5@2 b5@5 ~ b5@2 a#5@2 g#5@2",
  L: "a#5@5 ~ a#5@2 g#5@2 f#5@2 g#5@4 ~@2 c#5@4 ~@2", M: "a#5@5 ~ a#5@2 g#5@2 f#5@2 g#5@2 ~@10",
  N: "~@6 a#5@5 ~ a#5@2 g#5@2 f#5@2 b5@5 ~", O: "b5@2 a#5@2 g#5@2 a#5@5 ~ a#5@2 g#5@2 f#5@2 g#5@4 ~@2",
  P: "c#5@4 ~@2 a#5@5 ~ a#5@2 g#5@2 f#5@2 b5@5 ~", Q: "c#5@4 ~@2 a#5@5 ~@3 g#5@2 ~@2 b5@5 ~",
  R: "c#5@4 ~@2 a#5@5 ~@3 g#5@2 f#5@2 b5@5 ~", S: "c#5@4 ~@2 f#5 ~@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 a#4 ~@3 a4 ~ g4 ~@3 f4 ~", B: "g4 ~@5 c4 ~@5 d4 ~@5 e4 ~@5", C: "f4 ~@23",
  D: "~@12 b4 ~@3 a#4 ~ g#4 ~@3 f#4 ~", E: "g#4 ~@5 c#4 ~@5 d#4 ~@5 f4 ~@5", F: "f#4 ~@23",
})).s("gm_pad_new_age").gain(0.29).pan(0.2)

// other · acoustic guitar nylon
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 a#3@3 a#3@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: "a#4@5 ~ a#4@2 g#4@2 f#4@2 b4@5 ~ b4@2 a#4@2 g#4@2", G: "a#4@5 ~ a#4@2 g#4@2 f#4@2 g#4@4 ~@2 c#4@4 ~@2",
  H: "a#4@5 ~ a#4@2 g#4@2 f#4@2 g#4@2 ~@10", I: "~@6 a#4@5 ~ a#4@2 g#4@2 f#4@2 b4@5 ~",
  J: "b4@2 a#4@2 g#4@2 a#4@5 ~ a#4@2 g#4@2 f#4@2 g#4@4 ~@2", K: "c#4@4 ~@2 a#4@5 ~ a#4@2 g#4@2 f#4@2 b4@5 ~",
  L: "c#4@2 ~ a#3 ~@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 a#2 ~@2 a#2 ~@2", B: "f2@2 ~@4 f2@2 ~@4 a#2@3 ~@3 a#2@2 ~@4",
  C: "~@2 a4 ~ a4@3 ~ a4 ~ a4@3 ~ a#4 ~ a#4@3 ~ a#4 ~ a#4@2", D: "~@2 a4 ~ a4@3 ~ a4 ~ a4@3 ~@11",
  E: "~@2 a#4 ~ a#4@3 ~ a#4 ~ a#4@3 ~ b4 ~ b4@3 ~ b4 ~ b4@2", F: "~@9 a#4 ~ a#4@2 ~ a#4 ~ a#4@2 ~@2 b4 ~ b4@2",
  G: "~@2 b4 ~ b4@2 ~@2 a#4 ~ a#4@3 ~ a#4 ~ a#4@2 ~@2 g#4 ~ g#4@2",
  H: "~@2 g#4 ~ g#4 ~@3 a#4 ~ a#4@3 ~ a#4 ~ a#4@3 ~ b4 ~ b4@2",
  I: "~@2 b4 ~ b4@2 ~@2 a#4 ~ a#4@3 ~ a#4 ~ a#4@3 ~ g#4 ~ g#4@2",
  J: "~@2 g#4 ~ g#4@2 ~@2 a#4 ~ a#4@3 ~ a#4 ~ a#4@3 ~ b4 ~ b4@2",
  K: "~@2 b4 ~ b4@3 ~ a#4 ~ a#4@3 ~ a#4 ~ a#4@2 ~@2 g#4 ~ g#4@2", L: "~@2 g#4 ~ g#4@2 f#4@12 ~@6",
})).s("gm_oboe").gain(0.42).pan(0.6)

// other · taiko drum
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: "c#4 ~ c#4!3 ~ c#4 ~ c#4 ~ c#4 ~ c#4 ~ c#4!3 ~ c#4 ~ c#4 ~ c#4 ~", D: "c#4 ~ c#4!3 ~ c#4 ~ c#4 ~ c#4 ~ c#4 ~@11",
  E: "~@6 c#4 ~ c#4!3 ~ c#4 ~ c#4 ~ c#4 ~ c#4 ~ c#4!3 ~",
  F: "c#4 ~ c#4 ~ c#4 ~ c#4 ~ c#4!3 ~ c#4 ~ c#4 ~ c#4 ~ c#4 ~ c#4!3 ~", G: "c#4 ~ c#4 ~ c#4 ~@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 Sonny & Cher