Strudelify
Time After Time cover art

Close Up

Time After Time

Frank Sinatra

KeyG majorTempo132 bpm
0:00/0:00
// Time After Time — Frank Sinatra
// 132 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 7 "bass" named as a bass, played on electric bass finger (its piano patch is not one); ch 4 "fat organ" named as an organ, played on drawbar organ (its piano patch is not one); ch 9 "guitar" named as a guitar, played on electric guitar clean (its piano patch is not one)
// note: Full arrangement: all 131 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger · "bass"
const bass = note(`<
  A B C D E F G D H I J I H K L M N O@2 P Q R@2 S@2 T U V W I X N Y@2 Z N AA AB AC AD AE AB AF@2 AE AB AG AH@2 AB AI@2 M
  A F C D@2 AJ G L@2 AK K@2 L AL L M Q Y@2 X AM@2 AN@2 AO AE AB AP@2 AE AB AQ@2 AE AB AR@3 Q AS@2 X AT@2 AU@3 AE AV@4 AB
  AW@2 AE AB AX@3 AD AY AZ BA AO BB BC@2 AD AY AZ BA AO BD@3 BE@2
>`.pickRestart({
  A: "f3@23 ~", B: "~ g3@21 ~@2", C: "e3@23 ~", D: "f3@7 ~", E: "~ f3@20 ~@3", F: "g3@5 ~", G: "e3@7 ~",
  H: "~@3 g3, ~ c3@19 ~@4", I: "~ c3@15 ~@3 g2@3 ~@2", J: "~ c3@18 g3@5", K: "c3@5 ~ g2 ~", L: "c3@3 g3", M: "c3@5 ~",
  N: "f3@9 ~ g3@12 ~@2", O: "[~ e3@8 f3@18 ~ f3@12 ~ e3@7]/2", P: "~ b2@20 ~@3", Q: "f3@8 ~ g3@12 ~@3",
  R: "[~ e3@8 f3@18 ~@3 f3@11 e3@2 ~@5]/2", S: "c3@23 ~", T: "~ c3@8 g3@9 ~ g3@5", U: "~ c3@23", V: "~ g3@8 c3@14 ~",
  W: "g3@9 c3@8 ~@2 g2@3 ~@2", X: "b2@5 ~", Y: "[e3@8 ~ f3@20 ~ f3@9 e3@8 ~]/2", Z: "~ b2@19 b3@3 ~",
  AA: "e3@7 ~@3 f3@3 ~@2 f3@3 g3@2 ~ d3@3", AB: "g2@19 ~@2 g2@2 ~",
  AC: "b2@2 ~ d3@2 ~ e3@2 ~ a3@3 ~@6 b2@3 g2@2 ~, ~@5 e3@2 ~", AD: "f2@10 ~@2 g2@7 ~@5",
  AE: "c3@13 ~@2 f3@2 ~ g3@2 d3@3 ~", AF: "[b2@2 d3@2 ~@2 e3@2 ~ a3@3 ~@2 e3@3 b2@3 g2@2 ~ f2@10 ~@3 g2@9 ~@3]/2",
  AG: "b2@3 d3@2 ~ e3@2 ~ a3@3 ~@2 e3@3 ~ b2@3 g2 ~@2", AH: "[f2@10 ~@2 g2@9 ~@2 c3@13 ~@3 f3@2 ~ g3@2 ~ d3@3]/2",
  AI: "[b2@3 d3@2 e3@3 ~ a3@3 ~@5 b2@3 g2@2 ~ f2@10 ~@3 g2@9 ~@3, ~@7 e3@3 ~@14]/2", AJ: "g2@5 ~",
  AK: "c3@16 ~@2 g3@5 ~", AL: "c3@16 ~@3 g2@2 ~@3", AM: "[f3@9 g3@11 ~@3 e3@7 ~@3 f3@3 ~@3 f3@2 ~ g3@2 ~ d3@3]/2",
  AN: "[g2@18 ~@2 g2@2 ~ b2@2 ~ d3@2 ~ e3@2 ~@2 a3@3 ~@6 b2@3 g2@2 ~, ~@13 e3@2 ~]/2", AO: "f2@10 ~@2 g2@9 ~@3",
  AP: "[b2@2 ~ d3@2 ~ e3 ~ a3@3 ~@6 b2@3 g2 ~@2 f2@9 ~@4 g2@9 ~@3, ~@7 e3@3 ~@14]/2",
  AQ: "[b2@2 d3@2 ~ e3@3 a3@3 ~@6 b2@2 ~ g2@2 ~ f2@12 ~ g2@9 ~@3, ~@7 e3@3 ~@14]/2",
  AR: "[b2@2 d3@2 ~@2 e3@2 ~ a3@2 ~@6 b2@2 ~ g2@2 ~ f2@9 ~@4 g2@9 ~@2 c3@18 ~ d3@3 ~@3, ~@7 e3@3 ~@26]/3",
  AS: "[e3@8 ~ f3@17 ~@3 f3@9 e3@8 ~@2]/2", AT: "[f3@9 g3@11 ~@3 e3@7 ~@2 f3@5 ~@2 f3@2 ~ g3@2 d3@3 ~]/2",
  AU: "[g2@18 ~@2 g2@2 ~ b2@2 ~ d3@2 ~ e3@2 ~ a3@3 ~@3 e3@3 b2@3 g2 ~@2 f2@9 ~@4 g2@9 ~@3]/3",
  AV: "[g2@18 ~@3 g2@2 b2@2 ~ d3@2 ~ e3@2 ~ a3@3 ~@6 b2@3 g2 ~@2 f2@9 ~@3 g2@10 ~@2 c3@13 ~@3 f3@2 ~ g3@2 ~ d3@3, ~@23 f#2 ~@14 e3@6 ~@52]/4",
  AW: "[b2@2 d3@2 ~ e3@3 a3@3 ~@6 b2@3 g2@2 ~ f2@10 ~@2 g2@9 ~@4, ~@7 e3@3 ~@14]/2",
  AX: "[b2@3 d3@2 e3@3 ~ a3@3 ~@5 b2@3 g2@2 ~ f2@10 ~@3 g2@8 ~@3 c3@20 ~@5, ~@7 e3@3 ~@26]/3",
  AY: "c3@15 ~ d3@2 e3@3 c3@2 ~", AZ: "f2@11 ~ g2@11 ~", BA: "c3@14 ~ d3@3 e3@2 c3@2 ~@2", BB: "c3@6 ~ [e3,b3]@4 ~",
  BC: "[f2@8 ~@3 g2@8 ~@4 c3@14 ~@2 d3@2 ~ e3@2 ~ c3@2 ~]/2",
  BD: "[c3@12 ~@2 [e3,b3]@8 ~ f2@8 ~@4 g2@8 ~@4 c3@14 ~@2 d3@2 ~ e3@2 ~ g2@2 ~]/3", BE: "[c3@13 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.51)

// chords · drawbar organ · "fat organ"
const drawbar_organ = note(`<
  A B C D A B C D E@3 F E@3 F G H B C G H D E@3 F E@3 F G H B C I@2 J K L@4 M@2 J K L@4 M@2 A B C D A B C D E@3 F E@3 F
  G H B C I@2 J N@7 J N@7 G H B C I@2 O@8 P@8 Q@2 R S T S U V@3 R S T S U W@3
>`.pickRestart({
  A: "[f3,a3,c4]", B: "[g3,b3,d4]", C: "[e3,g3,b3]", D: "[f3,a3,c4]@11 ~", E: "[b3,d4]@3 [g3,c4]@5",
  F: "[b3,d4]@9 [c4,e4]@13 ~@2", G: "[f3,a3,c4]@3 [g3,b3,d4]@5", H: "[e3,g3,b3]@3 [f3,a3,c4]@5",
  I: "[[f3,a3,c4]@9 d4@15 e3@9 [f3,a3,c4]@13 ~@2, ~@9 [g3,b3]@23 ~@16]/2", J: "[g3,b3,d4,g4]@7 ~",
  K: "[e3,a3,c4,e4]@7 ~", // Am
  L: "[[f3,a3,c4,f4]@10 ~@2 [g3,b3,d4]@8 ~@4 g3@20 ~@3 [g3,b3,d4,g4]@20 ~@4 [a3,c4,e4,a4]@20 ~@5, ~@23 [c4,e4]@20 ~@53]/4", // F G Am C
  M: "[[f3,a3,c4]@10 ~@2 [g3,b3,d4]@9 ~@3 g3@23 ~, ~@23 [c4,e4]@23 ~@2]/2", // F G C
  N: "[[e3,a3,c4,e4]@21 ~@3 [f3,a3,f4]@10 ~@2 [g3,b3,d4]@8 ~@3 [g3,c4,e4]@20 ~@4 [g3,b3,d4,g4]@20 ~@4 [a3,c4,e4,a4]@20 ~@5 f3@10 ~@2 [g3,b3,d4]@9 ~@2 [g3,c4,e4]@23 ~@2, ~@23 c4@9 ~@87 [a3,c4]@10 ~@39]/7", // Am F G C G Am G C …
  O: "[[g3,b3,d4,g4]@21 ~@3 [e3,a3,e4]@21 ~@3 f4@10 ~@2 [g3,b3,d4]@8 ~@3 [g3,c4,e4]@20 ~@4 [g3,b3,d4,g4]@20 ~@4 [a3,c4,e4,a4]@20 ~@4 [f3,a3,c4]@10 ~@3 [g3,b3,d4]@9 ~@2 [g3,c4,e4]@23 ~@2, ~@23 c4@21 ~@3 [f3,a3,c4]@10 ~@135]/8", // G A5 G C G Am F G …
  P: "[[g3,b3,d4,g4]@21 ~@3 [e3,a3]@21 ~@3 f4@10 ~@2 [g3,b3,d4]@8 ~@3 [g3,c4,e4]@20 ~@4 [g3,b3,d4,g4]@20 ~@4 [a3,c4,e4,a4]@20 ~@4 [f3,a3,c4]@10 ~@3 [g3,b3,d4]@9 ~@2 [g3,c4,e4]@23 ~ [f3,a3], ~@23 [c4,e4]@21 ~@3 [f3,a3,c4]@10 ~@135]/8", // G A5 G C G Am F G …
  Q: "[~@11 [d3,g3]@11 ~@2 c3@21 ~@3, ~@23 e3@20 ~@5]/2", R: "[f3,a3]@11 ~ [d3,g3]@11 ~", S: "[c3,e3]@7 ~",
  T: "[f3,a3]@10 a3 ~@2 [d3,g3]@10 ~", U: "[f3,a3]@11 ~@2 [d3,g3]@10 ~",
  V: "[[c3,e3]@23 f3@11 ~ [d3,g3]@11 ~@2 c3@21 ~@3, ~@47 e3@20 ~@5]/3", W: "[[c3,e3]@25 ~@11]/3",
})).s("gm_drawbar_organ").gain(0.36)

// chords · electric guitar clean · "guitar"
const electric_guitar_clean = note(`<
  A B C D E F G H I@2 ~@6 J K@3 L M N O@6 ~@8 P@4 Q@5 R@7 S T U@2 V T W X@2 Y@7 ~@6 P@4 Z@4 AA AB@2 AC@6 ~@5 AD@7 AE@6
  AF@3 ~ AG@6 AH@6 ~@5
>`.pickRestart({
  A: "~ c4@23, [f3,f4]@23 ~", B: "[g3,d4,g4]@3 ~", C: "[b2,b3,e4,g4]@11 ~, e3", D: "~ [f3,c4,f4]@20 ~@3",
  E: "~ [f4,a4]@18 ~@5, [f3,c4]@7 ~, ~ c3@20 ~@3", F: "~ [d4,g4]@17 [d4,g4]@2 ~@4, ~ [d3,g3]@19 ~@4",
  G: "~ [e4,g4]@22 ~, b3@11 ~, ~ b2@20 ~@3", H: "~@3 g3@2 ~ b3@2 ~ c4@6 ~@3 e4 ~@2 b3@3, ~@5 d4@2 ~",
  I: "[c4@43 ~@5]/2", J: "~@2 [f3,c4,f4]@6 ~ [g3,d4,g4]@11 ~@4, ~ c3@2 ~@9",
  K: "[~ [b2,e3,b3,e4,g4]@6 ~@3 [f3,c4,f4]@16 ~@3 [g3,d4,g4]@13 ~@7 g4@21 ~@2, ~@47 e3@22 ~@3, ~@24 [b2,b3,e4]@11 ~]/3", // Em F5 G5 E5
  L: "~ [f3,c4,f4]@3 ~ [g3,d4,g4]@5 ~@2", M: "~ b2@8 ~@2 [f3,c4,f4]@13, [e3,b3,e4,g4] ~@2",
  N: "~@7 [d3,g3]@12 ~@5, ~ [d4,g4]@2 ~", O: "[c5@39 ~@3 g4@44 ~@2 b3@2 ~ c4@3 g4@44 ~@6, g4@37 ~@107]/6",
  P: "[~@12 g4@26 ~ b3@3 c4@3 g4@49 ~@2, ~ g4@3 ~@28, ~@3 d4@16 ~@29, ~@9 g3@32 ~@55]/4",
  Q: "[~@38 b3@3 c4@3 g4@47 ~@5 g4@24, g4@37 ~@83, ~@3 d4@34 ~@57 d4@26, ~@6 g3@35 ~@52 g3@27]/5",
  R: "[~@3 b3@3 ~ c4@3 g4@50 ~@9 g4@30 b3@3 c4@3 g4@38 ~@7 d4@17 ~, ~@62 g3@39 ~@42 g3@25, ~@65 d4@33 ~@46 d4@5 ~@19, ~@145 g4@22 ~]/7",
  S: "~@9 c5@7 ~@2 b4@5 ~, ~ c4@5 ~@2, ~ f4@2 ~", T: "~@9 a4@8 ~ g4@5 ~, ~ b3@7, ~ e4@3",
  U: "[~@8 a4@5 ~ g4@2 ~ f4@2 ~ e4@2 ~ d4@3 e4@2 ~ c4@17 ~@2, ~@2 g3@15 ~@31, ~@5 b3@11 ~@13 e4@15 ~@4]/2",
  V: "~@9 c5@7 ~@2 [f4,b4]@6, ~@3 c4@20 ~, ~@5 f4@12 ~@7", // Fdim
  W: "~@8 a4@5 ~ g4@2 ~ f4@2 ~ e4@2 ~ d4, ~@2 g3@15 ~@7, ~@5 b3@11 ~@8", X: "[~@2 e4@3 ~ [c4,e4]@42]/2",
  Y: "[~@117 d5@47 ~@4, ~@5 g3@31 ~@20, ~@18 c4@44 ~ c4@52 ~@53, ~@21 g4@44 ~ g4@44 g4@54 ~@4, ~@69 c5@43 ~@2 c5@50 ~@4]/7",
  Z: "[~@38 b3@3 c4@3 g4@47 ~@3 d4 ~, g4@37 ~@59, ~@3 d4@34 ~@59, ~@6 g3@35 ~@52 g3@2 ~]/4",
  AA: "~@15 d4@3 d4@2 ~ b3@2 ~, g4@9 g4@11 g4@4, ~@3 d4@11 ~@10, ~@6 g3@11 ~@7",
  AB: "[c4@2 ~ b3@5 c4@2 ~@7 g4@4 ~@8 a3@4 ~@3 g3@3 a3@2 ~ g3@5 ~, ~@2 g4@15 ~@6 g4@9 ~@16, ~@8 a3@12 ~ a3@8 ~@19, ~@12 c4@14 ~ c4@6 ~@3 [d4,g4]@10 ~@2]/2", // G5
  AC: "[~@12 a3@2 ~ g3@3 ~@27 b3@2 ~@7 c4@3 c4@2 ~@9 a3@3 ~ a3@6 a3@5 ~@4 e4@2 ~ [g3,d4,g4]@4 ~@2 g3@44 ~@4, g4@8 g4@5 ~ g4@8 ~ g4@9 ~ g4@11 g4@5 ~ g4@12 ~ g4@19 ~@13 g4@35 ~@14, g3@6 g3@5 ~@7 g3@11 g3@11 ~@2 g3@14 ~ a3@11 ~@16 [a3,c4]@5 ~@55, ~@3 c4@5 ~ d4@6 c4@8 ~@4 d4@11 ~ d4@6 ~@2 c4@6 ~@7 c4@5 ~ c4@5 ~ c4@10 ~@14 c4@35 ~@13]/6", // G5 Am
  AD: "[~@12 g4@26 ~ b3@3 c4@3 g4@49 ~@40 b3@3 c4@3 g4@28, ~@3 g4@9 ~@83 g4@37 ~@36, ~@6 d4@32 ~@61 d4@34 ~@35, ~@9 g3@32 ~@61 g3@35 ~@31]/7",
  AE: "[~@23 g4@26 ~@2 b3@3 c4@3 g4@50 ~@9 g4@28, ~@21 g3@33 ~@56 g3@34, ~@22 d4@28 ~@63 d4@31]/6",
  AF: "[~@3 b3@3 c4@3 g4@38 ~@6 d4@17 ~@2, ~@47 g3@25, ~@48 d4@5 ~@19, ~@49 g4@22 ~]/3",
  AG: "[~@15 b3@2 ~ c4@3 g4@38 ~@4 b3@2 ~ c4@3 g4@38 ~@4 b3@2 ~ c4@3 g4@27]/6",
  AH: "[~@15 b3@3 c4@3 g4@41 ~ b3@3 c4@3 g4@64 ~@11]/6",
})).s("gm_electric_guitar_clean").gain(0.41)

// drums · kick
const kick = s("bd").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 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A B C ~ D ~@7
>`.pickRestart({
  A: "x ~@5 x!2", B: "~@23 x", C: "~@9 x!2 ~", D: "x",
})).gain(0.46)

// drums · rim
const rim = s("rim").struct("<~@31 [~ x!3]!22 ~@16 [~ x!3]!32 [~@5 x ~@5 x ~@5 x ~@6]!12 ~@18>").gain(0.46)

// drums · shaker
const shaker = s("sh").struct(`<
  [x!8]!119
  [x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x]
  [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x]!2
  [~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3]
  [x!2 ~@10]
  ~@7
>`).gain(0.46)

stack(bass, drawbar_organ, electric_guitar_clean, kick, rim, shaker)

More by Frank Sinatra