Strudelify
You Can Call Me Al cover art

1986 · Graceland

You Can Call Me Al

Paul Simon

KeyF majorTempo130 bpm
0:00/0:00
// You Can Call Me Al — Simon Paul
// 130 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · pad poly
const pad_poly = note("<~@8 A B A B C D C D ~@18 A B A B A B A B ~@26 A B A B A ~@3>".pickRestart({
  A: "~@4 [a4,c5,f5]@4 [g4,c5,e5]@3 [g4,c5,e5] ~@2 [f4,bb4,d5]@2", // F C Bb
  B: "~@4 [a4,c5,f5]@4 [g4,c5,e5]@3 [g4,c5,e5] ~@2 [a4,c5,f5]@2", // F C F
  C: "~@4 [a4,c5,f5,a5]@4 [g4,c5,e5,g5]@3 [g4,c5,e5,g5] ~@2 [f4,bb4,d5,f5]@2", // F C Bb
  D: "~@4 [a4,c5,f5,a5]@4 [g4,c5,e5,g5]@3 [g4,c5,e5,g5] ~@2 [a4,c5,f5,a5]@2", // F C F
})).s("gm_pad_poly").gain(0.31)

// chords · pad poly · soft notes · F C F C Bb F C F
const pad_poly_soft = note(`<
  ~@73
  [~@4 [a4,c5,f5]@4 [g4,c5,e5]@3 [g4,c5,e5] ~@2 [a4,c5,f5]@2]
  [~@4 [a4,c5,f5]@4 [g4,c5,e5]@3 [g4,c5,e5] ~@2 [f4,bb4,d5]@2]
  [~@4 [a4,c5,f5]@4 [g4,c5,e5]@3 [g4,c5,e5] ~@2 [a4,c5,f5]@2]
>`).s("gm_pad_poly").gain(0.1)

// chords · synth brass 1
const synth_brass_1 = note("<A B C D C D C D C D C D C D C D ~@52 C D ~@6>".pickRestart({
  A: "~@4 [a3,c4,f4]@4 [g3,c4,e4]@3 [g3,c4,e4] ~@2 [bb3,d4]@2", // F C Bb
  B: "~@4 [a3,c4,f4]@4 [g3,c4,e4]@3 [g3,c4,e4] ~@2 [g3,c4,e4] [a3,c4,f4]", // F C F
  C: "~@4 [a3,c4,f4]@4 [g3,c4,e4]@3 [g3,c4,e4] ~@2 [f3,bb3,d4]@2", // F C Bb
  D: "~@4 [a3,c4,f4]@4 [g3,c4,e4]@3 [g3,c4,e4] ~@2 [a3,c4,f4]@2", // F C F
})).s("gm_synth_brass_1").gain(0.46)

// chords · synth brass 1 · soft notes
const synth_brass_1_soft = note("<~@34 A B A B A B A B ~@28 A B A B A B>".pickRestart({
  A: "~@4 [a3,c4,f4]@4 [g3,c4,e4]@3 [g3,c4,e4] ~@2 [f3,bb3,d4]@2", // F C Bb
  B: "~@4 [a3,c4,f4]@4 [g3,c4,e4]@3 [g3,c4,e4] ~@2 [a3,c4,f4]@2", // F C F
})).s("gm_synth_brass_1").gain(0.31)

// bass · acoustic bass
const bass = note(`<
  ~@4 A B C B C B C B D B D B D B D B D B D B D B E F E F E F E F D B D B G B D B H I H I H I H I H I H I H I D B H I D
  B H I D J K L D B ~@6
>`.pickRestart({
  A: "f2!2 f2@2 a2@2 c3 ~@8 c3", B: "g2!3 ~ bb2@2 c3 ~@7 c3@2", C: "f2!3 ~ a2@2 c3 ~@7 c3@2",
  D: "f2!3 ~ a2@2 c3@2 ~@6 c3@2", E: "f2!2 f2@2 a2@2 c3@2 f2!2 f2@2 a2@2 c3@2", F: "g2!2 g2@2 bb2@2 c3@2 c3@4 c3@4",
  G: "f2!2 f2@2 a2@2 c3@2 ~@6 c3@2", H: "f2!3 ~ a2@2 c3@2 f3!4 c3@2 a2@2", I: "g2!3 ~ bb2@2 c3 ~ d3!4 c3@2 a2@2",
  J: "g2!3 ~ bb2@2 c3 ~@9", K: "~@2 bb3 c4 d3 f3 g3 bb2 c3 d3 bb2 g2@2 a2 g2@2",
  L: "c3 d3!3 g2 a2 g2 f2 d3 c3 a2 g3 f3 d3 c4 bb3",
})).s("gm_acoustic_bass").gain(0.46)

// bass · acoustic bass · soft notes
const bass_soft = note(`<
  ~@70
  [f2!3 ~ a2@2 c3@2 ~@6 c3@2]
  [g2!3 ~ bb2@2 c3 ~@7 c3@2]
  [f2!3 ~ a2@2 c3@2 ~@6 c3@2]
  [g2!3 ~ bb2@2 c3 ~@7 c3@2]
  [f2!3 ~ a2@2 c3@2 ~@6 c3@2]
  [g2!3 ~ bb2@2 c3 ~@7 c3@2]
>`).s("gm_acoustic_bass").gain(0.2)

// chords · marimba
const marimba = note("<~@16 A B C D E F G H I J K L M N K O P Q R S T ~ R U V W ~@26 R ~ R ~@5>".pickRestart({
  A: "~ a4@2 c5@3 a4@2 a4@2 a4 g4@2 g4 f4@2", B: "~@2 bb4@2 a4@2 a4@2 a4@2 a4 g4!2 f4 f4@2",
  C: "~@2 c5@2 a4@2 a4@2 a4@2 g4!3 f4 f4@2", D: "~ bb4 a4!3 f4 g4 f4", E: "~@2 c5@2 a4@2 a4@2 a4@2 g4!4 f4@2",
  F: "~ bb4 a4!3 f4 a4 f4", G: "~@2 a4@2 f4@2 f4@2 f4!4 g4!2 a4@2", H: "~@2 a4@2 f4@2 f4@2 f4!2 f4@2 g4@2 a4@2",
  I: "c5@2 c5!2 c5@2 c5 a4 c5@4 a4@2 f4!2", J: "a4@3 g4 g4@4 g4@4 f4@4", K: "a4@2 f4!2 a4@2 f4!2",
  L: "~@2 a4!2 a4@4 g4@2 f4@2 ~@4", M: "~@2 a4 c5!2 a4@2 a4", N: "bb4 a4 g4 f4 ~@2 a4!2",
  O: "a4 a4@3 a4@2 a4@2 bb4@2 a4@2 g4@2 f4@2", P: "~@2 c5 a4@3 a4@2 a4@4 a4@2 g4@2", Q: "a4@2 f4@2 f4!2 f4@2 ~@8",
  R: "[a3,c4,f4,a4]@2 [a3,c4,f4,a4]@2 [c4,f4,a4,c5]@2 [c4,f4,a4,c5]@2 [e4,g4,d5] [e4,g4,c5]@2 [e4,g4,c5] [e4,g4,c5]@4", // F Em7 C
  S: "a4!2 [f4,a4,c5] c5 [e4,g4,d5] c5@2 [f4,a4,c5]", T: "[f4,a4,c5] [f4,a4,c5]@3",
  U: "a4 a4@3 [f4,a4,c5]@2 c5@2 [c4,e4,a4]@2 g4@2 a4@2 [c4,f4,a4]@2", V: "c5@4 [c5,e5,g5]@3 [bb4,d5,f5]",
  W: "[bb4,d5,f5]@8 ~@2 d5@4 c5!2", // Bb
})).s("gm_marimba").gain(0.72)

// chords · marimba · soft notes · F Em7 C F Em7 C
const marimba_soft = note(`<
  ~@72
  [[a3,c4,f4,a4]@2 [a3,c4,f4,a4]@2 [c4,f4,a4,c5]@2 [c4,f4,a4,c5]@2 [e4,g4,d5] [e4,g4,c5]@2 [e4,g4,c5] [e4,g4,c5]@4]
  ~
  [[a3,c4,f4,a4]@2 [a3,c4,f4,a4]@2 [c4,f4,a4,c5]@2 [c4,f4,a4,c5]@2 [e4,g4,d5] [e4,g4,c5]@2 [e4,g4,c5] [e4,g4,c5]@4]
  ~
>`).s("gm_marimba").gain(0.32)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@16 A B A B A B A B A B ~@8 C D C D C D C D A B A B A B A B A B A B A B A B A B A B A B A B ~@10
>`.pickRestart({
  A: "~@3 ab4 [c4,f4,a4]@2 ~ e4 [a3,c4,f4]@3 [a3,c4,f4] ~@4, ~@3 [c4,f4,g4] ~@4", // F Csus4
  B: "~@3 f4 [d4,g4]@2 ~ e4 [c4,f4]@3 [c4,e4] ~@4, ~@3 [c4,f4] ~@4", // G5 F5 C F5
  C: "~@4 [a4,c5,f5]@4 [g4,c5,e5]@3 [g4,c5,e5] ~@2 [f4,bb4,d5]@2", // F C Bb
  D: "~@4 [a4,c5,f5]@4 [g4,c5,e5]@3 [g4,c5,e5] ~@2 [a4,c5,f5]@2", // F C F
})).s("gm_electric_guitar_clean").gain(0.54)

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

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

// drums · rim
const rim = s("rim").struct("<~@3 [~@2 x ~ x!4] [x!4]!61 ~@3 [x!4]!8>").gain(0.31)

// drums · snare
const snare = s("sd").struct("<~@3 A B@11 C ~@9 C ~@7 C ~@23 C ~@18>".pickRestart({
  A: "~@2 x ~@2 x ~ x", B: "~@3 x", C: "~@3 x ~ x!3",
})).gain(0.46)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@11 B ~@9 B ~@7 B ~@23 B ~@18>".pickRestart({
  A: "~@5 x ~ x", B: "~@7 x",
})).gain(0.46)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@18 B A B ~ A C A C A C A@10 B@15 A@2 B A B A B A D ~@2 A@2 ~@6>".pickRestart({
  A: "x!8", B: "x!5 ~ x ~ x ~ x ~ x!4", C: "x ~ x ~ x ~ x ~ x ~ x ~ x!4", D: "x!7 ~",
})).gain(0.46)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@70 [x!8]!6>").gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@11 B ~@9 B ~@7 B ~@23 B ~@18>".pickRestart({
  A: "~@7 x", B: "~@5 x ~@2",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~@3 A B@11 C D@9 E D@39 F ~@2 D@2 ~@6>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x", C: "~@3 x ~@3 x", D: "~ x ~ x ~ x ~ x", E: "~@3 x ~@4", F: "~ x ~ x ~ x ~@2",
})).gain(0.46)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@70 [~ x ~ x ~ x ~ x]!6>").gain(0.2)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@11 B ~@9 B ~@7 B ~@23 B ~@18>".pickRestart({
  A: "~ x ~@2", B: "x",
})).gain(0.46)

// drums · crash
const crash = s("cr").struct("<~@65 [~@3 x] ~@10>").gain(0.46)

stack(
  pad_poly, pad_poly_soft, synth_brass_1, synth_brass_1_soft, bass, bass_soft, marimba, marimba_soft,
  electric_guitar_clean, kick, kick_soft, rim, snare, low_tom, hihat, hihat_soft, mid_tom, open_hat, open_hat_soft,
  high_tom, crash
)

More by Paul Simon