Strudelify
Cecilia cover art

1970 · Bridge Over Troubled Water

Cecilia

Simon & Garfunkel

KeyB majorTempo110 bpm
0:00/0:00
// Cecilia — Simon & Garfunkel
// 110 bpm, 4/4, key B major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 "Trumpet" trumpet (copy of ch 2 "BrassSect" brass section); ch 5 "GtrJazz" electric guitar jazz (copy of ch 6 "GtrClean" electric guitar clean)
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/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.

// chords · acoustic guitar nylon · "GtrNylon"
const acoustic_guitar_nylon = note(`<
  ~@6 A B C D E B F G H B C I J K L@2 M N O P@2 E B F G H B C I Q R S T E B F G H B C U V B F W V B F W X Y Z AA X AB
  ~@4
>`.pickRestart({
  A: "~@10 [c4,f4,a4]!3 ~ [c4,f4] ~", B: "[d4,f4]@4 ~@2 [c4,f4]@3 ~ [c4,f4]!3 ~ [c4,f4] ~",
  C: "[d4,f4]@4 ~@2 [c4,f4]@4 ~@2 [a3,c4] ~ [g3,c4]@2", D: "~@2 [g3,c4]!3 ~ [g3,c4]!3 ~ [g3,c4]!3 ~ [g3,c4]!2",
  E: "[c4,f4] ~ [c4,f4]!3 ~ [c4,f4]!2 [a3,c4] ~ [a3,c4]!3 ~ [c4,f4] ~", F: "[d4,f4]@4 ~@2 [c4,f4]@5 ~@3 [c4,e4]@2",
  G: "~@4 [e3,g3] ~ [e3,g3]!3 ~ [e3,g3]!2 ~@4", // Em
  H: "[d4,f4,a#4] ~ [d4,f4,a#4]!3 ~ [d4,f4,a#4]!2 [c4,f4,a4] ~ [c4,f4,a4]!3 ~ [c4,f4] ~", // A# F F5
  I: "~@2 [g3,c4]!3 ~ [g3,c4]!3 ~@5 [a3,c4]@2", J: "~@2 [a3,c4]!3 ~ [a3,c4]!3 ~ [a3,c4]!3 ~ [a3,c4]!2",
  K: "~@2 [a3,c4]@3 ~ [c4,f4]@5 ~@3 [d4,f4]@2", // Am F5 Dm
  L: "[~@2 [d4,f4]@3 ~ [d4,f4]@3 ~ [d4,f4]@3 ~ [c4,f4]@5 ~ [a3,c4]@3 ~ [c4,f4] ~ [c4,f4]@3 ~ [c4,e4]@2]/2", // Dm F5 Am F5 C
  M: "~@2 [g3,c4]@3 ~ [a3,c4]@3 ~ [a3,c4]!3 ~ [a3,c4]!2", N: "~@2 [a3,c4]@3 ~ [c4,f4]@3 ~ [a3,c4]@3 ~ [d4,f4]@2",
  O: "~@2 [d4,f4]@3 ~ [a#3,d4]@3 ~ [a#3,d4] ~ [a#3,d4]@3 ~", // Dm A#
  P: "[[c4,f4]@3 ~ [c4,f4] ~ [c4,f4]@8 [c4,e4]@6 ~@2 [a3,c4]@3 ~ [a3,c4]!3 ~ [a3,c4]!2]/2", // F5 C Am
  Q: "~@2 [a3,c4]!3 ~ [a3,c4]!3 ~ [a3,c4]!2 ~@4", R: "~@2 [c4,f4] ~ c4@3 ~@3 [a3,c4] ~@5",
  S: "~@2 [d4,f4] ~@3 [d4,f4] ~ d4@3 ~@3 [c4,e4]@2", T: "~@4 [g3,a#3]@2 [g3,a#3]!3 ~ [g3,a#3] ~@5",
  U: "~@2 [g3,c4]!3 ~ [g3,c4]!3 ~@7", // C5
  V: "[d4,f4,a#4] ~ [d4,f4,a#4]!3 ~ [d4,f4,a#4]!2 [c4,f4,a4] ~ [c4,f4,a4]!3 ~ [c4,f4,a4] ~", // A# F
  W: "~@4 [e3,g3] ~ [e3,g3]!3 ~ [e3,g3] ~@5", X: "~@6 [d4,f4] ~@5 [c4,f4]@3 ~", Y: "f4@3 ~@9 [c4,f4]@3 ~",
  Z: "f4@3 ~@3 f4@3 ~@5 [c4,e4]@2", AA: "~@2 [e3,g3]@3 ~ [e3,g3]!3 ~ [e3,g3] ~@5", AB: "f4@3 ~@13",
})).s("gm_acoustic_guitar_nylon").gain(0.28)

// chords · acoustic guitar nylon · "GtrNylon" · soft notes
const acoustic_guitar_nylon_2 = note("<~@5 A B ~@53 C D E F G>".pickRestart({
  A: "~@4 [e3,g3] ~ [e3,g3]!3 ~ [e3,g3]!2 ~@4", B: "[d4,f4,a#4] ~ [d4,f4,a#4]!3 ~ [d4,f4,a#4]!2 [c4,f4,a4] ~@7",
  C: "~@12 [c4,f4]@3 ~", D: "f4@3 ~@3 f4@3 ~@5 [c4,e4]@2", E: "~@2 [e3,g3]@3 ~ [e3,g3]!3 ~ [e3,g3] ~@3 [a3,c4]@2",
  F: "~@2 [a3,c4]!3 ~ [a3,c4]!3 ~ [a3,c4]!3 ~ [a3,c4]!2", G: "[a3,c4] ~ [a3,c4]!3 ~ [a3,c4]!2 [a3,c4]@3 ~@5",
})).s("gm_acoustic_guitar_nylon").gain(0.14)

// bass · acoustic bass · "AcouBass"
const bass = note(`<
  ~@6 A B@2 C D B@2 C B@3 C E D F D G D F D G D B@2 C B@3 C E D F C D B@2 C B@3 C B@3 H B@3 H B@3 C B I ~@4
>`.pickRestart({
  A: "~@12 f2@3 ~", B: "a#1@3 ~ a#1@3 ~ f2@3 ~ f2@3 ~", C: "c2@3 ~ g2@3 ~ c3@3 ~ c2@3 ~",
  D: "f2@3 ~ c2@3 ~ f2@3 ~ f2@3 ~", E: "f2@3 ~ c2@3 ~ f2@3 ~ c2@3 ~", F: "a#1@3 ~ f2@3 ~ a#2@3 ~ a#1@3 ~",
  G: "c2@3 ~ c2@3 ~ f2@3 ~ c2@3 ~", H: "~@4 g2@3 ~ c3@3 ~ c2@3 ~, c2 ~", I: "a#1@3 ~@13",
})).s("gm_acoustic_bass").gain(0.29).pan(0.2)

// bass · acoustic bass · "AcouBass" · soft notes
const bass_soft = note("<~@5 A B ~@53 C D E F G>".pickRestart({
  A: "~@4 g2@3 ~ c3@3 ~ c2@3 ~", B: "a#1@3 ~ a#1@3 ~ f2@3 ~@5", C: "~@4 a#1@3 ~ f2@3 ~ f2@3 ~",
  D: "a#1@3 ~ a#1@3 ~ f2@3 ~ f2@3 ~", E: "c2@3 ~ g2@3 ~ c3@3 ~ c2@3 ~", F: "f2@3 ~ c2@3 ~ f2@3 ~ c2@3 ~",
  G: "f2@3 ~ c2@3 ~ f1@3 ~@5",
})).s("gm_acoustic_bass").gain(0.15).pan(0.2)

// other · electric guitar clean · "GtrClean"
const electric_guitar_clean = note("<~@39 A B C D E B F@2 ~@18>".pickRestart({
  A: "a4@5 ~@3 f4@3 ~@3 a4 ~", B: "a#4 ~ a4 ~ g4 ~ a4@4 ~@4 a4 ~", C: "a#4 ~ a4 ~ g4 ~ a4@3 ~ g4 ~ f4 ~ g4@2",
  D: "~@2 e4 d4 c4@5 ~@3 a4 ~ c5 ~", E: "d5@5 ~@3 c5@3 ~@3 a4 ~", F: "[a#4 ~ a4 ~ g4 ~ a4@3 ~ g4 ~ f4 ~ e4@7 ~@11]/2",
})).s("gm_electric_guitar_clean").gain(0.36).pan(0.6)

// other · synth brass 2 · "BrassSy2"
const synth_brass_2 = note("<~@22 A@2 ~@41>".pickRestart({
  A: "[~@10 c5 ~ c5 ~ c5@7 ~@11]/2",
})).s("gm_synth_brass_2").gain(0.48).pan(0.8)

// other · whistle
const whistle = note("<~@26 [~@8 a5!2 ~ a5 a5@3 ~] ~@38>").s("gm_whistle").gain(0.52).pan(0.2)

// chords · glockenspiel · "Glocknspl"
const glockenspiel = note("<~@38 A B C D E F C G H ~ I J ~ K C D ~@11>".pickRestart({
  A: "~@4 a#4@2 [g4,a#4]!3 ~ [g4,a#4] ~@5, ~@4 g4 ~@11", // Gm
  B: "[c5,f5] ~ [c5,f5]!3 ~ [c5,f5]!2 [a4,c5] ~ [a4,c5]!3 ~ [c5,f5] ~", // F5 Am F5
  C: "[d5,f5]@4 ~@2 [c5,f5]@3 ~ [c5,f5]!3 ~ [c5,f5] ~", D: "[d5,f5]@4 ~@2 [c5,f5]@5 ~@3 [c5,e5]@2",
  E: "~@4 [e4,g4] ~ [e4,g4]!3 ~ [e4,g4]!2 ~@4", // Em
  F: "[d5,f5,a#5] ~ [d5,f5,a#5]!3 ~ [d5,f5,a#5]!2 [c5,f5,a5] ~ [c5,f5,a5]!3 ~ [c5,f5] ~", // A# F F5
  G: "[d5,f5]@4 ~@2 [c5,f5]@4 ~@2 [a4,c5] ~ [g4,c5]@2", H: "~@2 [g4,c5]!3 ~ [g4,c5]!3 ~@7",
  I: "~@10 [c5,f5]!3 ~ [c5,f5] ~", J: "~@7 [c5,e5]",
  K: "[d5,f5,a#5] ~ [d5,f5,a#5]!3 ~ [d5,f5,a#5]!2 [c5,f5,a5] ~ [c5,f5,a5]!3 ~ [c5,f5,a5] ~", // A# F
})).s("gm_glockenspiel").gain(0.11).pan(0.9)

// drums · kick
const kick = s("bd").struct(`<
  [x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x]!55
  [x ~@2 x!2 ~ x!3 ~@2 x!2 ~@2 x]!7
  [x ~@2 x!2 ~@11]
  ~@2
>`).gain(0.3).pan(0.7)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<[~@3 x ~@4]!55 ~@7 [~@6 x!3 ~@2 x!2 ~@2 x] [x ~@2 x!2 ~ x!3 ~@2 x!2 ~@2 x]!2>")
  .gain(0.2).pan(0.7)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!60 ~@5>").gain(0.4).pan(0.7)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@60 [~ x ~ x]!5>").gain(0.2).pan(0.7)

// drums · snare
const snare = s("sd").struct(`<
  [~@7 x]!2
  [x ~ x ~ x ~ x!2]!13
  [x ~@3 x ~@3 x ~@2 x!2 ~ x ~]
  [x ~ x ~ x ~ x!2]!44
  x
  ~@4
>`).gain(0.4).pan(0.7)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@60 [~@2 x ~ x ~ x!2] [x ~ x ~ x ~ x!2]!4>").gain(0.2).pan(0.7)

// drums · low tom
const low_tom = s("lt").struct("<[~@3 x ~@3 x]!39 [x ~ x!3 ~ x!2]!26>").gain(0.2).pan(0.7)

// drums · hihat
const hihat = s("hh").struct(`<
  A@2 B C A@3 C A C A B A@3 C A B A@7 B A B A C A C@2 A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A@3 C A D ~@2
>`.pickRestart({
  A: "x!16", B: "x!5 ~ x!10", C: "x!15 ~", D: "x!6 ~@10",
})).gain(0.3).pan(0.7)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@62 [~@6 x!10] [x!16]!2>").gain(0.1).pan(0.7)

// drums · mid tom
const mid_tom = s("mt").struct("x!4").gain(0.2).pan(0.7)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A B ~@3 B ~ B ~ A ~@3 B ~ A ~@7 A ~ A ~ B ~ B@2 ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@3 B ~@4
>`.pickRestart({
  A: "~@5 x ~@10", B: "~@15 x",
})).gain(0.35).pan(0.7)

// drums · high tom
const high_tom = s("ht").struct("~@3 x ~@7 x ~@4").gain(0.25).pan(0.7)

// drums · cowbell
const cowbell = s("cb").struct(`<
  [x ~ x ~ x ~ x ~ x!5 ~ x ~]!5
  [x!3 ~ x ~ x ~ x!5 ~ x ~]
  [x ~ x ~ x ~ x ~ x!5 ~ x ~]!10
  [x!3 ~ x ~ x ~ x!5 ~ x ~]
  [x ~ x ~ x ~ x ~ x!5 ~ x ~]!48
>`).gain(0.3).pan(0.7)

// drums · congas
const congas = s("conga:13").struct(`<
  A B C@3 A@2 C D B D@2 A B C B D@3 C B D B A C B A D@3 B D@2 C D@3 C D@3 C D@3 C D@3 C D@3 C D E@2 F E@2 G ~@4
>`.pickRestart({
  A: "x ~@2 x!2 ~@4 x ~ x!2 ~@3", B: "x ~@3 x ~@4 x ~ x!2 ~@3", C: "x ~ x ~ x ~@4 x ~ x!2 ~@3",
  D: "x ~ x!3 ~@4 x ~ x!2 ~@3", E: "x!5 ~@4 x ~ x!2 ~@3", F: "x!3 ~ x ~@4 x ~ x!2 ~@3", G: "x!4 ~@12",
})).gain(1.3).pan(0.7)

// drums · congas · soft notes
const congas_soft = s("conga:13").struct("<~ A@23 ~ A@3 ~ A@26 ~@5 B C D C D>".pickRestart({
  A: "~ x ~@14", B: "~@4 x ~@4 x ~ x!2 ~@3", C: "x!3 ~ x ~@4 x ~ x!2 ~@3", D: "x!5 ~@4 x ~ x!2 ~@3",
})).gain(0.65).pan(0.7)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  A B@4 A@2 B A B A@3 B@3 A@3 B@2 A B A B@2 A@4 B A@2 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@2 ~@5
>`.pickRestart({
  A: "~@3 x ~@2 x!2", B: "~@3 x ~@2 x ~@5 x ~ x ~",
})).gain(1.3).pan(0.7)

// drums · congas · soft notes
const congas_soft_2 = s("conga:18").struct(`<
  ~@60
  [~@3 x ~@2 x!2]
  [~@3 x ~@2 x ~@5 x ~ x ~]
  [~@3 x ~@2 x!2]
  [~@3 x ~@2 x ~@5 x ~ x ~]
  [~@3 x ~@2 x!2]
>`).gain(0.65).pan(0.7)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  [x!3 ~ x!3 ~ x!3 ~ x!3 ~]!3
  [~ x!2 ~@2 x!2 ~ x!3 ~ x!3 ~]
  [~ x!2 ~ x!3 ~ x!3 ~ x!3 ~]
  [x!3 ~ x!3 ~ x!3 ~ x!3 ~]!50
  [x!16]!8
  [x!7 ~@9]
  ~
>`).gain(1.28).pan(0.7)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<[~@3 x ~@3 x ~@3 x ~@3 x]!55 ~@8 [~@7 x!9] [x!16]>").gain(0.77).pan(0.7)

// drums · shaker
const shaker = s("sh").struct("<[x!4 ~ x!11] [x!4 ~ x!7 ~ x!3] [x!4 ~ x!11] [~ x!3 ~ x!11]!2 [x!12 ~ x!3] [x!16]!59>")
  .gain(0.3).pan(0.7)

stack(
  acoustic_guitar_nylon, acoustic_guitar_nylon_2, bass, bass_soft, electric_guitar_clean, synth_brass_2, whistle,
  glockenspiel, kick, kick_soft, rim, rim_soft, snare, snare_soft, low_tom, hihat, hihat_soft, mid_tom, open_hat,
// … 2 more lines

More by Simon & Garfunkel