Strudelify
Tears Don't Lie (long version) cover art

90s Charthits

Tears Don't Lie (long version)

Mark 'Oh

KeyG majorTempo165 bpm
0:00/0:00
// Tears Don't Lie (long version) — Mark 'Oh
// 165 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 8 "SYNVOX" synth choir (copy of ch 9 "PICCOLO" piccolo)
// note: Full arrangement: all 148 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(165/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.

// other · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B A@2 C D E@2 F G H I G J K L ~ A B A@2 C D E@2 F G H I G J K L ~@16 M N O P Q R S T U V W X Y Z AA AB M N O P Q R
  S T U V W X Y Z AA AB A B A@2 C D E@2 F G H I G J K L ~@17 A B A@2 C D E@2 F G H I G J K L M N O P Q R S T U V W X Y Z
  AA AB ~
>`.pickRestart({
  A: "~@6 b4 ~ g5@2 d5@2 b4@2 g4@2, g3, ~ d4@7, ~ g4@2 ~", B: "~@7 f#4, d3@3 a4, ~ d4@7, ~@2 a4@3 d5@3, ~@3 d5 f#5@4",
  C: "~@7 b4, b3@3 d5, ~ f#4@7, ~@2 b4@3 f#5@3, ~@3 d5 b5@4", D: "~@7 c5, c4@3 e5, ~ g4@7, ~@2 c5@3 g5@3, ~@3 e5 c6@4",
  E: "~@5 a5 ~ a5, d4, ~ a4@7, ~@4 d5@7 ~ f#6@4, ~@3 f#5 d6@4",
  F: "~@7 e5, c4@5 e5 c5@2, ~ g4@7, ~@3 c5@5 g5@8, ~@2 e5 c6@5",
  G: "~@7 f#5, d4@5 f#5 d5@2, ~ a4@7, ~@3 d5@5 a5@8, ~@2 f#5 d6@5",
  H: "~@7 d5, b3@5 d5 b4@2, ~ f#4@7, ~@3 b4@5 f#5@8, ~@2 d5 b5@5",
  I: "~@4 g5 ~@2 g6, e4@3 b5@2 e6 g5@2, ~ g4@7, ~@3 b4@13, ~ e5@3",
  J: "~@7 e5, a3@5 e5 c5@2, ~ a4@7, ~@3 c5@5 a5@8, ~@2 e5 c6@5",
  K: "~@7 b4, g3@5 b4 g4@2, ~ d4@7, ~@3 g4@5 d5@8, ~@2 b4 g5@5",
  L: "~ b3 d4 ~@2 b4 ~ d5 ~ g5 ~ b5 g5@3 ~, g3, ~@3 b3@3 g4@4 d5@3 ~@3, ~ d4 b4 ~",
  M: "[g4,g5] ~ [g4,g5] ~ [g4,g5] ~ [g4,g5] ~ [g4,g5] ~@3 [g4,g5] ~@3", // G
  N: "[d5,d6] ~ d5 ~ [d5,d6] ~@3 [d5,d6] ~@3 [d5,d6] ~@3", O: "[g4,g5] ~@3 [g4,g5] ~@3 [g4,g5] ~@3 [g4,g5] ~ [g4,g5] ~",
  P: "~@2 [g4,g5] ~ [g4,g5] ~@3 [g4,g5] ~@3 [g4,g5] ~@3", Q: "[b4,b5] ~@3 [b4,b5] ~@3 [b4,b5] ~@3 [b4,b5] ~@3",
  R: "[c5,c6] ~@3 [c5,c6] ~@3 [c5,c6] ~ c5 ~ [c5,c6] ~@3", S: "[d5,d6] ~@3 [d5,d6] ~@3 [d5,d6] ~@5 [d5,d6] ~",
  T: "~@2 [d5,d6] ~ [d5,d6] ~@3 [d5,d6] ~@3 [d5,d6] ~@3", U: "[c5,c6] ~@3 [c5,c6] ~@3 [c5,c6] ~@3 [c5,c6] ~@3",
  V: "[d5,d6] ~@3 [d5,d6] ~@3 [e5,e6] ~@3 [e5,e6] ~@3", // D E
  W: "[b4,b5] ~@3 [b4,b5] ~ [b4,b5] ~ [b4,b5] ~ b4 ~ b4 ~ [b4,b5] ~", // B
  X: "~@2 e5 ~ [e5,e6] ~@3 [e5,e6] ~ e5 ~ [e5,e6] ~@3", Y: "[d5,d6] ~@3 [d5,d6] ~@3 [d5,d6] ~ d5 ~ [d5,d6] ~@3",
  Z: "[a4,a5] ~ a5 ~ [a4,a5] ~@3 [a4,a5] ~ [a4,a5] ~ [a4,a5] ~ [a4,a5] ~", // A
  AA: "[g4,g5] ~@3 [g4,g5] ~@3 [g4,g5] ~@5 [g4,g5] ~", AB: "~@2 [g4,g5] ~ [g4,g5] ~@3 [g4,g5] ~ g4 ~ [g4,g5] ~ g5 ~",
})).s("gm_piano").gain(0.33)

// other · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  ~@16 A@2 ~@15 A@2 ~@15 B C D E F G H I J K L M N O P Q B C D E F G H I J K L M N O P Q ~@15 A@2 ~@31 R@2 C D E F G H I
  J K L M N O P Q ~
>`.pickRestart({
  A: "[~@15 g6 ~@16, ~@13 d6@6 ~@13, ~@14 b5@3 ~@15]/2", B: "~@10 [g4,g5] ~@3 g4 ~",
  C: "~@2 d6 ~@3 [d5,d6] ~@3 [d5,d6] ~@3 [d5,d6] ~", D: "~@2 [g4,g5] ~@3 [g4,g5] ~@3 [g4,g5] ~@5",
  E: "[g4,g5] ~@5 [g4,g5] ~@3 g4 ~@3 [g4,g5] ~", F: "~@2 [b4,b5] ~@3 [b4,b5] ~@3 [b4,b5] ~@3 b4 ~",
  G: "~@2 [c5,c6] ~@3 [c5,c6] ~@3 c6 ~@3 [c5,c6] ~", H: "~@2 [d5,d6] ~@3 [d5,d6] ~@3 [d5,d6] ~ [d5,d6] ~@3",
  I: "[d5,d6] ~@5 [d5,d6] ~@3 [d5,d6] ~@3 [d5,d6] ~", J: "~@6 [c5,c6] ~@3 [c5,c6] ~@3 [c5,c6] ~",
  K: "~@2 [d5,d6] ~@3 [d5,d6] ~@3 [e5,e6] ~@3 [e5,e6] ~", L: "~@2 [b4,b5] ~@7 b5 ~ b5 ~@3",
  M: "[e5,e6] ~ e6 ~@3 [e5,e6] ~@3 e6 ~@3 [e5,e6] ~", N: "~@2 [d5,d6] ~@3 [d5,d6] ~@3 d6 ~@3 [d5,d6] ~",
  O: "~@2 a4 ~@3 [a4,a5] ~@9", P: "~@2 [g4,g5] ~@3 [g4,g5] ~@3 [g4,g5] ~ [g4,g5] ~@3",
  Q: "[g4,g5] ~@5 [g4,g5] ~@3 g5 ~@3 g4 ~", R: "[~@15 g6 ~@10 [g4,g5] ~@3 g4 ~, ~@13 d6@6 ~@13, ~@14 b5@3 ~@15]/2",
})).s("gm_piano").gain(0.18)

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~@18 A B A@2 C D B@2 D B C E B F A@3 B A@3 B A@3 B A@3 B A@3 B A@2 C D B@2 D B C E B F A@3 B A@2 C D B@2 D B C E B F
  A@3 B A@2 C D B@2 D B C E B F A@3 B A@3 B A@3 B A@3 B A@2 ~ G H G@3 I H@2 D B C E B F A@3 B A@2 C D B@2 D B C E B F
  A@2 ~
>`.pickRestart({
  A: "~ g1 ~ g1 ~ g1 ~ g1", B: "~ d2 ~ d2 ~ d2 ~ d2", C: "~ b1 ~ b1 ~ b1 ~ b1", D: "~ c2 ~ c2 ~ c2 ~ c2",
  E: "~ e2 ~ e2 ~ e2 ~ e2", F: "~ a1 ~ a1 ~ a1 ~ a1", G: "g2", H: "d3", I: "c3 b2",
})).s("gm_synth_bass_2").gain(0.54)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@18 A B A@2 C D B@2 D B C E B F A@3 B A@3 B A@3 B A@3 B A@3 B A@2 C D B@2 D B C E B F A@3 B A@2 C D B@2 D B C E B F
  A@3 B A@2 C D B@2 D B C E B F A@3 B A@3 B A@3 B A@3 B A@2 ~@17 A B A@2 C D B@2 D B C E B F A@2 ~
>`.pickRestart({
  A: "~ g2 ~ g2 ~ g2 ~ g2", B: "~ d3 ~ d3 ~ d3 ~ d3", C: "~ b2 ~ b2 ~ b2 ~ b2", D: "~ c3 ~ c3 ~ c3 ~ c3",
  E: "~ e3 ~ e3 ~ e3 ~ e3", F: "~ a2 ~ a2 ~ a2 ~ a2",
})).s("gm_lead_2_sawtooth").gain(0.13).pan(0.7)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~ A B C@2 D E F@2 E G H I J K L@3 A B C@2 D E F@2 E G H I J K C@2 ~@16 M J N M H O P@2 O Q H I J K R@2 M J N M H O P@2
  O Q H I J K R@2 A B C@2 D E F@2 E G H I J K C@2 ~@17 M J N M H O P@2 O Q H I J K R@2 M J N M H O P@2 O Q H I J K R@2 ~
>`.pickRestart({
  A: "[g3,b3,d4,g4]", B: "[f#3,a3,d4,f#4]", C: "[g3,b3,d4,g4]/2", D: "[f#3,b3,d4,f#4]", E: "[g3,c4,e4,g4]",
  F: "[a3,d4,f#4,a4]/2", G: "[a3,d4,f#4,a4]", H: "[b3,d4,f#4,b4]", I: "[e4,g4,b4,e5]", J: "[d4,f#4,a4,d5]",
  K: "[a3,c4,e4,a4]", L: "[g3,b3,d4,g4]/3", M: "[g3,b3,d4,g4,b4]", N: "[g3,b3,d4,g4,b4] [g3,c4,e4,g4,c5]",
  O: "[c4,e4,g4,c5]", P: "[d4,f#4,a4,d5]/2", Q: "d5 e5, [d4,f#4,a4]",
  R: "[[b3,d4,g4]@7 ~ [e4,g4,c5]@8 [b3,d4,g4,b4]@16, g3@31 ~]/2", // G C G
})).s("gm_synth_strings_1").gain(0.06)

// other · piccolo
const piccolo = note(`<
  ~ A B C D E F G H F B E I B J C ~@2 A B C D E F G H F B E I B J C ~@49 A B C D E F G H F B E I B J C ~@9 K L K@3 L K@2
  ~@17 A B C D E F G H F B E I B J C ~@2
>`.pickRestart({
  A: "g4 ~@5 g4 ~", B: "d5 ~@5 d5 ~", C: "g4 ~@7", D: "~@4 g4 ~@3", E: "b4 ~@5 b4 ~", F: "c5 ~@5 c5 ~", G: "d5 ~@7",
  H: "~@6 d5 ~", I: "e5 ~@5 e5 ~", J: "a4 ~@5 a4 ~", K: "g4 ~ g4 ~@2 g4 ~ g4", L: "d5 ~ d5 ~@2 d5 ~ d5",
})).s("gm_piccolo").gain(0.35).pan(0.8)

// other · steel drums · "STEELDRUMS"
const steel_drums = note(`<
  ~@50 A B C D E F G H F I E J K F C D A B C D E F G H F I E J K F C D ~@33 A B C D E F G H F I E J K F C D A B C D E F
  G H F I E J K F C D ~
>`.pickRestart({
  A: "~@2 b4 ~ b4 ~ b4 ~ b4 ~ b4 ~ b4 ~ b4 ~", B: "~@2 d5 ~@3 d5 ~ d5 ~@3 d5 ~ d5 ~",
  C: "b4 ~ b4 ~ b4 ~ b4 ~ c5 ~ c5 ~ c5 ~ c5 ~", D: "b4 ~ b4 ~ b4 ~ b4 ~ b4 ~ b4 ~@5",
  E: "b4 ~ b4 ~ b4 ~ b4 ~ b4 ~ b4 ~ b4 ~ b4 ~", F: "c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~",
  G: "d5 ~ d5 ~ d5 ~@3 d5 ~ d5 ~ d5 ~@3", H: "d5 ~ d5 ~ d5 ~ d5 ~ d5 ~ d5 ~ c5 ~ c5 ~",
  I: "d5 ~ d5 ~ d5 ~ d5 ~@3 e5 ~ e5 ~ e5 ~", J: "e5 ~ e5 ~ e5 ~ e5 ~ e5 ~@3 e5 ~ e5 ~",
  K: "d5 ~ d5 ~ d5 ~ d5 ~ d5 ~ d5 ~ d5 ~ d5 ~",
})).s("gm_steel_drums").gain(0.17).pan(0.3)

// other · steel drums · "STEELDRUMS" · soft notes
const steel_drums_soft = note(`<
  ~@50 A B ~ C ~@2 D ~@2 E ~ F ~@3 G A B ~ C ~@2 D ~@2 E ~ F ~@3 G ~@33 A B ~ C ~@2 D ~@2 E ~ F ~@3 G A B ~ C ~@2 D ~@2
  E ~ F ~@3 G ~
>`.pickRestart({
  A: "b4 ~@15", B: "d5 ~@3 d5 ~@11", C: "~@12 b4 ~ b4 ~", D: "~@6 d5 ~@7 d5 ~", E: "~@8 d5 ~@7", F: "~@10 e5 ~@5",
  G: "~@12 b4 ~@3",
})).s("gm_steel_drums").gain(0.1).pan(0.3)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth_2 = note(`<
  ~@18 A B A@2 C D B@2 D B C E B F A@2 B@16 A B A@2 C D B@2 D B C E B F A@2 B G B@2 H I G@2 I G H J G E B@2 A B A@2 C D
  B@2 D B C E B F A@2 B@16 ~@17 B G B@2 H I G@2 I G H J G E B@2 ~
>`.pickRestart({
  A: "~ g2 ~ g2 ~ g2 ~ g2", B: "~ d3 ~ d3 ~ d3 ~ d3", C: "~ b2 ~ b2 ~ b2 ~ b2", D: "~ c3 ~ c3 ~ c3 ~ c3",
  E: "~ e3 ~ e3 ~ e3 ~ e3", F: "~ a2 ~ a2 ~ a2 ~ a2", G: "~ a3 ~ a3 ~ a3 ~ a3", H: "~ f#3 ~ f#3 ~ f#3 ~ f#3",
  I: "~ g3 ~ g3 ~ g3 ~ g3", J: "~ b3 ~ b3 ~ b3 ~ b3",
})).s("gm_lead_2_sawtooth").gain(0.15).pan(0.7)

// chords · church organ · "CHURCH ORG"
const church_organ = note("<~@115 A B C@3 D E@2 F G H I G J K@2 ~@17>".pickRestart({
  A: "[g2,g3,d5,g5,b5]", B: "[d3,d4,f#5,a5,d6]",
  C: "[[d5,g5,b5]@8 [e5,g5,c6]@8 [d5,g5,b5]@8 [d5,g5,a5]@7 ~ [d5,f#5,b5]@16, [g2,g3]@31 b3@16 ~]/3", // G C G Dsus4 Bm G
  D: "c4@8 b3@7 ~, [e5,g5,c6]", E: "[[f#5,a5,d6], a3@15 ~]/2", F: "[e5,g5,c6]", G: "[f#5,a5,d6]", H: "[d5,f#5,b5]",
  I: "[g5,b5,e6]", J: "[c5,e5,a5]", K: "[b4@7 ~ c5@7 ~ b4@16, [d5,g5]@31 ~]/2",
})).s("gm_church_organ").gain(0.13).pan(0)

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

// drums · snare
const snare = s("sd").struct("<~@14 A B@3 C@30 B@2 C@14 B@2 C@28 D B@3 C@14 B@2 ~@13 A B@3 C@16 ~>".pickRestart({
  A: "~@8 x!8", B: "x!16", C: "~@4 x ~@2 x ~ x ~@6", D: "~@4 x ~@2 x!9",
})).gain(0.24)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@11 A@3 B ~@3 C@30 ~@2 C@14 ~@2 C@25 D@3 E ~@3 C@14 ~@12 A@3 B ~@3 C@16 ~
>`.pickRestart({
  A: "x!16", B: "x!8 ~@8", C: "~@3 x", D: "x!4 ~ x!2 ~ x ~ x!6", E: "x!4 ~ x!2 ~@9",
})).gain(0.08)

// drums · clap
const clap = s("cp").struct("<~@41 A ~@7 B ~@31 B ~@23 A ~@7 B ~@32 A ~>".pickRestart({
  A: "~ x!3", B: "~@3 x!4 ~",
})).gain(0.56)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@49 [~@2 x!3 ~@11] ~@31 [~@2 x!3 ~@11] ~@31 [~@2 x!3 ~@11] ~@33 x>").gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~ A ~@16 B@96 ~@9 A ~@7 B@16 ~>".pickRestart({
  A: "x", B: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<[~@7 x!9] ~@17 [~ x ~ x ~ x ~ x]!96 ~@8 [~@10 x!6] ~@8 [~ x ~ x ~ x ~ x]!16 ~>")
  .gain(0.4)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<[x!7 ~@9] ~@121 [x!10 ~@6] ~@25>").gain(0.16)

// drums · crash
const crash = s("cr").struct("<~ A ~@14 B C ~@14 B C ~@14 B C ~@46 B C ~@14 B C A ~@14 B C ~@16 A>".pickRestart({
  A: "x", B: "x!2", C: "x ~ x ~ x!4",
})).gain(0.56)

// drums · ride bell
const ride_bell = s("rd").struct("<[~@3 x!13] ~@121 [~@6 x!10] ~@25>").gain(0.32)

// drums · ride bell · soft notes
const ride_bell_soft = s("rd").struct("<[x!3 ~@13] ~@121 [x!6 ~@10] ~@25>").gain(0.16)

// drums · tambourine
const tambourine = s("tb").struct("<~@18 A@16 B@16 C@16 B@16 A@16 B@16 ~ D@16 B@16 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", C: "~ x ~ x!3 ~ x", D: "~ x",
})).gain(0.24)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@50 [~ x]!32 ~@49 [~ x]!16 ~>").gain(3.65)

// drums · shaker
const shaker = s("sh").struct("<~@18 [x!4]!96 ~@17 [x!4]!16 ~>").gain(0.48)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@18 [~ x ~ x ~ x ~ x]!96 ~@17 [~ x ~ x ~ x ~ x]!16 ~>").gain(0.24)

// … 5 more lines

More by Mark 'Oh