Strudelify

Laid So Low (Tears Roll Down)

Tears for Fears

KeyE♭ minorTempo115 bpm
0:00/0:00
// Laid So Low (Tears Roll Down) — Tears for Fears
// 115 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 129 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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 · "FINGERDBAS"
const bass = note(`<
  A B C D E F G H ~@2 I@2 J K I@2 L@2 I@2 J K I@2 L@2 M@2 L@2 N@3 O P B C D E F G H Q R S T U V W X ~ I@2 J K I@2 L@2
  I@2 J K I@2 L@2 M@2 L@2 N@3 O P B C D E F G H Q R S T U V W X ~@4 P B C D E F G H P B C D E F G H Q R S T U V W X P B
  C D E F G H Y@2
>`.pickRestart({
  A: "bb1@2 ~ bb1@11 ab1@2", B: "bb1@10 db2@3 ab1@3", C: "gb1@7 gb2", D: "gb1@10 gb2@2 ~ gb2@3", E: "ab2@7 ab1",
  F: "ab1@9 ~ ab1@3 db2@3", G: "eb2 eb1", H: "f1!2", I: "bb1 ~ bb1 ~", J: "eb1 ~ eb1 ~", K: "eb1@2 ~@2 eb1@2 ~ gb1",
  L: "gb1 ~ gb1 ~", M: "g1 ~ g1 ~", N: "ab1 ~ ab1 ~", O: "ab1 ~@3", P: "bb1@3 bb1@11 ab1@2", Q: "ab1@13 ~ gb1@2",
  R: "ab1@7 ab2", S: "gb2@7 gb2", T: "gb1@7 gb1", U: "ab1@7 gb1", V: "ab1!2", W: "eb2", X: "f2", Y: "[bb1@3 bb1@29]/2",
})).s("gm_electric_bass_finger").gain(0.71)

// chords · electric guitar jazz · "CLAV/JZGTR"
const electric_guitar_jazz = note("<~@25 A@2 B@2 ~@37 C@2 D@2 ~@59>".pickRestart({
  A: "[~@16 eb4@2 ~@3 [bb3,eb4]@11, ~@15 bb3@3 [g3,bb3]@2 g3@10 ~@2, ~@19 eb4@2 ~@11]/2", // Eb5 Gm
  B: "[~@16 eb4@2 ~@4 eb4@9 ~, ~@15 [gb3,bb3]@3 [gb3,bb3]@2 gb3@10 ~@2, ~@19 eb4@2 bb3@10 ~]/2", // Gb
  C: "[~@16 eb4@2 ~@3 [bb3,eb4]@11, ~@15 [g3,bb3]@3 [g3,bb3]@2 g3@12, ~@19 eb4@2 ~@11]/2", // Eb5 Gm
  D: "[~@16 eb4@2 ~@3 [bb3,eb4]@10 ~, ~@15 [gb3,bb3]@3 [gb3,bb3]@2 gb3@10 ~@2, ~@19 eb4@2 ~@11]/2", // Eb5 Gb
})).s("gm_electric_guitar_jazz").gain(0.39)

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  A@2 B@2 C@2 D E ~@26 A@2 B@2 C@2 D E F@2 B@2 C@2 G@3 ~@24 A@2 B@2 C@2 D E F@2 B@2 C@2 G@3 ~@3 A@2 B@2 C@2 D E A@2 B@2
  C@2 D E F@2 B@2 C@2 D H A@2 B@2 C@2 D E A@2
>`.pickRestart({
  A: "[bb4@3 bb4@29, [db4,f4]]/2", B: "[bb3,db4,gb4]/2", C: "[ab3@7 bb3, eb4]/2", D: "[bb3,eb4]", E: "[gb3,eb4]",
  F: "[ab4@3 ab4@29, [ab3,c4]]/2", G: "[eb4@4 [gb3,eb4,gb4]@5 ~@3, bb3@5 ~@7]/3", H: "[gb3,eb4,gb4]",
})).s("gm_lead_2_sawtooth").gain(0.38)

// chords · brass section · "PRG.CHANGE"
const brass_section = note("<A@2 ~@73 A@2 ~@26 A@2 ~@14 A@2 ~@8>".pickRestart({
  A: "[~@6 [f5,bb5,eb6]@7 ~@3]/2", // Ebsus2
})).s("gm_brass_section").gain(0.54)

// other · acoustic guitar steel · "PRG.CHANGE"
const acoustic_guitar_steel = note(`<
  ~@4 A@2 B C D ~@29 E@2 B F G@2 H@2 I@2 J K L ~@28 A@2 B F G@2 H@2 I@2 J M ~@4 N@2 O@2 P@2 Q R ~@4 S@2 B F G@2 H@2 I@2
  J T U ~@3 P@2 Q R V@2
>`.pickRestart({
  A: "[bb4@6 bb4@6 bb4@6 bb4@6 bb4@7 bb4]/2", B: "db5 eb5@13 bb4 db5", C: "eb5@8 eb5@6 [b4,c5,d5] [e4,f4,g4,a4]",
  D: "[b3,c4,d4] [f3,g3,a3] [d3,e3] ~@13", E: "[~@6 bb4 ~@5 bb4@6 bb4@6 bb4@7 bb4]/2", F: "eb5!2",
  G: "[ab4@3 ab4@23 eb4@3 eb4@3]/2", H: "[eb4@6 eb4 db4 eb4@22 bb3@2]/2", I: "[db4@3 eb4@3 eb4@22 bb3@2 db4@2]/2",
  J: "eb4!2", K: "bb3@14 [g3,a3] [d3,e3,f3]", L: "[b2,c3] [f2,g2,a2] [d2,e2] ~@13", M: "bb3@14 [g3,a3] f3",
  N: "[~@13 ab5@19]/2", O: "[eb5@6 eb5 db5 eb5@14 eb5 db5 eb5@3 eb5@2 ~ db5@2]/2",
  P: "[bb4@3 bb4@3 bb4@3 bb4@3 eb4@2 eb4 db4]/2", Q: "eb4@3 ~ db4@3 ~", R: "b3@3 ~ db4@3 ~",
  S: "[~@6 bb4@6 bb4@6 bb4@6 bb4@7 bb4]/2", T: "bb3@14 [g3,a3] [d3,f3]", U: "c3 ~@15", V: "[bb3@3 bb3@29]/2",
})).s("gm_acoustic_guitar_steel").gain(0.54)

// chords · acoustic guitar nylon · "PRG.CHANGE"
const acoustic_guitar_nylon = note("<~@90 A@8 ~@31>".pickRestart({
  A: "[~@15 f5 [db5,f5]@2 f5 gb5 ~ [c5,f5]@2 [db5,f5] ~ f5@2 gb5 ~ f5 [db5,f5]@2 f5 gb5 ~ [c5,f5]@2 [db5,f5] ~ f5@2 gb5 ~ f5 [db5,f5]@2 f5 gb5 ~ [c5,f5]@2 [db5,f5] ~ f5@2 gb5 ~ f5 [db5,f5]@2 f5 gb5 ~ [c5,f5]@2 [db5,f5] ~ f5@2 gb5 ~ f5 [db5,f5]@2 f5 gb5 ~ [c5,f5]@2 [db5,f5] ~@48, ~@15 e3@113, ~@18 bb4@3 ~@4 bb4@5 ~@2 bb4@3 ~@4 bb4@5 ~@2 bb4@3 ~@4 bb4@5 ~@2 bb4@3 ~@4 bb4@5 ~@2 bb4@3 ~@51]/8", // Db F5 Db F5 Db F5 Db F5 …
})).s("gm_acoustic_guitar_nylon").gain(0.62)

// chords · acoustic guitar nylon · "PRG.CHANGE" · soft notes · F Dsus2 Cmaj7
const acoustic_guitar_nylon_2 = note("<~@90 [~@15 d3] [~ [f2,g2,a2] [d2,e2] ~@13, [b2,c3] ~@7] ~@37>")
  .s("gm_acoustic_guitar_nylon").gain(0.39)

// chords · string ensemble 2 · "PRG.CHANGE"
const string_ensemble_2 = note(`<
  ~@10 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E@2 F@2 G H@3 ~@17 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E@2 F@2 G H@3 ~@54
>`.pickRestart({
  A: "[bb3,db4,f4,ab4,c5]/2", B: "[bb3,eb4,gb4,bb4,db5]/2", C: "[[a4,c5] bb4, [bb3,d4,f4]]/2",
  D: "[[gb3,bb3,f4,ab4] [bb3,eb4,ab4]@3, db4, db5@3 ~@5]/2", E: "[g3,bb3,eb4,bb4]/2", F: "[gb3,bb3,db4,bb4]/2",
  G: "[ab3,c4,eb4,bb4]", H: "[db4 ~ ab4, [ab3,eb4], bb4@2 ~, ~ c4@2]/3",
})).s("gm_string_ensemble_2").gain(0.47)

// drums · kick
const kick = s("bd").struct("<[x!2]!8 [x!4]!2 [x!2]!81 [x ~ x!2] [x!4]!3 [x!2]!32 [x ~@2 x ~@12] ~>").gain(0.66)

// drums · snare
const snare = s("sd").struct("<A B@7 ~@2 B@24 A B@40 A B@15 C ~@3 A B@7 A B@15 A B@7 ~@2>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2",
})).gain(0.52)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@8 C D@24 A B@7 E F G H I B@3 J D@24 A B@7 E F G H I B@3 K B@3 A B@7 A B@7 E F G H I B@3 A B@7 ~@2
>`.pickRestart({
  A: "~@6 x!10", B: "x!16", C: "x!2 ~@4 x ~@2 x!7", D: "x!2 ~@2 x!6 ~@2 x!4", E: "~@2 x!12 ~@2", F: "x!10 ~@2 x!4",
  G: "x!3 ~ x!12", H: "x!6 ~@2 x ~@7", I: "~@15 x", J: "x!4 ~@2 x!4 ~@2 x!4", K: "x!4 ~@2 x!10",
})).gain(0.59)

// drums · mid tom
const mid_tom = s("mt").struct("<~@33 A ~@14 A B C ~@23 A ~@14 A B C ~@25 A B ~@10>".pickRestart({
  A: "~@9 x ~ x!2 ~@3", B: "~@5 x ~ x ~ x ~ x ~ x ~ x", C: "~ x ~ x!2 ~@11",
})).gain(0.66)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@48 [~@5 x ~@2] ~@40 [~@5 x ~@2] ~@27 [~@5 x ~@2] ~@11>").gain(0.44)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A B@24 ~@8 C D E F G ~@3 D B@24 ~@8 C D E F G ~@23 C D E F G ~@13>".pickRestart({
  A: "~@2 x ~ x ~@2 x ~@8", B: "~ x ~@3 x ~@2", C: "~@7 x", D: "~@5 x ~@2", E: "~@3 x ~@12",
  F: "~@6 x ~@2 x ~ x!2 ~ x!2", G: "~ x ~ x!2 ~ x!2 ~ x!2 ~ x ~ x ~",
})).gain(0.44)

// drums · high tom
const high_tom = s("ht").struct("<A ~@32 B A ~@13 C ~@25 B A ~@13 C ~@5 A ~@7 A ~@13 C ~ A ~@9>".pickRestart({
  A: "~ x ~@2", B: "~@5 x ~ x!2 ~@7", C: "~ x ~ x!2 ~@11",
})).gain(0.59)

// drums · crash
const crash = s("cr").struct(`<
  A ~@7 B C ~@24 A ~@7 D ~@7 E ~@24 A ~@7 D ~@7 E ~@3 A ~@7 A ~@7 D ~@7 A ~@7 A ~
>`.pickRestart({
  A: "x ~@2 x ~@12", B: "~ x ~@3 x ~ x", C: "~@5 x!2 ~", D: "x", E: "~ x ~@2",
})).gain(0.44)

// drums · ride
const ride = s("rd").struct("<~@8 [~ x!6 ~] ~@120>").gain(0.52)

stack(
  bass, electric_guitar_jazz, lead_2_sawtooth, brass_section, acoustic_guitar_steel, acoustic_guitar_nylon,
  acoustic_guitar_nylon_2, string_ensemble_2, kick, snare, hihat, mid_tom, mid_tom_soft, open_hat, high_tom, crash, ride
)

More by Tears for Fears