Strudelify

Sweet Dreams

Patsy Cline

KeyA♭ majorTempo84 bpm
0:00/0:00
// Sweet Dreams — Patsy Cline
// 84 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: pitch bends are ignored
// note: Full arrangement: all 54 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(84/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 · fretless bass
const bass = note(`<
  ~@2 A@2 B C D E F C G H I E J K L M N E F C O E F C G H I E J K L E N E F C O P F C G H I E J K Q@3 ~@3
>`.pickRestart({
  A: "[~ ab2@11]/2", B: "bb2", C: "eb2 bb2", D: "eb2!2", E: "ab2 eb2", F: "bb2!2", G: "eb2!2 f2 g2", H: "ab2!2",
  I: "db2!2", J: "f2!2", K: "ab2 c3", L: "db3 eb3", M: "ab2 db2", N: "ab2@6 eb2@5 f2", O: "eb2@5 eb2 f2@3 g2@3",
  P: "~ ab2@11 eb2@12", Q: "[db3@17 eb3@46 ~@9]/3",
})).s("gm_fretless_bass").gain(0.54)

// chords · piano
const piano = note(`<
  ~@5 A@2 B C D@2 E F G H I J K L M N O P Q R O S G T U V G W X Y Q Z AA@3 AB AC AD AE AF AG AH AI AJ@2 ~@4
>`.pickRestart({
  A: "[~@10 [bb5,eb6]@2 g5@6 [bb5,eb6]@9 ~ g5@2 [bb5,f6]@3 ~ g5@2 [bb5,eb6]@3 ~ g5@2 [bb5,db6]@3 ~ g5@2]/2", // Eb5 Bb5 Eb5 Bbm
  B: "[ab5,c6]@3 ~@7 [ab5,c6]@2 eb5@6 [ab5,c6]@5 ~", C: "~@5 [bb5,d6] f5@3 [bb5,d6]@3",
  D: "[~@10 [bb5,eb6]@2 g5@6 [bb5,eb6]@3 ~ g5@5 ~ g5@2 [bb5,f6]@3 ~ g5@2 [bb5,eb6]@3 ~ g5@2 [bb5,db6]@3 ~ g5@2]/2", // Eb5 Bb5 Eb5 Bbm
  E: "[ab5,c6]@6 ~@4 [ab5,c6]@2 eb5@6 [ab5,c6]@5 ~", F: "~@10 [ab5,db6]@2 f5@6 [ab5,db6]@5 ~",
  G: "~@10 [ab5,c6]@2 eb5@6 [ab5,c6]@3 ~ eb5@2", H: "~@4 [ab5,c6]@6 f5@2 [ab5,c6]@3 ~ f5@2 [ab5,c6]@3 ~ f5@2",
  I: "~@5 [ab5,c6] eb5@3 [ab5,c6]@2 eb5", J: "~@4 [ab5,db6]@6 f5@2 [bb5,eb6]@3 ~ g5@2 [bb5,db6]@3 ~ g5@2",
  K: "~@4 [ab5,c6]@6 eb5@2 [ab5,db6]@3 ~ f5@6 [ab5,db6]@2", // Ab Db5
  L: "~@4 [ab5,c6]@6 eb5@2 [g5,bb5]@3 ~ eb5@2 [g5,bb5]@3 ~ eb5@2", M: "~@10 [ab5,c6]@2 eb5@6 [ab5,c6]@3 ~@3",
  N: "~@5 [bb5,d6] f5@3 [bb5,d6]@2 f5", O: "~@2 [bb5,eb6]@3 g5@3 [bb5,eb6]@3 g5",
  P: "~@4 g5@2 [bb5,f6]@3 ~ g5@2 [bb5,eb6]@3 ~ g5@2 [bb5,db6]@4 g5@2", Q: "~@10 [ab5,c6]@2 eb5@6 [ab5,c6]@5 ~",
  R: "~@10 [bb5,d6]@2 f5@6 [bb5,d6]@3 ~ f5@2", S: "~@4 g5@2 [bb5,f6]@3 ~ g5@2 [bb5,eb6]@3 ~ g5@2 [bb5,db6]@3 ~ g5@2",
  T: "~@10 [ab5,db6]@2 f5@6 [ab5,db6]@3 ~ f5@2", U: "~@2 [ab5,c6]@3 eb5 [ab5,c6]@2 eb5@3 [ab5,c6]",
  V: "~@10 [f5,ab5]@2 c5@6 [f5,ab5]@3 ~ c5@2", W: "~@4 [ab5,db6]@6 f5@2 [g5,bb5]@3 ~ eb5@6 [g5,bb5]@2",
  X: "~@4 [ab5,c6]@5 ~ eb5@2 [g5,bb5]@3 ~ eb5@6 [g5,bb5]@2", Y: "~@4 [ab5,c6]@6 eb5@2 [g5,bb5]@3 ~ eb5@6 [g5,bb5]@2",
  Z: "~@10 [bb5,d6]@2 f5@6 [bb5,d6]@5 ~", // Bb
  AA: "[~@10 [bb5,eb6]@2 g5@6 [bb5,eb6]@4 g5@5 ~ g5@2 [bb5,f6]@4 g5@2 [bb5,eb6]@3 ~ g5@2 [bb5,db6]@3 ~ g5@5 ~@7 [ab5,c6]@2 eb5@6 [ab5,c6]@3 ~ eb5@2]/3", // Eb5 Bb5 Eb5 Bbm Ab
  AB: "~@2 [bb5,d6]@3 f5 [bb5,d6]@2 f5@3 [bb5,d6]", AC: "~@4 [bb5,eb6]@6 g5@2 [bb5,eb6]@4 g5@5 ~ g5@2",
  AD: "~@4 g5@2 [bb5,f6]@4 g5@2 [bb5,eb6]@3 ~ g5@2 [bb5,db6]@3 ~ g5@2", AE: "[ab5,c6]@5 eb5@3 [ab5,c6]@3 eb5",
  AF: "~@4 f5@2 [ab5,db6]@3 ~ f5@6 [ab5,db6]@6 f5@2", // Db5
  AG: "~@4 [ab5,c6]@6 eb5@2 [ab5,c6]@3 ~ eb5@2 [ab5,c6]@3 ~ [g5,bb5]@2", AH: "~@2 [f5,ab5]@3 c5@3 [f5,ab5]@3 c5",
  AI: "~@2 [ab5,c6]@3 eb5@3 ab5@3 c5", AJ: "[[f3,ab3,db4]@17 [g3,bb3,eb4]@17 ~@14]/2",
})).s("gm_piano").gain(0.64)

// chords · vibraphone
const vibraphone = note("<A@2 ~@52>".pickRestart({
  A: "[~@22 ab4@5 c5@5 e5@5 ab4@5 ~@6, ~@8 e4@13 ~@3]/2",
})).s("gm_vibraphone").gain(0.45)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@5 A B C D E@2 F G F H I J K L M N E O P N Q R S T U V W X M Y Z N AA E AB AC AD AE AF AG AH AG AH AI ~@5
>`.pickRestart({
  A: "eb2@7 ~@3 eb2@2 bb2@6 g2@6", B: "eb2@3 ~@2 eb2 bb2@3 g2@3", C: "ab2@3 ~@2 ab2 c3@3 eb3@3",
  D: "bb2@8 ~@2 bb2@2 d3@6 bb2@3 ~@3", E: "eb2@7 ~@3 eb2@2 g2@6 bb2@6", F: "ab2@7 ~@3 ab2@2 c3@6 ab2@6",
  G: "f2@4 ~ f2 ab2@3 db3@3", H: "f2@3 ~@2 f2 ab2@3 c3@3", I: "ab2@7 ~@3 ab2@2 eb2@6 ab2@6",
  J: "db3@7 ~@3 db3@2 eb3@6 bb2@6", K: "ab2@4 ~ ab2 db3@4 ~ db3", L: "ab2@8 ~@2 ab2@2 eb2@4 ~@2 eb2@5 ~",
  M: "ab2@4 ~ ab2 c3@3 eb3@3", N: "bb2@4 ~ bb2 d3@3 bb2@3", O: "db3@8 ~@2 bb2@2 g2@5 ~ eb2@6",
  P: "ab2@7 ~@3 ab2@2 c3@5 ~ ab2@6", Q: "eb2@7 ~@3 eb2@2 bb2@8 ~@2 bb2@2", R: "eb2@7 ~@3 eb2@2 f2@6 g2@5 ~",
  S: "ab2@4 ~ ab2 c3@4 ~ ab2", T: "db3@7 ~@3 db3@2 ab2@6 f2@6", U: "ab2@8 ~@2 ab2@2 c3@7 ~@3 c3@2",
  V: "f2@7 ~@3 f2@2 ab2@7 ~@3 ab2@2", W: "ab2@4 ~ ab2 c3@5 ab2", X: "db3@4 ~ db3 eb3@4 ~ eb3",
  Y: "ab2@7 ~@3 ab2@2 c3@5 ~ eb3@6", Z: "ab2@7 ~@3 ab2@2 c3@9 ~ c3@2", AA: "eb2@4 ~ eb2 g2@3 bb2@3",
  AB: "ab2@4 ~ ab2 c3@5 ~", AC: "f2@4 ~ f2 bb2@3 f2@3", AD: "eb2@4 ~ eb2 bb2@4 ~ bb2", AE: "eb2@7 ~@3 eb2@2 f2@6 g2@6",
  AF: "ab2@8 ~@2 ab2@2 c3@9 ~ ab2@2", AG: "f2@8 ~@2 f2@2 ab2@9 ~ f2@2", AH: "ab2@4 ~ ab2 c3@3 ab2@3", AI: "db3 ~@2",
})).s("gm_electric_guitar_muted").gain(0.45)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@2 A@2 B C@2 D E C@2 F@2 D G D H I@2 D E J@2 D E C@2 D K D G D H L M N O@4 P Q@2 R S T@2 D U@2 ~ V@3
>`.pickRestart({
  A: "[~ [ab2,eb3,ab3,c4]@11]/2", B: "[f3,bb3,d4]", C: "[eb4 db4, [eb3,g3,bb3]]/2", D: "[ab3,c4,eb4]", E: "[bb3,d4,f4]",
  F: "[[c4,eb4] [db4,f4], ab3]/2", G: "[f3,ab3,c4,f4]", H: "[ab3,db4,f4] [g3,bb3,eb4]",
  I: "[[c4,eb4] [db4,f4] c4 [g3,bb3], ab3@3 ~, ~ eb4]/2", J: "[eb4 db4, [g3,bb3]]/2", K: "[ab3,db4,f4]",
  L: "[ab3,c4,eb4] [eb3,g3,bb3]", M: "[ab3,c4] [eb3,g3,bb3]", N: "[ab3,c4,ab4]",
  O: "[[d4,f4,bb4] [g3,g4]@2 [ab3,c4,ab4,c5], bb3@3 ~, ~ [eb3,eb4]@3]/4", P: "[f3,bb3,d4,f4,bb4]",
  Q: "[eb3,g3,bb3,eb4,g4,bb4]/2", R: "[eb3,ab3,c4,eb4,ab4,c5]", S: "[db3,f3,ab3,db4,f4,ab4]",
  T: "[[ab3,c4,eb4] [f3,ab3,f4], [ab4,c5]]/2", U: "[[db3,f3]@17 [eb3,g3,bb3]@17 ~@14]/2",
  V: "[~@5 [ab2,ab3,c4]@8 ~@5]/3", // Ab
})).s("gm_string_ensemble_2").gain(0.3).pan(0.4)

// other · string ensemble 2
const string_ensemble_2_2 = note("<~@19 A B@3 C D@3 E ~@5 F G H I J@2 K I L@2 ~@11>".pickRestart({
  A: "~@3 eb6, ~ c6", B: "[~ [g5,eb6]@2, d6 ~@2, ~ bb5@5]/3", C: "~@2 c6 eb6",
  D: "[~@4 [g5,eb6]@5 g3 ab3 bb3, d6 ~@2, ~@2 bb5@7 ~@3]/3", E: "c4 ~", F: "~@4 ab4 a4 bb4 b4",
  G: "c5 db5 d5 eb5 e5 f5 gb5 g5", H: "~ eb5 c5 eb5, ab5@3 ~", I: "bb5@3 ab5",
  J: "[g5@34 ~@2 c5 db5 ~ d5 eb5 ~ e5 f5 ~ gb5 g5 ~]/2", K: "~@7 eb5@4 ~ c5@6 eb5@6, ab5", L: "g5/2",
})).s("gm_string_ensemble_2").gain(0.4).pan(0.6)

// chords · string ensemble 1 · Ab G Gb F E Eb D Db …
const string_ensemble_1 = note(`<
  [~@16 c6 b5 bb5 a5 ab5 g5 gb5 f5]
  [~ gb5 f5 e5 eb5 d5 db5 c5 b4 [ab4,c5] [g4,b4] [gb4,bb4] ~ [f4,a4] [e4,ab4] [eb4,g4] [d4,gb4] [db4,f4] [d4,gb4] ~ [db4,f4] [c4,e4] [b3,eb4] [c4,e4]]
  [~ [b2,b3,eb4] ~@22]
  ~@47
  [~@15 ab5 g5 gb5 f5 gb5 f5 e5 eb5 d5]
  [db5 d5 db5 c5 b4 c5 b4 bb4 a4 ab4 g4 ab4 g4 gb4 f4 [c4,e4]@2 ~@2 [a3,db4]@2 ~@3, ~@17 [b3,eb4]@2 ~@5, ~@9 [bb3,d4] ~@2]
  ~@2
>`).s("gm_string_ensemble_1").gain(0.57)

// chords · string ensemble 1 · soft notes · Bb A
const string_ensemble_1_soft = note("<~@2 [~@2 [bb2,bb3,d4] [a2,a3,db4] ~@20] ~@51>")
  .s("gm_string_ensemble_1").gain(0.36)

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

// drums · rim
const rim = s("rim").struct("<~@5 [~ x ~ x]!43 ~@6>").gain(0.36)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@5 [x ~ x!2 ~ x!2 ~ x!4]!43 x ~@5>").gain(0.36)

stack(
  bass, piano, vibraphone, electric_guitar_muted, string_ensemble_2, string_ensemble_2_2, string_ensemble_1,
  string_ensemble_1_soft, kick, rim, pedal_hat
)

More by Patsy Cline