Strudelify

Tracks of My Tears

Robinson

KeyG majorTempo96 bpm
0:00/0:00
// Tracks of My Tears — Robinson
// 96 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// 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(96/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
const bass = note(`<
  ~@4 A B A C D E F G H I H J K L K M K L A N O P D E F G H I H J K L K M K L A N O P ~ O P O P O P O P Q@2 R K L K M K
  L A N O P K L K M K L A N O S
>`.pickRestart({
  A: "g1@3 c2@5", B: "c2@2 e2 d2@4 f#1", C: "c2 b1 a1 g1@5", D: "g1@5 ~ c2@5 ~ c2@2 c2 ~", E: "c2@4 e2@2 d2@5 ~ d2@4",
  F: "g1@5 ~ c2@5 ~ c2@2 b1 ~", G: "a1 ~ g1 ~ a2@2 g2@6 g2@4", H: "g1@3 c2@3 c2@2", I: "c2@2 e2 d2@3 d2@2, ~@4 d2 ~@11",
  J: "d2 g1 a2 g2@3 g2@2, ~@4 g2 ~@11", K: "g1@3 c2@4 c2", L: "c2@2 e2 d2@3 b1 a1", M: "c2@2 e2 d2@2 d2 b1 a1",
  N: "c2 b1 a1 g1@4 g1", O: "c2@3 g1@4 g1", P: "c2@3 g1@5", Q: "g2@3 f#2@2 e2@3 g2@3 f#2@2 e2@3",
  R: "d2@8 d2 ~ d2 ~ d2 ~ d2 ~", S: "c2@3 g1 ~@4",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E F G H I J K H L M N H ~@7 O P@2 Q R S O T U S O ~@7 O P@2 ~ P@8 ~@10 O P@2 ~@7 O P V
>`.pickRestart({
  A: "d3!2 [b3,g4] [c3,g3,d4,e4]@5, [g2,b3,g4]@5 ~@11", // Em C G
  B: "c4@2 [c4,d4,e4]@2 e4@2 d4@3 ~ [b3,d4]@2 [c4,d4]@2 [b3,d4]@2, c3@3 [d2,a3]@5", // C Bm Csus2 Bm D5
  C: "g3@2 d3@2 [g2,b3,d4,g4] ~ [c3,e3,g3]@10, [b2,d4,g4]@2 ~ [c4,e4]@2 ~@3", // G C G C
  D: "[g3,c4,e4] [f3,b3,d4] [e3,a3,c4] [g2,d3,g3,b3]@5", // C Bdim Am G
  E: "d3@2 d3@2 [b3,g4]@2 e4@4 [c4,e4] ~ [c4,e4] ~ [c4,e4] ~, [b3,g4]@2 ~ [g3,d4]@5", // Em C Em G5
  F: "c4@2 [c4,d4,e4]@2 [e4,g4]@2 d4@3 ~ [b3,d4] ~ c4 ~@3, c3@3 ~@5, g3@2 ~ [a3,f#4]@5", // C Em Bm D
  G: "~@2 d3@2 d4 ~ [c4,e4]@4 [c4,e4] ~ [c4,e4] ~ [c4,e4] ~, [b2,d4,g4] ~@3", // C G
  H: "[g3,c4,e4] [f3,b3,d4] [e3,a3,c4] [d3,g3,b3]@5", I: "d3!2 [b3,g4] [g3,d4]@5, [b3,g4]@2 ~ e4@2 ~@3",
  J: "c4@2 d4@2 e4@2 d4@3 ~ [b3,d4] ~ [c4,e4] ~ d4 ~, c3@3 ~@5", // Bm C
  K: "~@2 d3@2 d4 ~ [c4,e4]@4 [c4,e4] ~ [c4,e4] ~ c4 ~, [b2,d4,g4] ~@3", // C G
  L: "d3@2 d3@2 [b3,g4]@2 e4@4 c4 ~@5, [b3,g4]@2 ~ d4@5", // Em
  M: "c4@2 [d4,e4]@2 [e4,g4]@2 d4@3 ~ d4 ~ [c4,e4] ~ [d4,g4] ~, c3@3 ~@5, g3@2 ~ [a3,f#4]@5, ~ c4@2 ~@5", // Dsus2 Em C G5 D
  N: "g3@2 d3@2 d4 ~ [c4,e4]@4 ~@6, [b2,d4,g4] ~@3", O: "[g3,c4,e4] ~ [f3,b3,d4] ~ [e3,a3,c4] ~ [d3,g3,b3]@10",
  P: "[g4,c5,e5]@3 [g4,b4,d5]@5", Q: "d3@2 d3@2 [b3,g4]@2 e4@4 [c4,e4] ~ [c4,e4] ~@3, [b3,g4]@2 ~ [g3,d4]@5",
  R: "c4@2 [c4,d4]@2 e4@2 d4@3 ~ [b3,d4] ~ [c4,e4] ~ [d4,g4] ~, c3@3 ~@5", // Csus2 Bm C G5
  S: "~@2 d3@2 d4 ~ [c4,e4]@4 ~@6, [b2,d4,g4] ~@3", // C G
  T: "d3@2 d3@2 [b3,g4]@2 e4@4 [c4,e4] ~ c4 ~@3, [b3,g4]@2 ~ [g3,d4]@5", // Em C Em G5
  U: "c4@2 [c4,d4]@2 [e4,g4]@2 d4@3 ~ [b3,d4] ~ [c4,e4] ~ [d4,g4] ~, c3@3 [a3,f#4]@5", V: "[g4,c5,e5]@3 [g4,b4,d5] ~@4",
})).s("gm_acoustic_guitar_steel").gain(0.35)

// chords · acoustic guitar steel · soft notes
const acoustic_guitar_steel_2 = note("<A B A ~@2 C D ~ E F G ~ H I J ~@11 K L M ~ N O M ~@43>".pickRestart({
  A: "~@10 c4 ~ c4 ~ c4 ~", B: "g3@2 g4 f#4@5", C: "~@12 e4 ~ [d4,g4] ~", D: "g3@2 ~@2 [b3,g4] ~ g3@9 ~",
  E: "~@10 [c4,e4] ~ [c4,e4] ~ [c4,e4] ~", F: "~@2 [c4,e4]@2 g4@2 ~@8 g4 ~, g3@2 ~ [a3,f#4]@5",
  G: "g3@2 ~@2 [b3,g4] ~ g3@8 e4 ~", H: "~@10 e4 ~ [c4,e4] ~ [c4,e4] ~, ~@3 g3@5", I: "~@10 b3 ~@5",
  J: "~@4 [b3,g4] ~@5 [c4,e4] ~ [c4,e4] ~ [c4,e4] ~, ~@6 g3@9 ~", K: "~@14 [c4,e4] ~", L: "~ e4 g4 [a3,f#4]@5, g3 ~@3",
  M: "g3@2 ~@2 [b3,g4] ~@5 [c4,e4] ~ [c4,e4] ~ [c4,e4] ~, ~@6 g3@9 ~", N: "~@12 e4 ~ [c4,e4] ~", O: "~ e4 ~@6, g3 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.2)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@19 A B@2 C D E F ~@4 G H I J K L K M B@2 C D N F ~ O@8 P@2 Q R@4 B@2 C D N S K L K M B@2 C D N T
>`.pickRestart({
  A: "~@9 g4 a4 b4 c5 d5 e5 f#5", B: "[g5@18 f#5@3 e5@3 d5@4 e5@2 f#5@2]/2", C: "g5", D: "g5 f#5 e5 d5@5",
  E: "[c5,e5]@6 ~@4 [f#4,g4] [g#4,a4] [a#4,b4] [c5,c#5] [d5,d#5] [e5,f5], g4@5 ~@3, ~@3 [b4,d5]@3 ~@2", // C Gmaj7 Amaj7 Bmaj7 C#maj7 D#maj7 Fmaj7 Bm
  F: "[c6,e6]@3 [b5,d6]@5, g5, f#5 ~@15", G: "g5@3 e5@5", H: "c5 d5 e5 [d5,f#5]@5", I: "g5@3 [g4,c5,e5]@5",
  J: "[c5,e5,g5]@3 [b4,d5,g5]@5", K: "[d4,g4] [c4,e4]", L: "[e4,g4] [d4,a4]", M: "[e4,g4]@8 ~ g4 a4 b4 c5 d5 e5 f#5",
  N: "[c5,e5]@6 [b4,d5]@3 ~ [d4,g4] [g#4,a4] [a#4,b4] [c5,c#5] [d5,d#5] [e5,f5], g4@9 ~@7", // C Bm G5 Amaj7 Bmaj7 C#maj7 D#maj7 Fmaj7
  O: "[g4,c5,e5]@3 [g4,b4,d5]@5", P: "b5@3 a5@2 g5@3 b5@3 a5@2 g5@3", Q: "d6", R: "[g5@56 ~ g4 a4 b4 c5 d5 e5 f#5]/4",
  S: "[c6,e6]@3 [b5,d6]@5, g5@7 ~, f#5 ~@15", T: "[g5,c6,e6]@6 [b4,d5,b5,d6] ~@9, f#5 ~@15",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.3)

// other · baritone sax
const baritone_sax = note("<~@22 A B C D ~@14 A B C D ~ C D C D C D C D E F G ~@6 A B C D ~@6 A B C H>".pickRestart({
  A: "~@7 g2", B: "c3 ~ b2 ~ a2 ~ g2@9 ~", C: "c3@6 g2@9 ~", D: "c3@5 ~ g2@10", E: "g4@3 f#4@2 e4@3 g4@3 f#4@2 e4@3",
  F: "g4@3 f#4@2 e4@3 g4@3 f#4@2 g4@3", G: "a4@8 a5 ~ a5 ~ a5 ~ a5 ~", H: "c3@5 ~ g2@2 ~@8",
})).s("gm_baritone_sax").gain(0.71).pan(0.3)

// chords · brass section
const brass_section = note(`<
  ~@16 A B C D C E F ~@11 A B C D C E F ~@12 G@2 H A B C D C E F ~@3 A B C D C E F ~@3
>`.pickRestart({
  A: "[d4,b4,g5]@6 ~@2 [d4,b4,g5]@2 ~ [c4,a4,e5]@2 ~ [b3,g4,d5]@2", // G Am G
  B: "[c4,g4,e5]@2 ~ [c4,g4,g5]@2 ~ [c4,g4,e5] ~ [f#4,d5,a5]@7 ~", // C C5 C D
  C: "[d4,b4,g5]@7 ~ [d4,b4,g5]@2 ~ [c4,a4,e5]@2 ~ [b3,g4,d5]@2", // G Am G
  D: "[c4,e5,g5]@2 ~ [c4,g4,g5]@2 ~ [c4,c5,e5] ~ [f#4,d5,a5]@7 ~", // C C5 C D
  E: "[c4,c5,e5]@2 ~ [c4,b4,g5]@2 ~ [e4,c5,e5] ~ [f#4,d5,a5]@8", F: "[b4,d5]@3 [c5,e5]@5, g4",
  G: "b4@3 a4@2 g4@3 b4@3 a4@2 g4@3", H: "f#4@8 f#4 ~ f#4 ~ f#4 ~ f#4 ~",
})).s("gm_brass_section").gain(0.64).pan(0.7)

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

// drums · snare
const snare = s("sd").struct("<~@3 A B@40 A B@8 C@2 D B@19 E>".pickRestart({
  A: "~@8 x ~ x!3 ~ x ~", B: "~ x ~ x", C: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", D: "~@4 x!4", E: "x ~@2 x ~@4",
})).gain(0.4)

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

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@6 x!2] ~@72>").gain(0.45)

// drums · open hat
const open_hat = s("oh").struct("<~@44 x ~@31>").gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [~@11 x ~@4] ~@72>").gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@3 A ~@7 A ~ A ~ A ~ A ~ A@3 ~@7 A ~ A ~ A ~ A ~ A@2 ~ A ~@6 A ~@2 A@2 ~ A ~ A ~ A ~ A@3 ~ A ~ A ~ A ~ A B
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4",
})).gain(0.4)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@25 A ~@17 A ~@8 A ~@12 A ~@10>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.2)

// drums · high tom
const high_tom = s("ht").struct("<~@3 [~@4 x!2 ~@2] ~@72>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@4
  [~ x ~ x]!40
  ~
  [~ x ~ x]!8
  [x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2]!2
  [x ~@3 x!4]
  [~ x ~ x]!19
  [~@2 x!2 ~@4]
>`).gain(0.4)

// drums · congas
const congas = s("conga:33").struct(`<
  ~@4
  [x ~@2 x!2 ~@2 x]!40
  ~
  [x ~@2 x!2 ~@2 x]!8
  ~@3
  [x ~@2 x!2 ~@2 x]!19
  [x ~@2 x ~@4]
>`).gain(1.27)

stack(
  bass, acoustic_guitar_steel, acoustic_guitar_steel_2, string_ensemble_1, baritone_sax, brass_section, kick, snare,
  hihat, low_tom, open_hat, mid_tom, crash, crash_soft, high_tom, tambourine, congas
)

More by Robinson