Strudelify

Do You Know the Way to San Jose

Dionne Warwick

KeyF majorTempo120 bpm
0:00/0:00
// Do You Know the Way to San Jose — Dionne Warwick
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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.

// bass · fretless bass · "Bass    (BB)"
const bass = note(`<
  A B C D@2 E B F D G H I J K J L M N O G P D Q@2 D E B E N D F R C G S T U T U J L V G V N P D Q D Q A W X E F B E@2 C
  W C A Y Z
>`.pickRestart({
  A: "f2@5 ~ f2 ~ f2 ~ f2@3 ~ f2 ~", B: "bb1@5 ~ bb1 ~ bb1@5 ~ bb1 ~", C: "f2@5 ~ f2 ~ f2@5 ~ f2 ~",
  D: "c2@5 ~ c2 ~ c2@6 c2 ~", E: "f2@5 ~ f2 ~ f2@6 f2 ~", F: "f2@6 f2 ~ f2@6 f2 ~", G: "c2@6 c2 ~ c2@6 c2 ~",
  H: "a1@5 ~ a1 ~ a1 ~ a1@3 ~ a1 ~", I: "d2@6 d2 ~ d2@6 d2 ~", J: "a1@5 ~ a1 ~ a1@5 ~ a1 ~",
  K: "d2@5 ~ d2 ~ d2@5 ~ d2 ~", L: "gb2@6 gb2 ~ gb2@6 gb2 ~", M: "g2@5 ~ g2 ~ g2@6 g2 ~",
  N: "c2@5 ~ c2 ~ c2 ~ c2@3 ~ c2 ~", O: "g2@5 ~ g2 ~ g2@5 ~ g2 ~", P: "c2@6 c2 ~ c2@5 ~ c2 ~",
  Q: "c2@5 ~ c2 ~ c2@5 ~ c2 ~", R: "bb1@5 ~ bb1 ~ bb1@6 bb1 ~", S: "c2@6 c2 ~ c2@6 b1 ~", T: "a1@5 ~ a1 ~ a1@6 a1 ~",
  U: "d2@5 ~ d2 ~ d2@6 d2 ~", V: "g2@5 ~ g2 ~ g2 ~ g2@3 ~ g2 ~", W: "bb1@6 bb1 ~ bb1@6 bb1 ~", X: "f2@6 f2 ~ f2@6 e2 ~",
  Y: "f2@5 ~ f2 ~ f2 ~ f2@2 ~@2 f2 ~", Z: "f2 ~ c2 ~ d2 ~@3 f2@3 ~@5",
})).s("gm_fretless_bass").gain(0.28).pan(0.4)

// chords · epiano1 · "Piano   (BB)"
const epiano1 = note(`<
  A B C D E A F C G H I J K L M N O P O Q R S T@2 U C V W X Y A Z A AA Y AB L K J AC AD AE P AF AG AH AI AJ AK AL C AM
  A@3 B A C AN V AN A AO AP
>`.pickRestart({
  A: "[a3,c4,f4] ~ [a3,c4,f4] ~@3 [a3,c4,f4]@6 ~@4", B: "[d4,f4,g4,bb4] ~ [d4,f4,g4,bb4] ~@3 [d4,f4,g4,bb4]@6 ~@4",
  C: "~@2 [a3,c4,f4]@2 ~@2 f3@2 [a3,c4,f4]@2 ~@2 [a3,c4,f4] ~@3", D: "[bb3,d4,f4,g4]@15 ~",
  E: "[bb3,c4,e4,g4]@6 c3@2 [bb3,c4,e4,g4]@3 ~ [bb3,c4,e4,g4] ~@3", // C7
  F: "[g3,bb3,d4,f4]@6 bb2@2 [g3,bb3,d4,f4]@3 ~ [g3,bb3,d4,f4] ~@3", G: "d4@8 d4@2 f4@2 g4@2 d5 ~, [bb3,f4,g4]@5 ~@3",
  H: "[bb3,c4,e4,g4] ~ [bb3,c4,e4,g4] ~@3 [bb3,c4,e4,g4]@6 ~@4", I: "[c4,e4,g4,a4]@15 ~",
  J: "[a3,d4,f4] ~ [a3,d4,f4] ~@3 [a3,d4,f4]@6 ~@4", // Dm
  K: "~@2 [c4,e4,g4,a4]@2 ~@2 a2@2 [c4,e4,g4,a4]@2 ~@2 [c4,e4,g4,a4] ~@3", L: "[a3,d4,f4]@15 ~",
  M: "a3@8 a3@2 c4@2 e4@2 a4 ~, [c4,e4]@5 ~@3", N: "[c4,e4,gb4,a4]@6 gb2@2 [c4,e4,gb4,a4]@3 ~ [c4,e4,gb4,a4] ~@3",
  O: "[bb3,d4,f4,g4]@6 g2@2 [bb3,d4,f4,g4]@3 ~ [bb3,d4,f4,g4] ~@3", P: "[g3,c4,e4] ~ [g3,c4,e4] ~@3 [g3,c4,e4]@6 ~@4",
  Q: "c4@8 c4@2 e4@2 g4@2 c5 ~, [g3,e4]@5 ~@3", R: "[g3,c4,e4]@4 ~ [g3,c4,e4]@2 ~", S: "[g3,c4,e4]@5 ~ [g3,c4,e4] ~",
  T: "[[g3,c4,e4]@14 ~@2 [g3,c4,e4] ~ [g3,c4,e4] ~@3 [g3,c4] ~@3 c2@2 [g3,e4]@2 ~@2, ~@14 c2@8 e4@2 ~@4 c4 ~@3]/2", // C C5 C
  U: "[g3,c4,e4]@15 ~", V: "[d4,f4,g4,bb4]@6 bb2@2 [d4,f4,g4,bb4]@3 ~ [d4,f4,g4,bb4] ~@3", W: "[a3,c4,f4]@15 ~",
  X: "~@2 [bb3,d4,f4,g4]@2 ~@2 c3@2 [bb3,d4,f4,g4]@2 ~@2 [bb3,d4,f4,g4] ~@3", // Gm7
  Y: "~@2 [bb3,c4,e4,g4]@2 ~@2 c3@2 [bb3,c4,e4,g4]@2 ~@2 [bb3,c4,e4,g4] ~@3", // C7
  Z: "~@2 [d4,f4,g4,bb4]@2 ~@2 bb2@2 [d4,f4,g4,bb4]@2 ~@2 [d4,f4,g4,bb4] ~@3", // Gm7
  AA: "[bb3,d4,f4,g4]@6 c3@2 [bb3,d4,f4,g4]@3 ~ [bb3,d4,f4,g4] ~@3", // Gm7
  AB: "[c4,e4,g4,a4] ~ [c4,e4,g4,a4] ~@3 [c4,e4,g4,a4]@6 ~@4", AC: "[a3,c4,e4]@6 a2@2 [a3,c4,e4]@3 ~ [a3,c4,e4] ~@3",
  AD: "~@2 [c4,e4,gb4,a4]@2 ~@2 gb2@2 [c4,e4,gb4,a4]@2 ~@2 [c4,e4,gb4,a4] ~@3", // Gbm7b5
  AE: "~@2 [bb3,d4,f4,g4]@2 ~@2 g2@2 [bb3,d4,f4,g4]@2 ~@2 [bb3,d4,f4,g4] ~@3", // Gm7
  AF: "[f4,g4,bb4,d5] ~ [f4,g4,bb4,d5] ~@3 [f4,g4,bb4,d5]@6 ~@4", AG: "[g3,c4,e4]@6 c3@2 [g3,c4,e4]@3 ~ [g3,c4,e4] ~@3",
  AH: "[g3,c4,e4]@5 c3 [g3,c4,e4] ~", AI: "c4@5 c4 e4 ~, [g3,e4]@3 ~", AJ: "[g3,c4,e4]@10 c3@2 [g3,c4,e4]@3 ~",
  AK: "[g3,c4,e4]@2 [g3,c4,e4] ~@3 [g3,c4,e4]@8 ~@2", AL: "~@2 [g3,c4,e4]@2 ~@2 c3@2 [g3,c4,e4]@2 ~@2 [g3,c4,e4] ~@3",
  AM: "~@8 bb3@2 d4@2 f4@2 bb4 ~, [d4,f4,g4,bb4]@5 ~@3", AN: "f4@8 f4@2 a4@2 c5@2 f5 ~, [a3,c4]@5 ~@3",
  AO: "[a3,c4,f4]@14 f3 ~", AP: "[a3,c4,f4]@2 f3 ~ [bb3,d4,f4] ~@3 [a3,c4,f4]@8",
})).s("gm_epiano1").gain(0.24)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A B C A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A D E
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~@2 x", C: "x ~@2 x ~@4", D: "x ~@2 x!3 ~ x", E: "~ x!2 ~ x ~@3",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!24 [~ x ~@2] [~ x ~ x]!36 [~@4 x ~@5 x!3 ~ x ~] [~ x ~ x] x>").gain(0.41)

// drums · clap
const clap = s("cp").struct("<~@23 [~@2 x!2 ~@4] ~@24 [~@2 x!2 ~@4] ~@15>").gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@23 [~@3 x] [~@13 x!2 ~] ~@39>").gain(0.41)

// drums · hihat
const hihat = s("hh").struct(`<
  A@2 B C B A D A@3 B C B A@2 C A C B C B A@3 E A@2 B C B C A C B A@2 C B A@5 D C B C A@8 B A@2 C A C F A ~
>`.pickRestart({
  A: "x!8", B: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~", C: "x!7 ~", D: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~", E: "x!2 ~@6",
  F: "x!5 ~@3",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 [~@11 x!2 ~@3] ~@39>").gain(0.46)

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

// drums · high tom
const high_tom = s("ht").struct("<~@24 [~ x] ~@39>").gain(0.46)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~@3
>`.pickRestart({
  A: "~@3 x",
})).gain(0.46)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@23 [~@10 x!2 ~@4] ~@24 [~@10 x!2 ~@4] ~@15>").gain(0.15)

stack(bass, epiano1, kick, snare, clap, low_tom, hihat, mid_tom, open_hat, high_tom, ride, tambourine, tambourine_soft)

More by Dionne Warwick