Strudelify

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: edit a riff to change every repeat.

// bass · electric bass finger · "bass"
const bass = note(`<
  A B C D E F G H I J K L M N O P Q R@2 S T U@2 V W X Y Z AA AB AC AD AE@2 AF AG AH AI AJ AK AL AM AN@2 AO AI AP AQ@2 AM
  AR@2 P A AS C H@2 AT G O AU AV AW AX O AY O AZ T BA@2 BB BC@2 BD@2 BE AO AM BF@2 BG BH BI@2 AO AM BJ@3 BK BL@2 BB BM@2
  BN@3 AL BO@4 BP BQ@2 BR AI BS@3 BT BU BV BW BX BY BZ@2 BT CA BV BW BX CB@3 CC@2
>`.pickRestart({
  A: "f3@23 ~", B: "~ g3@21 ~@2", C: "e3@23 ~", D: "f3@11 ~", E: "~ f3@20 ~@3", F: "g3@5 ~", G: "e3@7 ~", H: "f3@7 ~",
  I: "~@3 g3, ~ c3@19 ~@4", J: "~ c3@15 ~@3 g2@3 ~@2", K: "~ c3@18 g3@5", L: "c3@16 ~@3 g2@2 ~@3", M: "~ c3@17 g3@6",
  N: "c3@5 ~ g2 ~", O: "c3@3 g3", P: "c3@5 ~", Q: "f3@9 ~ g3@12 ~@2", R: "[~ e3@8 f3@18 ~ f3@12 ~ e3@7]/2",
  S: "~ b2@20 ~@3", T: "f3@8 ~ g3@12 ~@3", U: "[e3@8 ~ f3@17 ~@4 f3@11 e3@2 ~@5]/2", V: "c3@23 ~", W: "c3",
  X: "~ c3@8 g3@9 ~ g3@5", Y: "~ c3@23", Z: "~ g3@8 c3@14 ~", AA: "g3@9 c3@8 ~@2 g2@3 ~@2", AB: "~ c3@16 ~@2 g2@2 ~@3",
  AC: "b2@19 ~@5", AD: "f3@4 ~ g3@6 ~", AE: "[e3@8 ~ f3@20 ~ f3@9 e3@8 ~]/2", AF: "~ b2@19 b3@3 ~",
  AG: "f3@9 ~ g3@11 ~@3", AH: "e3@7 ~@3 f3@3 ~@2 f3@3 g3@2 ~ d3@3", AI: "g2@19 ~@2 g2@3",
  AJ: "b2@2 ~ d3@2 ~ e3@2 ~ a3@3 ~@6 b2@3 g2@2 ~, ~@5 e3@2 ~", AK: "f2@5 ~ g2@4 ~@2", AL: "c3@12 ~@3 f3@3 g3@2 d3@3 ~",
  AM: "g2@19 ~@2 g2@2 ~", AN: "[b2@2 d3@2 ~@2 e3@2 ~ a3@3 ~@2 e3@3 b2@3 g2@2 ~ f2@10 ~@3 g2@9 ~@3]/2",
  AO: "c3@13 ~@2 f3@2 ~ g3@2 d3@3 ~", AP: "b2@3 d3@2 ~ e3@2 ~ a3@3 ~@2 e3@3 ~ b2@3 g2 ~@2",
  AQ: "[f2@10 ~@2 g2@9 ~@2 c3@13 ~@3 f3@2 ~ g3@2 ~ d3@3]/2",
  AR: "[b2@3 d3@2 e3@3 ~ a3@3 ~@5 b2@3 g2@2 ~ f2@10 ~@3 g2@9 ~@3, ~@7 e3@3 ~@14]/2", AS: "g3@7 ~", AT: "g2@5 ~",
  AU: "~@18 g3@5 ~, ~ c3@19 ~@4", AV: "c3@16 ~@2 g3@5 ~", AW: "c3@16 ~@2 g2@3 ~@3", AX: "c3@15 ~@3 g2@2 ~@4",
  AY: "c3@8 ~ g2 ~@2", AZ: "~ c3@20 ~@3", BA: "[e3@8 ~ f3@20 ~ f3@9 e3@7 ~@2]/2", BB: "b2@5 ~",
  BC: "[f3@9 g3@11 ~@3 e3@7 ~@3 f3@3 ~@3 f3@2 ~ g3@2 ~ d3@3]/2",
  BD: "[g2@18 ~@2 g2@2 ~ b2@2 ~ d3@2 ~ e3@2 ~@2 a3@3 ~@6 b2@3 g2@2 ~, ~@13 e3@2 ~]/2", BE: "f2@3 ~ g2@3 ~",
  BF: "[b2@2 ~ d3@2 ~ e3 ~ a3@3 ~@6 b2@3 g2 ~@2 f2@9 ~@4 g2@9 ~@3, ~@7 e3@3 ~@14]/2",
  BG: "c3@12 ~@3 f3@2 ~ g3@2 d3@3 ~", BH: "g2@19 ~ g2@3 ~",
  BI: "[b2@2 d3@2 ~ e3@3 a3@3 ~@6 b2@2 ~ g2@2 ~ f2@12 ~ g2@9 ~@3, ~@7 e3@3 ~@14]/2",
  BJ: "[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",
  BK: "f3@3 g3@4 ~", BL: "[e3@9 f3@17 ~@3 f3@9 e3@8 ~@2]/2",
  BM: "[f3@9 g3@11 ~@3 e3@7 ~@2 f3@5 ~@2 f3@2 ~ g3@2 d3@3 ~]/2",
  BN: "[g2@18 ~@2 g2@2 ~ b2@3 d3@2 ~ e3@2 ~ a3@3 ~@3 e3@3 b2@3 g2 ~@2 f2@9 ~@4 g2@9 ~@3]/3",
  BO: "[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@2 ~, ~@23 f#2 ~@14 e3@6 ~@52]/4",
  BP: "g2@6 ~ g2", BQ: "[b2@2 d3@2 ~ e3@3 a3@3 ~@6 b2@3 g2@2 ~ f2@10 ~@2 g2@9 ~@4, ~@7 e3@3 ~@14]/2",
  BR: "c3@13 ~@2 f3@2 ~ g3@2 ~ d3@3",
  BS: "[b2@2 d3@2 ~ e3@2 ~ a3@3 ~@6 b2@3 g2@2 ~ f2@9 ~@4 g2@8 ~@3 c3@20 ~@5, ~@7 e3@3 ~@26]/3",
  BT: "f2@10 ~@2 g2@7 ~@5", BU: "c3@15 ~ d3@2 e3@3 c3@2 ~", BV: "f2@11 ~ g2@11 ~", BW: "c3@14 ~ d3@3 e3@2 c3@2 ~@2",
  BX: "f2@10 ~@2 g2@9 ~@3", BY: "c3@6 ~ [e3,b3]@4 ~", BZ: "[f2@8 ~@3 g2@8 ~@4 c3@14 ~@2 d3@2 ~ e3@2 ~ c3@2 ~]/2",
  CA: "c3@15 d3@2 ~ e3@3 c3@2 ~", CB: "[c3@12 ~@2 [e3,b3]@8 ~ f2@8 ~@4 g2@8 ~@4 c3@14 ~@2 d3@2 ~ e3@2 ~ g2@2 ~]/3",
  CC: "[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 N@2 J O@7 J O@7 G H B C P@2 Q@8 R@8 S@2 T U V W X Y@3 T Z V W X AA@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: "[[f3,a3,c4]@9 d4@15 e3@9 [f3,a3,c4]@14 ~, ~@9 [g3,b3]@23 ~@16]/2", // F G
  O: "[[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 …
  P: "[[f3,a3,c4]@3 d4@5 e3@3 [f3,a3,c4]@4 ~, ~@9 [g3,b3]@23 ~@16]/2", // F G
  Q: "[[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 …
  R: "[[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 …
  S: "[~@11 [d3,g3]@11 ~@2 c3@21 ~@3, ~@23 e3@20 ~@5]/2", T: "[f3,a3]@11 ~ [d3,g3]@11 ~", U: "~ e3@20 ~@3, c3@5 ~",
  V: "[f3,a3]@10 a3 ~@2 [d3,g3]@10 ~", W: "[c3,e3]@7 ~", X: "[f3,a3]@11 ~@2 [d3,g3]@10 ~",
  Y: "[[c3,e3]@23 f3@11 ~ [d3,g3]@11 ~@2 c3@21 ~@3, ~@47 e3@20 ~@5]/3", Z: "[c3,e3]@5 ~", AA: "[[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 W X Y@2 Z@7 ~@6 AA@4 AB@4 AC AD@2 AE@6 ~@5 AF@7 AG@6
  AH@3 ~ AI@6 AJ@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, ~@5 g3@16 ~@27]/4",
  Q: "[~@38 b3@3 c4@3 ~ g4@47 ~@4 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", W: "~@9 a4@8 ~ g4@6, ~ b3@7, ~ e4@3",
  X: "~@9 a4@5 ~ g4@2 f4@2 ~ e4@2 ~ d4, ~@2 g3@15 ~@7, ~@6 b3@11 ~@7", Y: "[~@2 e4@3 ~ [c4,e4]@42]/2",
  Z: "[~@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",
  AA: "[~@12 g4@26 ~ b3@3 c4@3 g4@49 ~@2, ~ g4@3 ~@28, ~@3 d4@16 ~@29, ~@9 g3@32 ~@55]/4",
  AB: "[~@38 b3@3 c4@3 g4@47 ~@3 d4 ~, g4@37 ~@59, ~@3 d4@34 ~@59, ~@6 g3@35 ~@52 g3@2 ~]/4",
  AC: "~@15 d4@3 d4@2 ~ b3@2 ~, g4@9 g4@11 g4@4, ~@3 d4@11 ~@10, ~@6 g3@11 ~@7",
  AD: "[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
  AE: "[~@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
  AF: "[~@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",
  AG: "[~@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",
  AH: "[~@3 b3@3 c4@3 g4@38 ~@6 d4@17 ~@2, ~@47 g3@25, ~@48 d4@5 ~@19, ~@49 g4@22 ~]/3",
  AI: "[~@15 b3@2 ~ c4@3 g4@38 ~@4 b3@2 ~ c4@4 g4@38 ~@3 b3@2 ~ c4@3 g4@27]/6",
  AJ: "[~@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]!11 [~@5 x ~@5 x ~@5 x ~@6]!33 ~@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 x ~@2 x ~@2 x ~@3 x ~ x ~@3 x ~ x ~@2 x]
  [~@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