Strudelify

Detroit City

Tom Jones

KeyC majorTempo109 bpm
0:00/0:00
// Detroit City — Tom Jones
// 109 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 89 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(109/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 · synth bass 2 · "SYNTH BASS"
const bass = note(`<
  A B C D E@3 F G E F@2 G E H@2 G E I@2 F@2 E@2 H@2 G F J B K L E@3 F G E F@2 G E H@2 G E I@2 F@2 G E H@2 G F J B K L
  E@3 F G E F@2 G E H@2 G E I@2 F@2 G E H@2 G F M B K L N
>`.pickRestart({
  A: "~@8 g2 c2@2 g2, ~ c2@2 ~", B: "c#2@3 g2@2 c#2@3 g2 c#2@2 g2", C: "d2@6 g2@4 d2@5 g2@2 ~ d2@4 g2@2",
  D: "c#2@6 g2@3 c#2@7 g2@2 d2@5 ~", E: "c2@7 ~@3 c2 ~ g1@10 ~@2", F: "g2@7 ~@3 g2 ~ d2@10 ~@2",
  G: "c2@5 ~ g1@5 ~, ~@5 c2@4 ~@3", H: "f2@7 ~@3 f2 ~ c2@10 ~@2", I: "d2@7 ~@3 d2 ~ a1@10 ~@2",
  J: "~@3 g2@2 ~@3 g2 c2@2 g2, c2@5 c2@4 ~@3", K: "d2@3 g2@2 d2@3 g2 d2@2 g2", L: "c#2@3 g2@2 c#2@3 g2 d2@3",
  M: "c2@3 g2@2 c2@3 g2 c2@2 g2", N: "c2@23 ~",
})).s("gm_synth_bass_2").gain(0.55)

// bass · synth bass 2 · "SYNTH BASS" · soft notes
const bass_soft = note(`<
  A ~@5 B@2 ~@2 C D ~ E F ~@2 G@2 H@2 I J K@2 D B@2 ~@6 H@2 ~ H@2 ~ L@3 ~@2 G@2 ~ C ~@2 K@2 D H@2 ~@7 C ~@2 C D ~ M F
  ~@3 N ~ F ~ O@2 F ~ P@2 ~@5
>`.pickRestart({
  A: "~ c2@5 ~@18", B: "[~@23 g1@19 ~@5 c2]/2", C: "g1@19 ~@5", D: "~@23 c2", E: "a#1 ~", F: "f1@19 ~@5",
  G: "[~@23 c2@19 ~@6]/2", H: "[~@23 g1@19 ~@6]/2", I: "g1@19 ~@4 g1", J: "c1@19 ~@5", K: "[a#1@19 ~@4 f1@19 ~@6]/2",
  L: "[~@23 a#1@19 ~@5 f1@19 ~@6]/3", M: "a#1@19 ~@5", N: "c2@19 ~@5", O: "[~@23 a#1@19 ~@6]/2",
  P: "[~@23 f1@19 ~@5 c2]/2",
})).s("gm_synth_bass_2").gain(0.27)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@4 A@3 B A@2 B@2 A C D@2 A@2 E F B G A H D@2 A B ~@4 A@3 B A@2 B@2 A H D@2 A@2 E@2 I G A H D@2 A G ~@4 A@3 B J@2 B@2
  A K D@2 A@2 E@2 I@2 A H D@2 A G ~@5
>`.pickRestart({
  A: "[c5,e5]@4 [g4,c5,e5]@2 [g4,c5,e5]@3 ~ [c5,e5]@6 [g4,c5,e5]@2 [g4,c5,d5]@3 ~ [g4,c5,e5] ~, g4 ~@9 g4@3 ~@5 e5 ~@5", // C Gsus4 C
  B: "[g5,b5]@4 [d5,g5,b5]@2 [d5,g5,b5]@3 ~ [g5,b5]@6 [d5,g5,b5]@2 [d5,g5,a5]@3 ~ [d5,g5,b5] ~, d5 ~@9 d5@3 ~@5 b5 ~@5", // G Dsus4 G
  C: "[c5,e5]@4 [g4,c5,e5]@2 [g4,c5,e5]@3 ~ [g4,c5,e5]@2 ~@4 [g4,c5,e5] ~ [g4,c5,d5]@3 ~ [g4,c5,e5] ~, g4 ~@5 a#4@6 ~@6 e5 ~@5", // C Gsus4 C
  D: "[f5,a5]@4 [c5,f5,a5]@2 [c5,f5,a5]@3 ~ [f5,a5]@6 [c5,f5,a5]@2 [c5,f5,g5]@3 ~ [c5,f5,a5] ~, c5 ~@9 c5@3 ~@5 a5 ~@5", // F Csus4 F
  E: "[d5,f#5]@4 [a4,d5,f#5]@2 [a4,d5,f#5]@3 ~ [d5,f#5]@6 [a4,d5,f#5]@2 [a4,d5,e5]@3 ~ [a4,d5,f#5] ~, a4 ~@5 c5@8 ~@4 c5@6, ~@10 a4@3 ~@5 f#5 ~@5", // D Asus4 D
  F: "[d5,f#5]@4 [a4,d5,f#5]@2 [a4,d5,f#5]@3 ~ [d5,f#5]@6 [a4,d5,f#5]@2 [a4,d5,e5]@3 ~ [a4,d5,f#5] ~, a4 ~@5 c5@8 ~@4 c5@4 ~@2, ~@10 a4@3 ~@5 f#5 ~@5", // D Asus4 D
  G: "[g5,b5]@4 [d5,g5,b5]@2 [d5,g5,b5]@3 ~ [g5,b5]@6 [d5,g5,b5]@2 [d5,g5,a5]@3 ~ [d5,g5,b5] ~, d5 ~@5 f5@8 ~@4 f5@4 ~@2, ~@10 d5@3 ~@5 b5 ~@5", // G Dsus4 G
  H: "[c5,e5]@4 [g4,c5,e5]@2 [g4,c5,e5]@3 ~ [c5,e5]@6 [g4,c5,e5]@2 [g4,c5,d5]@3 ~ [g4,c5,e5] ~, g4 ~@5 a#4@8 ~@4 a#4@4 ~@2, ~@10 g4@3 ~@5 e5 ~@5", // C Gsus4 C
  I: "[g5,b5]@4 [d5,g5,b5]@2 [d5,g5,b5]@3 ~ [g5,b5]@6 [d5,g5,b5]@2 [d5,g5,a5]@3 ~ [d5,g5,b5] ~, d5 ~@5 f5@8 ~@4 f5@6, ~@10 d5@3 ~@5 b5 ~@5", // G Dsus4 G
  J: "[c5,e5]@4 [g4,c5,e5]@2 [g4,c5,e5]@3 ~ [c5,e5]@6 [g4,c5,e5]@2 [g4,c5,d5]@3 ~ [g4,c5,e5]@2, g4 ~@9 g4@3 ~@5 e5 ~@5", // C Gsus4 C
  K: "[c5,e5]@4 [g4,c5,e5]@2 [g4,c5,e5]@3 ~ [c5,e5]@6 [g4,c5,e5]@2 [g4,c5,d5]@3 ~ [g4,c5,e5] ~, g4 ~@5 a#4@8 ~@4 a#4@6, ~@10 g4@3 ~@5 e5 ~@5", // C Gsus4 C
})).s("gm_electric_guitar_muted").gain(0.23)

// chords · french horn · "FR.HORN"
const french_horn = note(`<
  ~@4 A@2 B@2 A@2 C D@3 E@3 F G H@2 I J@3 K F L ~@4 M@8 N@4 O@3 P@3 Q@6 ~@4 A@2 R L F@2 L@2 F S T U F@2 G V L@2 W@2 T
  X@2 Y ~@5
>`.pickRestart({
  A: "[[g2,c3,e3]@47 ~]/2", B: "[[g2,c3,e3]@23 [g2,b2,d3]@23 ~@2]/2", C: "[g2,b2,d3]@23 ~",
  D: "[[g2,b2,d3,f3]@23 ~@25 a#2@22 ~@2, ~@23 [g2,c3,e3]@47 ~@2]/3", E: "[[f2,a2,c3,f3]@47 [g2,c3,e3]@23 ~@2]/3",
  F: "[g2,c3,e3]@23 ~", G: "[a2,c3,d3,f#3]@23 ~", H: "[[a2,c3,d3]@23 [g2,b2,d3,f3]@23 ~@2, f#3@7 ~@9]/2",
  I: "[g2,b2,d3,f3]@11 ~", J: "[[g2,e3]@23 ~ [g2,a#2,e3]@23 ~ [f2,a2,f3]@23 ~, c3@47 c3@24 ~]/3",
  K: "[f2,a2,c3,f3]@11 ~", L: "[g2,b2,d3,f3]@23 ~",
  M: "[[g2,c3,e3]@71 [g2,b2,d3,f3]@23 ~ [g2,c3,e3]@47 ~ [g2,b2,d3,f3]@47 ~@2]/8", // C G7 C G7
  N: "[~@24 a#2@22 ~ [f2,a2,c3,f3]@47 ~@2, [g2,c3,e3]@47 ~@49]/4", // F C
  O: "[[g2,c3,e3]@47 ~ [a2,d3,f#3]@23 ~, ~@47 c3@23 ~@2]/3", // C D
  P: "[[a2,d3]@23 ~ [g2,b2,f3]@46 ~@2, [c3,f#3]@21 ~@2 d3@46 ~@3]/3", // D5 G7 Cdim
  Q: "[[g2,e3]@23 ~ [g2,a#2,e3]@22 ~ [a2,c3,f3]@23 ~@2 f3@22 ~@2 [g2,e3]@22 ~@2 [d3,f3]@23 ~, c3@47 ~@24 [a2,c3]@23 ~ c3@23 ~ [g2,b2]@23 ~@2]/6", // C Edim F C Dm Am G
  R: "[g2,c3,e3]@11 ~", S: "[g2,a#2,c3,e3]@23 ~", T: "[a2,c3,f3]@23 ~", U: "[a2,c3,f3]@11 ~",
  V: "[a2,d3,f#3]@23 ~, c3@7 ~", W: "[[g2,e3]@23 ~ g2@23 ~, c3@47 ~, ~@23 [a#2,e3]@23 ~@2]/2",
  X: "[[a2,c3,f3]@22 ~ [g2,c3,e3]@23 ~@2]/2", Y: "[g2,b2,d3,f3]",
})).s("gm_french_horn").gain(0.24)

// chords · epiano2 · "E.PIANO"
const epiano2 = note(`<
  ~@5 A B@2 C@2 D@2 E@2 F G H I J@2 K L M@2 N@2 O P Q ~@4 R S T U@2 V W X@2 Y Z AA AB AC@2 K AD AE@2 AF AG AH AI Q ~@4
  AJ@2 AK AL@2 AM AN@3 F AO AP AQ AR@2 K AD M@2 AS AT O AI AU ~@4
>`.pickRestart({
  A: "~@11 d4",
  B: "[[c4,e4]@5 ~ [c4,e4]@5 ~ [c4,e4]@5 ~ [c4,e4]@4 ~@2 [d4,g4]@3 ~ [d4,g4]@6 b3@2 [d4,g4]@4 b3 ~ [e4,g4]@5 ~, g3@19 ~@3 b3@5 ~ b3@4 ~@16]/2", // C G5 Em
  C: "[[d4,g4] c4@18 ~@2 e4@2 f4, ~@20 c4@3 ~]/2", // G5
  D: "[[b3,d4,g4]@3 ~ [b3,d4,g4]@5 ~ [d4,g4]@6 b3@2 [d4,g4]@4 ~@2 [d4,a4]@3 ~ [b3,d4,g4]@5 ~ [d4,g4]@6 b3@2 [d4,f4]@4 b3@2, ~@10 b3@4 ~@8 b3@5 ~@7 b3@4 ~@10]/2", // G G5 D5 G G5 Dm
  E: "[c4@10 ~@2 c4@4 ~@2 b3@3 ~ a#3@19 ~@5 [e4,g4] ~, e4@7 ~ e4@13 ~@3, ~@10 g3@31 ~@7]/2", // Em
  F: "[c4,f4,a4]@5 ~ [c4,f4]@4 g4 ~ [c4,f4,a4]@5 ~ a4@4 g4 ~, ~@2 a4 ~@3 [c4,f4]@2", // F F5 F F5
  G: "[c4,a4]@2 g4@2 [c4,f4]@18 [f4,g4] ~", // F F5 Fsus2
  H: "[c4,e4,a4]@5 ~ [c4,e4,a4]@4 [c4,g4] ~ [c4,e4,a4]@5 ~ [e4,g4]@4 c4 ~, ~@9 c4 ~@2", // Am C5 Am Em
  I: "e4@2 d4@2 c4@16 ~@2 c4 ~, g4@7 ~",
  J: "[[c4,d4]@5 ~ [c4,e4]@5 ~ [c4,d4,f#4]@5 ~ [c4,d4,g4]@3 ~ [d4,a4]@6 c4 ~ [c4,d4,f#4]@5 ~ [c4,d4,e4]@5 ~ [d4,f#4]@5 ~, ~@11 c4@2 ~@8 c4 ~@2]/2", // Csus2 C D7 Csus2 D5 D7 C D
  K: "[b3,d4,g4]@5 ~ [b3,d4,e4]@5 ~ [b3,d4,f4]@5 ~ [a#3,c#4]@5 ~", // G E7 Bdim A#m
  L: "d4@9 ~ [g3,e4] ~ [g3,e4]@3 ~ [f#3,d#4] ~ [f3,d4]@5 ~, b3 ~@3", // C D#m Dm
  M: "[e3@14 ~@8 c4@9 ~@3 [c4,a4] ~ [c4,a4]@3 ~ [c4,g#4] ~ [c4,g4]@5 ~, c4@3 g3@2 ~@3, ~@8 e3@7 ~@9]/2", // F Fm C5
  N: "[c4@16 ~@6 f4@23 ~@3, f4@6 c4@9 ~, a3@7 ~ a3@14 ~@2]/2", O: "[c4,e4,g4]@11 ~ [c4,e4,g4]@5 ~ [c4,e4,a4]@4 ~@2",
  P: "g3@16 [f#3,d#4] ~ [f3,d4]@5 ~, e4@13 ~@11", Q: "[e3,c4]@7 ~", R: "~@22 d4 ~",
  S: "[c4,e4]@5 ~ [c4,e4]@5 ~ [c4,e4]@5 ~ e4@4 b3 ~, ~@9 c4 ~@2", // C
  T: "[b3,d4,g4]@3 ~ [d4,g4]@6 b3@2 [d4,g4]@4 b3 ~ [e4,g4]@5 ~, ~ b3 ~@4", // G G5 Em
  U: "[d4@2 c4@35 ~@5 e4@4 [c4,f4] ~, g4@37 ~@3 c4@5 ~@3]/2", // F5
  V: "[b3,d4,g4]@3 ~ [b3,d4,g4]@5 ~ [d4,g4]@6 b3@2 [d4,g4]@4 b3 ~, ~@5 b3@2 ~@5", // G G5
  W: "[b3,d4,a4]@3 ~ [b3,d4,g4]@5 ~ [d4,g4]@6 b3@2 [d4,f4]@4 b3@2, ~@5 b3@2 ~@5", // Bm7 G G5 Dm
  X: "[c4@5 ~ c4@2 ~ b3@2 ~ a#3@8 ~@3 e4, e4@13 ~@3 e4@26 ~@4 g4 ~, ~@10 g3@9 ~@3 g3@19 ~@7]/2",
  Y: "[c4,f4,a4]@5 ~ [c4,f4]@4 g4 ~ [c4,f4,a4]@5 ~ [c4,f4,a4]@4 g4 ~, ~@2 a4 ~@5", // F F5 F
  Z: "[c4,a4]@2 g4@2 [c4,f4]@18 [c4,f4,g4] ~", // F F5 Csus4
  AA: "[c4,e4,a4]@5 ~ [c4,e4,a4]@3 ~ g4 ~ [c4,e4,a4]@5 ~ [e4,g4]@4 c4@2, ~@6 c4 ~", // Am Em
  AB: "e4@2 d4@2 c4@16 ~@2 c4 ~, g4@11 ~",
  AC: "[[c4,d4]@5 ~ [c4,e4]@5 ~ [c4,d4,f#4]@5 ~ [c4,d4,g4]@3 ~ [d4,a4]@6 c4 ~ [d4,f#4]@4 c4 ~ [d4,e4]@4 c4 ~ [d4,f#4]@4 c4 ~, ~@22 c4@3 ~@5 c4@2 ~@4 c4@2 ~@10]/2", // Csus2 C D7 Csus2 D5 D Dsus2 D
  AD: "d4@9 ~ [g3,e4] ~ [g3,e4]@3 ~ [f#3,d#4] ~ [f3,d4]@5 ~, b3@5 ~@19", // C D#m Dm
  AE: "[e3@8 ~@4 g3@4 ~@6 a#3@9 ~@3 [c4,a4] ~ [c4,a4]@3 ~ [c4,g#4] ~ [c4,g4]@4 ~@2, c4@13 ~@3 c4@15 ~@17, ~@5 e3@10 ~@9, ~@3 g3@2 ~@3]/2", // F Fm C5
  AF: "c4@10 a3@6 f4@7 ~, f4@7 ~@5, a3@7 ~@17", AG: "f4@7 ~@9 a3@2 c4@4 ~@2, ~@10 f4@13 ~",
  AH: "[c4,e4,g4]@11 ~ [c4,e4,g4]@5 ~ [c4,e4,a4]@5 ~", AI: "[g3,e4]@15 ~ [f#3,d#4] ~ [f3,d4]@5 ~",
  AJ: "[~@22 [c4,d4] ~ [c4,e4]@5 ~ [e4,g4]@4 c4 ~ [e4,g4]@4 c4 ~ [e4,g4]@4 c4 ~, ~@22 g4@7 ~ c4@3 ~@3 c4@2 ~@4 c4@2 ~@4]/2", // Csus2 C Em
  AK: "[b3,d4,g4]@3 ~ [d4,g4]@6 b3@2 [d4,g4]@4 b3 ~ e4@4 b3 ~, ~@2 b3@2 ~@5 b3 ~@2", // G G5
  AL: "[d4@2 c4@14 ~@6 e4@8 ~@4 e4@5 ~@3 e4@4 f4@2, g4@3 ~, ~@8 g3@5 ~@11, ~@18 c4@10 ~@2 c4@8 ~@2 c4@5 ~ c4 ~]/2",
  AM: "[b3,d4,g4]@3 ~ [b3,d4,g4]@5 ~ [d4,g4]@6 ~@2 [d4,g4]@4 b3 ~, ~@5 b3@2 ~ b3@2 ~@2", // G G5
  AN: "[[d4,a4]@4 b3@2 [d4,g4]@4 b3 ~ [d4,g4]@4 b3@2 [d4,f4]@2 ~@2 c4@6 ~@6 e4@6 g3@2 [b3,e4]@4 ~@2 a#3@6 ~@10 e4@3 ~@3 e4@2, ~@22 e4@8 c4@12 ~@6 e4@10 a#3@9 ~@3 g4 ~, ~@22 g3@4 ~@2 g3@9 ~@9 g3@6 ~@2 g3@12 ~@6]/3", // D5 G5 Dm E5
  AO: "[c4,a4]@2 g4@2 [c4,f4]@17 ~ [c4,g4] ~", // F F5 C5
  AP: "[c4,e4,a4]@5 ~ [c4,e4,a4]@3 ~ g4 ~ [e4,a4]@5 ~ [e4,g4]@4 c4 ~, ~@9 c4 ~@2", // Am A5 Em
  AQ: "e4@2 d4@2 c4@10 ~@2 c4@2 e4@4 c4 ~, g4@23 ~",
  AR: "[[c4,d4]@5 ~ [c4,e4]@5 ~ [c4,d4,f#4]@5 ~ [c4,d4,g4]@2 ~@2 [d4,a4]@6 c4 ~ [d4,f#4]@5 ~ [c4,d4,e4]@5 ~ [d4,f#4]@5 ~, ~@6 d4@3 ~@13 c4@4 ~@4 c4@2 ~@10 c4@2 ~@4]/2", // Csus2 C D7 Csus2 D5 D C D
  AS: "f4@7 ~ f4@3 ~, c4@5 ~@7, a3@7 ~@17", AT: "f4@6 ~@6 a3@6 f4@4 a3 ~, ~ c4 ~@2, ~@5 f4@3 ~@4", AU: "[e3,c4]@5 ~",
})).s("gm_epiano2").gain(0.8)

// chords · epiano2 · "E.PIANO" · soft notes
const epiano2_soft = note("<~@15 A B ~@6 C ~@18 D E F ~@2 G ~@4 H@2 ~@9 I ~ J ~ K ~@3 L M ~@6 C N@2 ~@7>".pickRestart({
  A: "~@2 f4 ~@19 c4 ~", B: "~@10 e4 ~@13", C: "a#3 ~@3", D: "~@11 f4", E: "f4 ~@23", F: "~@10 [c4,e4] ~@13",
  G: "~@18 c4 ~@5", H: "[~@6 c4@3 ~@2 c4@3 ~ c4@5 ~@4, ~@18 a3@7 ~@3 a3@8 ~@12]/2", I: "~@5 g4", J: "~@4 g3@7 ~@13",
  K: "b3 ~@5 b3 ~@5 b3 ~@5 b3@2 ~@4", L: "~@2 f4 ~@19 f4 ~", M: "~@10 [c4,e4] ~ c4@5 ~@7",
  N: "[~@12 c4@6 ~@4 c4@6 a3@7 ~@5 c4@6 ~@2, ~@10 a3@7 ~ a3@7 ~@23]/2",
})).s("gm_epiano2").gain(0.48)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  [~ x ~ x]!4
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!24
  [~ x ~ x]!4
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!24
  [~ x ~ x]!4
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!24
  [~ x ~ x]!4
  ~
>`).gain(0.69)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [~ x ~ x]!24 ~@4 [~ x ~ x]!24 ~@4 [~ x ~ x]!24 ~@5>").gain(0.69)

stack(bass, bass_soft, electric_guitar_muted, french_horn, epiano2, epiano2_soft, kick, snare, hihat, tambourine)

More by Tom Jones