Strudelify
These Dreams cover art

1985 · Heart

These Dreams

Heart

KeyB majorTempo78 bpm
0:00/0:00
// These Dreams — Heart
// 78 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 5 "C5-P89-String/ Bell" named as a string part, played on string ensemble 1 (its pad new age patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(78/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.

// chords · pad poly · "C1-P91-Analog Pad"
const pad_poly = note(`<
  ~ A B C D E F G H I@3 A J D K L F M@3 A J D N O F P Q R S T U V S W@3 X@2 Y@6 Z AA Z AB Z AA Z AC AD AE AF Z AG AH@3 A
  J D AI Z AJ AK Q R AL AM Q R AL AM Q R AL AN Q R AL AO@2
>`.pickRestart({
  A: "[g#3,c#4,d#4,f#4]", B: "[b3,c#4,e4,f#4]", C: "[a#3,c#4,d#4,f#4]", D: "~@3 b4@5, [b3,e4,f#4]",
  E: "[c#4,d#4,g#4,c#5]", F: "[c#4,e4,g#4,b4]", G: "[d#4,f#4,a#4,c#5]", H: "[b3,e4,g#4,b4]",
  I: "[~@3 a#3@16 ~ [a#3,d#4,f#4]@4, [f4,a#4]@13 ~@3, ~@3 d#4@35 ~@10]/3", J: "[b3,c#4,e4,f#4] [a#3,c#4,d#4,f#4]",
  K: "[g#3,a#3,c#4,f#4]", L: "[b3,e4,g#4,b4] [b3,d#4,f#4,b4]",
  M: "[d#4@2 ~ [a#3,d#4,a#4]@7 [a#3,d#4,f#4]@2, ~ f4@4 ~]/3", N: "a#4@3 b4@3 c#5@2, [d#4,f#4]",
  O: "~ b4 [b3,d#4,f#4,b4]@2, [b3,e4,g#4] ~", P: "[g#3,b3,d#4,g#4]@2 [g#3,b3,d#4,g#4] [f#4,b4,d#5]",
  Q: "[f#4,a#4,c#5] [b3,e4,g#4]", R: "[b3,d#4,f#4]@2 [b3,e4,g#4] [b3,d#4,f#4]", S: "[c#4,f#4,a#4] [b3,e4,g#4,b4]",
  T: "[b3,d#4,f#4,b4]@2 [b3,e4,g#4,b4] [f#4,b4,d#5]", U: "[f#4,a#4,c#5] [b3,e4,g#4,b4]",
  V: "[b3,d#4,f#4,b4]@2 [b3,e4,g#4,b4] [b3,d#4,f#4,b4]", W: "[[b3,d#4,f#4,b4]@8 [a#3,d#4,f4,a#4]@39 ~]/3",
  X: "[[a#3,d#4,f#4] [g#3,c#4,d#4,f#4]@2 [b3,c#4,e4,f#4]]/2", // D#m G#sus4 Bsus4
  Y: "[[a#3,c#4,d#4,f#4]@4 ~@3 b4@5 [g#3,a#3,c#4,f#4]@8 [e4,g#4]@4 [d#4,f#4]@4 [c#4,e4,g#4]@8 [g#3,b3,d#4,g#4]@6 [f#4,b4,d#5]@2 [f#4,a#4,c#5]@4, ~ [b3,e4,f#4]@2 ~@2 b3@2 ~@5, ~@40 b4 ~@55]/6", // D#m7 F# E D#m C#m G#m B F# …
  Z: "[b3,e4,g#4] [b3,d#4,f#4]", AA: "[b3,e4,g#4] [b3,d#4,f#4] [c#4,f#4,a#4]@2",
  AB: "[b3,e4,g#4]@4 [f#4,b4,d#5]@4 [f#4,a#4,c#5]@7 ~", AC: "e4@12 ~@3 b4",
  AD: "[b3,e4,g#4,b4] ~ [b3,e4,g#4,b4]!2 ~ [b3,e4,g#4,b4]@4 ~@7", AE: "[b3,e4,g#4,b4] [b3,d#4,f#4]",
  AF: "[a#3,c#4,f#4]", AG: "[b3,e4,g#4,b4] ~ [b3,e4,g#4,b4]!2 ~ [b3,e4,g#4,b4]@5 ~@6",
  AH: "[[b3,e4,g#4,b4]@3 [b3,d#4,f#4,b4]@3 [b3,e4,g#4,b4]@4 [a#3,d#4,f4,a#4]@30 [a#3,d#4,f#4]@8]/3", // E B E A#sus4 D#m
  AI: "[d#4,f#4,a#4]@3 [d#4,f#4,b4]@3 [d#4,f#4,c#5]@2", AJ: "[c#4,e4,g#4]", AK: "[g#3,b3,d#4,g#4]@3 [f#4,b4,d#5]",
  AL: "[c#4,f#4,a#4] [b3,e4,g#4]", AM: "[b3,d#4,f#4]@2 [b3,e4,g#4] [f#4,b4,d#5]",
  AN: "[b3,d#4,f#4]@2 [e4,g#4] [f#4,b4,d#5], ~@4 b3 ~@3", // B E B
  AO: "[[b3,d#4,f#4]@8 [b3,e4,f#4,b4]@16 [b3,e4,g#4,b4] ~ [b3,e4,g#4] [b3,e4,g#4]@2 [b3,d#4,f#4]@2 ~, ~@26 b4@5 ~]/2", // B Bsus4 E B
})).s("gm_pad_poly").gain(0.23).pan(0.6)

// other · marimba · "C3-P13-Marimba"
const marimba = note(`<
  ~@28 A B A C A B A D E ~@8 F G H G I G H G J ~@15 K L K M K L K M K L K M K L K N O
>`.pickRestart({
  A: "[a#4,a#5]!2 [f#4,f#5]!2 [c#4,c#5]!2 [f#4,f#5]!2 [g#4,g#5]!2 [e4,e5]!2 [b3,b4]!2 [e4,e5]!2", // A# F# C# F# G# E B E
  B: "[f#4,f#5]!2 [d#4,d#5]!2 [b3,b4]!2 [d#4,d#5]!2 [g#4,g#5] [e4,e5] [b3,b4] [g#4,g#5] [f#4,f#5] [c#4,c#5] [f#4,f#5] [a#4,a#5]", // F# D# B D# G# E B G# …
  C: "[f#4,f#5]!2 [d#4,d#5]!2 [b3,b4]!2 [d#4,d#5]!2 [g#4,g#5] [e4,e5] [b3,b4] [g#4,g#5] [f#4,f#5] [d#4,d#5] [b3,b4] [f#4,f#5]", // F# D# B D# G# E B G# …
  D: "[f#4,f#5]!2 [d#4,d#5]!2 [b3,b4]!2 [d#4,d#5]!2 [b4,b5]!2 [f#4,f#5]!2 [e4,e5]!2 [b3,b4]!2", // F# D# B D# B F# E B
  E: "[b4,b5]!2 [f#4,f#5]!2 [e4,e5]!2 [b3,b4]!2 ~@8", F: "~@8 [a#4,a#5]!2 [f#4,f#5]!2 [c#4,c#5]!2 [f#4,f#5]!2",
  G: "[g#4,g#5]!2 [e4,e5]!2 [b3,b4]!2 [e4,e5]!2 [f#4,f#5]!2 [d#4,d#5]!2 [b3,b4]!2 [d#4,d#5]!2", // G# E B E F# D# B D#
  H: "[g#4,g#5] [e4,e5] [b3,b4] [g#4,g#5] [f#4,f#5] [c#4,c#5] [f#4,f#5] [a#4,a#5]!3 [f#4,f#5]!2 [c#4,c#5]!2 [f#4,f#5]!2", // G# E B G# F# C# F# A# …
  I: "[g#4,g#5] [e4,e5] [b3,b4] [g#4,g#5] [f#4,f#5] [d#4,d#5] [b3,b4] [f#4,f#5] [a#4,a#5]!2 [f#4,f#5]!2 [c#4,c#5]!2 [f#4,f#5]!2", // G# E B G# F# D# B F# …
  J: "[b4,b5]!2 [f#4,f#5]!2 [e4,e5]!2 [b3,b4]!2 [b4,b5]!2 [f#4,f#5]!2 [e4,e5]!2 [b3,b4]!2", // B F# E B F# E B
  K: "a#4!2 f#4!2 c#4!2 f#4!2 g#4!2 e4!2 b3!2 e4!2", L: "f#4!2 d#4!2 b3!2 d#4!2 g#4 e4 b3 g#4 f#4 c#4 f#4 a#4",
  M: "f#4!2 d#4!2 b3!2 d#4!2 g#4 e4 b3 g#4 f#4 d#4 b3 f#4", N: "f#4!2 d#4!2 b3!2 d#4!2 b4!2 f#4!2 e4!2 b3!2",
  O: "b4!2 f#4!2 e4!2 b3!2 ~@8",
})).s("gm_marimba").gain(0.19).pan(0.4)

// bass · electric bass finger · "C4-P34-Bass"
const bass = note(`<
  ~ A B C D A B C E@2 A F A F G A H I J A F A F G A H B K L M L N L M L O@3 P@2 Q@3 R@3 S T S U S T S D V W X Y V Z A F
  A F G A H B K L M L AA L M L AA L M L N L M L AB@2
>`.pickRestart({
  A: "g#1", B: "c#2", C: "d#2", D: "e1", E: "e1/2", F: "c#2 d#2", G: "e1@14 f#1 g1", H: "e2 d#2", I: "c#2@15 ~",
  J: "e2@2 f#2 b1", K: "g#1@3 d#2", L: "a#1 g#1", M: "f#1@2 c#2 d#2", N: "f#1@2 e2 d#2", O: "[f#1 e1@2 g#1@2 c#2]/3",
  P: "[d#2 g#1@2 c#2]/2", Q: "[d#2@8 e1@14 f#1 g1 g#1@16 e2@8]/3", R: "[d#2@2 c#2@4 g#1@3 d#2 a#1@2]/3", S: "g#1 f#1",
  T: "c#2 d#2 a#1@2", U: "e2 d#2 a#1@2", V: "f#1 ~ f#1!2 ~ f#1@11", W: "b1@7 ~ b1@8", X: "a#1@7 ~ a#1@8", Y: "g#1 b1",
  Z: "e2@3 d#2@3 c#2@4 b1@6", AA: "f#1@7 ~ e2@4 d#2@4", AB: "[f#1@8 e1@16 e1 ~ e1!2 ~ b1@2 ~]/2",
})).s("gm_electric_bass_finger").gain(0.31)

// other · string ensemble 1 · "C5-P89-String/ Bell"
const string_ensemble_1 = note("<~@5 A@3 B@2 ~@76>".pickRestart({
  A: "f#5@3 c#6@2 b5@3", B: "[e5@3 f#5@3 b4@18 ~@8]/2",
})).s("gm_string_ensemble_1").gain(0.27).pan(0.9)

// other · string ensemble 1 · "C6-P49-Strings"
const string_ensemble_1_2 = note("<~ A B@2 C D@3 E@3 ~@7 F@2 ~@6 G@2 ~@16 H ~@14 I@2 ~@6 J@2 ~@17>".pickRestart({
  A: "f#4@3 c#5@5", B: "f#4@3 c#5@3 b4@2", C: "e4@15 ~", D: "f#4@3 c#5@2 b4@3", E: "[e5@3 f#5@2 ~ a#4@29 ~@13]/3",
  F: "[d#5@8 f5@4 a#4@7 ~@13]/2", G: "[~@12 [a#3,a#4]@13 ~@7]/2", H: "~ [a#3,a#4]@3", I: "[~@12 [a#3,a#4]@11 ~@9]/2",
  J: "[~@6 [a#3,a#4]@7 ~@3]/2", // A#
})).s("gm_string_ensemble_1").gain(0.18).pan(0.3)

// chords · lead 2 sawtooth · "C7-P82-Bright Analog"
const lead_2_sawtooth = note("<~@54 A B C@2 A ~@27>".pickRestart({
  A: "[e4,g#4,b4,e5] ~ [e4,g#4,b4,e5]!2 ~ [e4,g#4,b4,e5]@3 ~@8", B: "[e4,g#4] [d#4,f#4,d#5], b4@15 ~, e5@3 ~@5",
  C: "[c#5@11 d#5@3 f5 ~ [e4,g#4,b4]@8 [d#4,f#4,b4,d#5]@8, c#4 ~, [f#4,a#4]@14 e5@9 ~@9]/2", // E B F#
})).s("gm_lead_2_sawtooth").gain(0.22)

// drums · kick
const kick = s("bd").struct("<~@28 A@8 ~@9 B A@7 C ~ A@3 ~ D C ~@8 A@16 ~>".pickRestart({
  A: "x!2", B: "~ x", C: "x", D: "x ~@4 x ~@2",
})).gain(0.37)

// drums · rim
const rim = s("rim").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 B ~ B ~ B ~ B ~ B ~@14 A ~ A ~ A ~ A ~ A ~@17
>`.pickRestart({
  A: "~@11 x ~@4", B: "~@3 x ~@12",
})).gain(0.33)

// drums · snare
const snare = s("sd").struct("<~@27 A B@7 C ~@9 D B@7 ~ E B@3 E C ~@8 A B@15 C F>".pickRestart({
  A: "~@12 x!3 ~", B: "~ x ~ x", C: "~ x ~@2", D: "~@4 x!3 ~@5 x ~@3", E: "x ~ x!2 ~ x ~@10", F: "~@8 x ~ x!2 ~ x ~@2",
})).gain(0.37)

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

// drums · low tom
const low_tom = s("lt").struct("<~@85 [~@15 x]>").gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct("<~@59 [~@7 x] ~@25 [~@15 x]>").gain(0.16)

// drums · crash
const crash = s("cr").struct(`<
  ~@28 A ~@3 A ~@2 B ~@9 B ~@3 B ~@3 A ~ A ~@3 C A ~@8 A ~@3 A ~@3 A ~ A ~ A ~@2 B ~
>`.pickRestart({
  A: "x", B: "~ x", C: "x ~@4 x ~@2",
})).gain(0.29)

// drums · high tom
const high_tom = s("ht").struct("<~@59 [~@13 x ~@2] ~@25 [~@15 x]>").gain(0.16)

// drums · ride
const ride = s("rd").struct("<~@55 [~@2 x!6] [x!8]!2 ~ [~@2 x!3 ~@3] ~@26>").gain(0.29)

// drums · congas
const congas = s("conga:13").struct("<~@10 A@3 B A@4 B A@16 B C D@16 ~@2 A@3 B ~ A@24 B ~>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@6 x!2", B: "~@2 x!2 ~@2 x!2 ~@8", C: "~@10 x!2 ~@2 x!2", D: "~@6 x!2 ~@2 x!2 ~@2 x!2",
})).gain(0.92)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!16]!84 [x!15 ~]>").gain(0.62)

stack(
  pad_poly, marimba, bass, string_ensemble_1, string_ensemble_1_2, lead_2_sawtooth, kick, rim, snare, hihat, low_tom,
  mid_tom, crash, high_tom, ride, congas, cabasa
)

More by Heart