Strudelify

I Am a Rock

Simon & Garfunkel

KeyC majorTempo60 bpm
0:00/0:00
// I Am a Rock — Simon & Garfunkel
// 60 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 40 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(60/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
const acoustic_guitar_nylon = note("<A B@2 C D ~@32 E F G>".pickRestart({
  A: "~@8 c3@3 c3 ~ e3 [e3,f3]!2, ~@3 c3", // Fmaj7
  B: "[[e3,f3] c3@3 c3 ~ e3 [e3,f3] f3 [e3,f3] c3@3 c3 c3@4 ~ c3@3 c3 ~ e3 f3 [e3,f3]!2 c3@3 c3, ~@5 c3@4 ~@14 c3@4 ~@5]/2", // Fmaj7
  C: "c3@3 c3@4 c3@3 c3@3 ~ c3@2", D: "~ c3 ~@2 [e3,f3]!3 c3@3 c3 c3@4 ~, ~@2 c3@4 ~ e3 ~@8", E: "~@13 c3@3",
  F: "c3 ~ e3 [e3,f3] f3 [e3,f3] c3@3 c3 ~@2 e3 f3 [e3,f3] ~, ~ c3@5 ~@5 c3@5", // Fmaj7
  G: "[e3,f3] c3@5 c3@2 c3@6 ~@2, ~ e3 ~@14", // Fmaj7
})).s("gm_acoustic_guitar_nylon").gain(0.31)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E ~ F G H I J K L M N O P Q R S R T U V W X Y Z AA AB AC AD AE AF AG@2 AH@2 AI AJ
>`.pickRestart({
  A: "~@13 e4 [e4,f4]!2", B: "[e4,f4] ~@5 e4 [e4,f4] f4 [e4,f4] ~@6", C: "~@8 e4 f4 [e4,f4]!2 ~@4",
  D: "~@5 [f4,a4,c5]@3 [f4,a4,c5]@3 ~ [f4,a4,c5]@4", E: "~@4 [e4,f4]!3 e4 ~@8",
  F: "~@4 [a3,c4,f4]!4 [g3,d4,e4]!4 [a3,c4,f4]!4", G: "[g3,d4,e4]!4 [a3,c4,f4]!8 [g3,b3,f4]!4",
  H: "[g3,b3,f4]!4 [g3,c4,e4]!8 [g3,b3,f4]!4", I: "[g3,b3,f4]!4 [g3,c4,e4]!12", J: "[g3,c4,e4]!4 [a3,c4,e4]!12",
  K: "[a3,c4,e4]!4 [g3,c4,e4]!12", L: "[g3,c4,e4]!4 [a3,c4,f4]!8 [g3,c4,e4]!4", M: "[g3,c4,e4]!12 [a3,d4,f4]!4",
  N: "[g3,b3,f4]!4 [a3,c4,f4]!4 [g3,c4,e4]!8", O: "[a3,c4,f4]!4 [g3,d4,e4]!4 [a3,c4,f4]!4 [g3,d4,e4]!4",
  P: "[a3,c4,f4]!8 [g3,b3,f4]!8", Q: "[g3,c4,e4]!8 [g3,b3,f4]!8", R: "[g3,c4,e4]!16", S: "[a3,c4,e4]!16",
  T: "[a3,c4,f4]!8 [g3,c4,e4]!8", U: "[g3,c4,e4]!8 [a3,d4,f4]!4 [g3,b3,f4]!4",
  V: "[a3,c4,f4]!4 [g3,c4,e4]!8 [a3,c4,f4]!4", W: "[g3,d4,e4]!4 [a3,c4,f4]!4 [g3,d4,e4]!4 [a3,c4,f4]!4",
  X: "[a3,c4,f4]!4 [g3,b3,f4]!8 [g3,c4,e4]!4", Y: "[g3,c4,e4]!4 [g3,b3,f4]!8 [g3,c4,e4]!4",
  Z: "[g3,c4,e4]!12 [a3,c4,e4]!4", AA: "[a3,c4,e4]!12 [g3,c4,e4]!4", AB: "[g3,c4,e4]!12 [a3,c4,f4]!4",
  AC: "[a3,c4,f4]!4 [g3,c4,e4]!12", AD: "[g3,c4,e4]!4 [a3,d4,f4]!4 [g3,b3,f4]!4 [a3,c4,f4]!4",
  AE: "[g3,c4,e4]!8 [a3,c4,f4]!4 [g3,d4,e4]!4", AF: "[a3,c4,f4]!4 [g3,d4,e4]!4 [a3,c4,f4]!8",
  AG: "[g3,b3,f4]!8 [g3,c4,e4]!8", // G7 C
  AH: "[[g3,c4,e4]!8 [a3,d4,f4]@2 [g3,b3,f4]@2 [g3,c4,e4]@8 [a3,d4,f4]@4 [g3,b3,f4]@4 ~ [g3,c4,e4]@3]/2", // C Dm G7 C Dm G7 C
  AI: "~@2 e4 [e4,f4] f4 [e4,f4] ~@6 e4 f4 [e4,f4] ~", AJ: "[e4,f4] e4 ~@14",
})).s("gm_acoustic_guitar_steel").gain(0.15)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@5 A B C D E@2 F G H I J K L M N O P Q R S T U@2 V W X Y Z AA AB AC AD ~@3
>`.pickRestart({
  A: "~@3 b4 ~@3 f5!2 a4 c5 ~ e5 g4 c5 e5, d5@2 f4@2 ~ a4@2 ~@9, ~ a4@2 ~ b4@2 f4@2 ~@8",
  B: "g4 c5 e5 g4 d5 ~@2 d5 e5 ~ f4 e5 d5 ~@2 d5, ~@5 e4@2 ~@2 e4@2 ~@2 e4@2 ~, ~@3 f4 ~@3 f4",
  C: "e5 ~ f4 e5 d5 ~@2 d5 f5 ~ d5 f5 g5 ~ d5 g5, ~ e4@2 ~@2 e4@2 ~@9, ~@6 f4@2 ~ a4@2 ~@2 b4@2 ~",
  D: "[d5,g5]!4 g4 e5 c5 g4!2 a4 c5 d5 b4 g5 d5 b4", // G5
  E: "[b4 g5 d5 b4 [g4,c5,e5] [c5,e5] [g4,c5,e5] [g4,c5,e5]@2 [g4,c5,e5] [a4,d5,f5] [g4,c5,e5]!2 [c5,e5] [g4,c5,e5] [g4,c5,e5]@2 [g4,c5,e5] ~ [g4,c5,e5] [b4,d5,e7] [e4,g4,c5] ~ [g4,b4,d5] [g4,c5,e5]@2 ~@6, ~@9 [a4,d5,f5] ~@6]/2", // C Dm C E7 C G C Dm
  F: "~@4 e5 c5 g4 e5 c5 g4 e5 c5 g4 e5 c5 g4", G: "e5 c5 g4 ~ f5 c5 a4 f5 c5 a4 f5 c5 e5 c5 g4 e5",
  H: "c5 g4 e5 c5 e5 c5 g4 e5 c5 g4 e5 c5 f5 d5 a4 d5", I: "f5 d5 b4 d5 f5 d5 a4 f5 e5 c5 g4 e5 c5 g4 e5 c5",
  J: "d5 ~@2 d5 e5 ~ f4 e5 d5 ~@2 d5 e5 ~ f4 e5, ~ e4@2 ~@2 e4@2 ~@2 e4@2 ~@2 e4@2 ~, ~ f4 ~@3 f4 ~@2",
  K: "d5 ~@2 d5 f5 ~ d5 f5 g5 ~ d5 g5 [d5,g5]!4, ~ e4@2 ~@13, ~@2 f4@2 ~ a4@2 ~@2 b4@2 ~@5", // G5
  L: "g4 e5 c5 g4!2 a4 c5 d5 b4 g5 d5 b4!2 g5 d5 b4",
  M: "[g4,c5,e5] [c5,e5] [g4,c5,e5] [g4,c5,e5]@2 [g4,c5,e5] [a4,d5,f5] [g4,c5,e5]!2 [c5,e5] [g4,c5,e5] [g4,c5,e5]@2 [g4,c5,e5] ~ [g4,c5,e5], ~@7 [a4,d5,f5]", // C Dm C Dm
  N: "[b4,d5,e7] [e4,g4,c5] ~ [g4,b4,d5] [g4,c5,e5]@2 ~@10", O: "e5 c5 g4 e5 c5 g4 e5 c5 g4 e5 c5 g4 e5 c5 g4 ~",
  P: "f5 c5 a4 f5 c5 a4 f5 c5 e5 c5 g4 e5 c5 g4 e5 c5", Q: "e5 c5 g4 e5 c5 g4 e5 c5 f5 d5 a4 d5 f5 d5 b4 d5",
  R: "f5 d5 a4 f5 e5 c5 g4 e5 c5 g4 e5 c5 d5 ~@2 d5, ~@13 e4@2 ~, ~@7 f4",
  S: "e5 ~ f4 e5 d5 ~@2 d5 e5 ~ f4 e5 d5 ~@2 d5, ~ e4@2 ~@2 e4@2 ~@2 e4@2 ~@2 e4@2 ~, ~@3 f4 ~@3 f4",
  T: "f5 ~ d5 f5 g5 ~ d5 g5 [d5,g5]!4 g4 e5 c5 g4, ~ a4@2 ~@2 b4@2 ~@9", // G5
  U: "[g4 a4 c5 d5 b4 g5 d5 b4!2 g5 d5 b4 [g4,c5,e5] [c5,e5] [g4,c5,e5] [g4,c5,e5]@2 [g4,c5,e5] [a4,d5,f5] [g4,c5,e5]!2 [c5,e5] [g4,c5,e5] [g4,c5,e5]@2 [g4,c5,e5] ~ [g4,c5,e5] [b4,d5,e7] [e4,g4,c5] ~ [g4,b4,d5], ~@13 [a4,d5,f5] ~@2]/2", // C Dm C E7 C G Dm
  V: "[g4,c5,e5]@2 ~@10 e5 c5 g4 e5", W: "c5 g4 e5 c5 g4 e5 c5 g4 e5 c5 g4 ~ f5 c5 a4 f5",
  X: "c5 a4 f5 c5 e5 c5 g4 e5 c5 g4 e5 c5 e5 c5 g4 e5", Y: "c5 g4 e5 c5 f5 d5 a4 d5 f5 d5 b4 d5 f5 d5 a4 f5",
  Z: "e5 c5 g4 e5 c5 g4 e5 c5 d5 ~@2 d5 e5 ~ f4 e5, ~@9 e4@2 ~@2 e4@2 ~, ~@5 f4 ~@2",
  AA: "d5 ~@2 d5 e5 ~ f4 e5 d5 ~@2 d5 f5 ~ d5 f5, ~ e4@2 ~@2 e4@2 ~@2 e4@2 ~@5, ~@2 f4@2 ~@6 f4@2 ~ a4@2 ~",
  AB: "g5 ~ d5 g5 [d5,g5]!4 g4 e5 c5 g4!2 a4 c5 d5, ~ b4@2 ~@13", // G5
  AC: "b4 g5 d5 b4!2 g5 d5 b4 [g4,c5,e5] [c5,e5] [g4,c5,e5] [g4,c5,e5]@2 [g4,c5,e5] [a4,d5,f5] [g4,c5,e5]", // C Dm C
  AD: "[g4,c5,e5] ~@3", // C
})).s("gm_electric_guitar_clean").gain(0.45)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<A B@4 ~@33 C D>".pickRestart({
  A: "~@13 e4 [e4,f4]!2", // Fmaj7
  B: "[[e4,f4]@6 e4 [e4,f4] f4 [e4,f4]@15 e4 f4 [e4,f4] f4@10 [f4,a4,c5]@3 [f4,a4,c5]@3 ~ f4@8 [e4,f4]!3 e4 ~@8, ~@27 e4@24 ~@13, ~@44 [a4,c5]@11 ~@9]/4", // Fmaj7 F Fmaj7 Am
  C: "~@2 e4 [e4,f4] f4 [e4,f4] ~@6 e4 f4 [e4,f4] ~", D: "[e4,f4] e4 ~@14",
})).s("gm_electric_guitar_clean").gain(0.15)

// bass · acoustic bass · "Marc Pellerin"
const bass = note("<~@4 A B C D E F@5 G H I@2 J K L M N O P Q R@4 S T U V W@2 X Y ~@2>".pickRestart({
  A: "~@13 [b2,c3] [e2,f2,f#2,g2,g#2,a2,a#2] [c2,c#2,d2,d#2]", B: "d2@3 d2 g2@3 g2 f2@3 f2 c2!4",
  C: "c2!4 d2@3 d2 e2@4 d2@3 d2", D: "e2@4 d2@3 d2 f2@3 f2 g2!4", E: "g1 c2 g1 c2@3 c2@2 d2 e2 f2 g2@3 g2@2",
  F: "[~ d2 e2@2 c2!2 ~ c2@2 c2 d2 c2!3 ~ c2@2 c2 d2 c2 a1!2 e2 a2@2 e2 a2@2 a1!2 e2 a2@2 e2 a2@2 c2@2 c2 c2@2 c2!2 ~ c2@2 c2 c2@2 d2 e2 ~ f2@2 f2 ~ f2 g2 a2 c3 c2 ~ c2 c2@2 c2 c2@2 c2@2 c2!2 ~ d2 e2 ~ d2@2 d2@2]/5",
  G: "b2 ~ b2!2 a2@2 a2@2 c2@2 c2!2 ~ c2!2 ~", H: "d2@3 d2 e2@4 d2@3 d2 e2@4",
  I: "[d2@3 d2 f2@3 f2 g2!4 g1 c2 g1 c2@3 c2@2 d2 e2 f2 g2@3 g2@2 ~ d2 e2@2]/2",
  J: "c2!2 ~ c2@2 c2 d2 c2!3 ~ c2@2 c2 d2 c2", K: "a1!2 e2 a2@2 e2 a2@2 a1!2 e2 a2@2 e2 a2@2",
  L: "c2@2 c2 c2@2 c2!2 ~ c2@2 c2 c2@2 d2 e2 ~", M: "f2@2 f2 ~ f2 g2 a2 c3 c2 ~ c2 c2@2 c2 c2@2",
  N: "c2@2 c2!2 ~ d2 e2 ~ d2@2 d2@2 b2 ~ b2!2", O: "f2@2 f2@2 c2@2 c2!2 ~ c2!2 ~ d2@3 d2",
  P: "e2@4 d2@3 d2 e2@4 d2@3 d2", Q: "f2@3 f2 g2!4 g1 c2 g1 c2@3 c2@2",
  R: "[d2 e2 f2 g2@3 g2@2 ~ d2 e2@2 c2!2 ~ c2@2 c2 d2 c2!3 ~ c2@2 c2 d2 c2 a1!2 e2 a2@2 e2 a2@2 a1!2 e2 a2@2 e2 a2@2 c2@2 c2 c2@2 c2!2 ~ c2@2 c2 c2@2 d2 e2 ~ f2@2 f2 ~]/4",
  S: "f2 g2 a2 c3 c2 ~ c2 c2@2 c2 c2@2 c2@2 c2!2", T: "~ d2 e2 ~ d2@2 d2@2 b2 ~ b2!2 f2@2 f2@2",
  U: "c2@2 c2!2 ~ c2!2 ~ d2@3 d2 e2@4", V: "d2@3 d2 e2@4 d2@3 d2 f2@3 f2",
  W: "[g2!4 g1 c2 g1 c2@3 c2@2 d2 e2 f2 g2@3 g2@2 ~ d2 e2@2 c2!2 ~ c2@2 c2 d2 c2]/2",
  X: "c2@2 c2@2 c2@2 c2@2 d2@2 f2@2 c2@3 c2", Y: "c2@4 d2@4 f2@4 ~ c2@3",
})).s("gm_acoustic_bass").gain(0.46)

// drums · kick
const kick = s("bd").struct("<~@5 [x!4]!3 [~ x!3] [x!4]!2 [~ x!3] [x!4]!24 [x!2 ~@2] ~@3>").gain(0.46)

// drums · snare
const snare = s("sd").struct("<~@4 A B C D E B D E B F D B@4 G B@2 H I B J B@2 K B@2 C L B M B N ~@3>".pickRestart({
  A: "~@13 x!3", B: "~ x ~ x ~ x ~ x", C: "~ x!3 ~@2 x ~@3 x ~@3 x ~", D: "~@2 x ~@3 x ~@3 x ~@2 x!3",
  E: "x!4 ~@2 x ~@3 x ~@3 x ~", F: "~@2 x ~@3 x ~@3 x!3 ~ x ~", G: "~@2 x ~@3 x ~@2 x!6 ~",
  H: "~@2 x ~@2 x!2 ~@3 x ~@3 x ~", I: "~@2 x ~@3 x ~@3 x!2 ~@2 x ~", J: "~@2 x ~ x!4 ~@2 x ~@3 x ~",
  K: "~@2 x ~@2 x!6 ~@3 x ~", L: "~@2 x ~@2 x!3 ~@2 x ~@3 x ~", M: "~ x!7 ~@2 x ~@3 x ~", N: "~ x ~ x ~@4",
})).gain(0.46)

// drums · ride
const ride = s("rd").struct("<~@5 [x!16]!3 [~@4 x!12] [x!16]!2 [~@4 x!12] [x!16]!24 [x!8 ~@8] ~@3>").gain(0.46)

stack(
  acoustic_guitar_nylon, acoustic_guitar_steel, electric_guitar_clean, electric_guitar_clean_2, bass, kick, snare, ride
)

More by Simon & Garfunkel