Strudelify

A Thousand Hours

The Cure

KeyF♯ minorTempo91 bpm
0:00/0:00
// A Thousand Hours — The Cure
// 91 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 9 "Echo String" string ensemble 1 (copy of ch 8 "Echo String" string ensemble 1); ch 12 "Echo Voice" flute (copy of ch 11 "Echo Voice" flute)
// note: Full arrangement: all 76 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(91/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 · "Electric Piano"
const piano = note(`<
  ~ A B C@2 D@5 E C@2 F@4 G ~@7 H I@3 H J@4 ~@7 H I@3 H K@4 L M N O L M N O L M N O L M N O L M N O L M P@2 ~@2
>`.pickRestart({
  A: "f#4@10 ~@2 f#4 g4 f#4@2", B: "e4@5 ~ f#4@3 d4@6 c#4@6 d4@3", C: "[c#4@4 a3 ~ a3@4 g3@2 a3@20]/2",
  D: "[~@12 f#4@3 g4@3 f#4@6 g4@6 a4@12 d4@18 f#4@3 g4@3 f#4@6 g4@6 a4@12 b4@18 a4@2 ~@4 a4@79 ~@35 f#4@3 g4@3 f#4@6]/5",
  E: "e4@6 f#4@3 d4@6 c#4@5 ~ d4@3",
  F: "[~@12 f#4@3 g4@3 f#4@6 g4@6 a4@12 d4@18 f#4@3 g4@3 f#4@6 g4@6 a4@11 ~ b4@18 a4@3 ~@3 a4@76 ~@2]/4",
  G: "f#4@3 ~@5", H: "c#5 b4 a4 g4",
  I: "[f#4@12 d4@3 ~@3 d4@42 f#4@2 ~@4 f#4@2 ~@4 f#4@6 g4@12 a4@18 d4@3 ~@3 d4@3 ~@3 d4@5 ~ e4@18]/3",
  J: "[f#4@12 d4@3 ~@3 d4@39 ~@3 f#4@2 ~@4 f#4 ~@5 f#4@6 g4@12 a4@18 d4@3 ~@3 d4@3 ~@3 d4@5 ~ e4@31 ~@35]/4",
  K: "[f#4@12 d4@3 ~@3 d4@39 ~@3 f#4@2 ~@4 f#4@2 ~@4 f#4@6 g4@12 a4@18 d4@3 ~@3 d4@3 ~@3 d4@5 ~ e4@25 ~@12 f#4@2 ~@4 f#4@5 ~ e4@6 f#4@2 ~@4 f#4@5, ~@157 e4@13 ~@22]/4",
  L: "e4@6 f#4@11 ~ e4@6 f#4@2 ~@4 f#4@6 a4@6 b4@2 ~@4", M: "b4@12 e4@6 f#4@2 ~@4 f#4@5 ~ e4@6 f#4@2 ~@4 f#4@2 ~@4",
  N: "f#4@5 ~ b3@42", O: "~@13 e4@6 f#4@2 ~@4 f#4@5 ~ e4@6 f#4@2 ~@4 f#4@5", P: "[f#4@5 ~ b3@58 ~@32]/2",
})).s("gm_piano").gain(0.42)

// other · string ensemble 1 · "String"
const string_ensemble_1 = note(`<
  ~@9 A@3 B@4 C@2 D E@2 F@3 G H I J K L M N O@8 P Q R@2 S M T U V@2 W X@2 Y@4 Z AA@3 AB AC@5 AD@5 AE@4
>`.pickRestart({
  A: "[~@18 f#5@2 ~@4 f#5@5 e5@12 ~ f#5@30 e5@6 f#5@12 c#5@53 ~]/3",
  B: "[a4@17 g4@19 f#4@29 ~ f#5@2 ~@4 f#5@6 e5@11 ~ f#5@30 b5@6 a5@6 b5@6 a5@54]/4",
  C: "[f#5@18 e5@18 d5@32 ~@16 f#5@3 g5@3 f#5@6]/2", D: "e5@10 f#5@7 ~ d5@12 c#5@10 d5@8",
  E: "[c#5@12 a4@3 ~@3 a4@11 ~ g4@6 a4@60]/2",
  F: "[~@13 f#5@3 g5@3 f#5@5 g5@6 a5@10 d5@18 ~@2 f#5@3 g5@3 f#5@5 ~ g5@6 a5@10 b5@18 ~@2 a5@3 ~@3 a5@29 ~]/3",
  G: "f#5@8 e5@9 d5@7", H: "c#5@6 d5@4 ~@8 c#5@6 d5@11 ~ f#5@12", I: "c#5@6 d5@5 ~@7 c#5@6 d5@11 ~ f#5@12",
  J: "c#5@6 d5@5 ~@7 c#5@6 d5@11 ~ c#5@11 ~", K: "a4", L: "c#5@5 ~ d5@6 ~@6 c#5@6 d5@11 ~ f#5@12",
  M: "c#5@6 d5@6 ~@6 c#5@6 d5@11 ~ f#5@12", N: "c#5@6 d5@6 ~@6 c#5@6 d5@11 ~ c#5@12",
  O: "[a4@18 g4@18 f#4@27 ~@2 f#5@2 ~@5 f#5@5 e5@12 f#5@31 e5@6 f#5@11 c#5@54 a4@18 g4@18 f#4@28 ~@3 f#5@2 ~@4 f#5@5 ~ e5@12 f#5@18 b5@3 ~@9 b5@5 ~ a5@5 b5@6 a5@55]/8",
  P: "f#5@3 e5@3 d5@2", Q: "c#5@6 d5@6 ~@6 c#5@6 d5@12 f#5@11 ~",
  R: "[c#5@6 d5@6 ~@6 c#5@6 d5@12 f#5@11 c#5@6 ~ d5@6 ~@6 c#5@6 d5@12 c#5@11 ~]/2", S: "a4@17 g4@18 ~ f#4@12",
  T: "c#5 d5 ~ c#5 d5@2 f#5@2", U: "c#5 d5 ~ c#5 d5@2 c#5@2", V: "[a4@18 g4@18 f#4@26 ~@22 f#5@3 g5@3 f#5@6]/2",
  W: "e5@5 ~ f#5@3 d5@6 c#5@6 d5@3", X: "[c#5@4 a4 ~ a4@4 g4@2 a4@20]/2",
  Y: "[~@12 f#5@3 g5@2 f#5@6 g5@6 a5@12 ~ d5@18 f#5@3 g5@2 f#5@6 g5@6 a5@13 b5@18 a5@2 ~@4 a5@78]/4",
  Z: "c#5@12 ~ b4@11 a4@12 g4@12",
  AA: "[f#4@11 ~ d4@3 ~@3 d4@34 ~@8 f#4@2 ~@4 f#4@2 ~@4 f#4@6 g4@12 a4@17 d4@3 ~@4 d4@2 ~@4 d4@5 ~ e4@18]/3",
  AB: "c#5 b4 a4 g4",
  AC: "[f#4@11 d4@3 ~@4 d4@36 ~@6 f#4@2 ~@4 f#4@2 ~@4 f#4@5 ~ g4@12 a4@17 ~ d4@3 ~@3 d4@2 ~@4 d4@5 e4@33 ~@4 f#5@2 ~@4 f#5@5 ~ e5@11 f#5@37 e5@11 ~ f#5@6]/5",
  AD: "[c#5@47 a4@18 g4@18 f#4@25 ~@6 f#5@2 ~@4 f#5@5 ~ e5@12 f#5@30 b5@5 ~ a5@6 b5@6 a5@54]/5",
  AE: "[~@64 c#5@89 ~@39, f#5@77 ~@19, ~@10 e5@67 ~@19, ~@21 d5@56 ~@19]/4",
})).s("gm_string_ensemble_1").gain(0.8)

// chords · acoustic guitar nylon · "Acoustic Guitar I"
const acoustic_guitar_nylon = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D A B C D A E F G A E F G A E F G A E F G A E F G A E F G H I J K H I J K H I
  J K H I J K H I J K H I J L ~@3
>`.pickRestart({
  A: "[d3,f#3]@6 ~@3 [d3,f#3]@2 ~@7 [d3,f#3]@18 ~@6 [d3,f#3]@6", // D
  B: "[f#3,b3]@6 ~@3 [f#3,b3]@2 ~@7 [f#3,b3]@18 ~@6 [f#3,b3]@6", // B5
  C: "[e3,a3]@6 ~@3 [e3,a3]@2 ~@7 [e3,a3]@18 ~@7 e3@5, ~@42 a3@5 ~", // A5
  D: "[e3,a3]@9 [e3,a3]@2 ~@7 [e3,g3]@18 ~@6 [e3,g3]@6", E: "[f#3,b3]@6 ~@3 [f#3,b3]@2 ~@7 [f#3,b3]@18 ~@7 [f#3,b3]@5",
  F: "[e3,a3]@6 ~@3 [e3,a3]@2 ~@7 [e3,a3]@18 ~@7 [e3,a3]@5", // A5
  G: "~ a3@8 [e3,a3]@2 ~@7 [e3,g3]@18 ~@7 [e3,g3]@5, e3@3 ~@13", // A5 Em
  H: "~ [d3,f#3]@6 ~@3 [d3,f#3]@2 ~@7 [d3,f#3]@18 ~@6 [d3,f#3]@5", // D
  I: "~ [f#3,b3]@6 ~@3 [f#3,b3]@2 ~@7 [f#3,b3]@18 ~@6 [f#3,b3]@5", // B5
  J: "~ [e3,a3]@6 ~@3 [e3,a3]@2 ~@7 [e3,a3]@18 ~@6 [e3,a3]@5", K: "~ [e3,a3]@9 [e3,a3]@2 ~@7 [e3,g3]@18 ~@6 [e3,g3]@5",
  L: "~ [e3,a3]@9 [e3,a3]@2 ~@8 [e3,g3]@25 ~@3", // A5 Em
})).s("gm_acoustic_guitar_nylon").gain(0.52)

// chords · acoustic guitar steel · "Acoustic Guitar II"
const acoustic_guitar_steel = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B
  C D A B C D A B C D A B C E@2 ~@2
>`.pickRestart({
  A: "[d3,f#3]@11 ~@7 [d3,f#3]@17 ~@13", B: "~ b3@13 ~@5 [f#3,b3]@19 ~@10, f#3@13 ~@35",
  C: "[e3,a3]@13 ~@5 [e3,a3]@24 ~@6", D: "[e3,a3]@13 ~@5 [e3,g3]@25 ~@5", E: "[[e3,a3]@14 ~@5 [e3,g3]@36 ~@41]/2",
})).s("gm_acoustic_guitar_steel").gain(0.21)

// other · pad warm · "Pad"
const pad_warm = note(`<
  ~ A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2 A@2 B@2 A@2 C@3 ~@2
>`.pickRestart({
  A: "f#3/2", B: "[~ e3@93 ~@2]/2", C: "[~ e3@111 ~@32]/3",
})).s("gm_pad_warm").gain(0.63)

// other · acoustic guitar steel · "Lead Guitar"
const acoustic_guitar_steel_2 = note("<~@49 A@2 B@2 C@2 D@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 E@3 ~@2>".pickRestart({
  A: "[~@7 f#4@2 ~@4 f#4@5 ~ e4@6 f#4@2 ~@4 f#4@5 e4@6 f#4@11 ~ e4@6 f#4@2 ~@4 f#4@6 a4@6 b4@2 ~@4 b4@12, e4@13 ~@83]/2",
  B: "[e4@6 f#4@2 ~@4 f#4@5 ~ e4@6 f#4@2 ~@4 f#4@2 ~@4 f#4@5 ~ b3@44 ~@10]/2",
  C: "[e4@7 f#4@2 ~@4 f#4@5 ~ e4@6 f#4@2 ~@4 f#4@5 e4@6 f#4@11 ~ e4@6 f#4@2 ~@4 f#4@6 a4@6 b4@2 ~@4 b4@12]/2",
  D: "[e4@6 f#4 ~@5 f#4@5 ~ e4@6 f#4@2 ~@4 f#4@2 ~@4 f#4@5 ~ b3@44 ~@10]/2",
  E: "[e4@6 f#4 ~@5 f#4@5 ~ e4@6 f#4@2 ~@4 f#4@2 ~@4 f#4@5 ~ b3@70 ~@32]/3",
})).s("gm_acoustic_guitar_steel").gain(0.72)

// other · string ensemble 1 · "Echo String"
const string_ensemble_1_2 = note(`<
  ~@9 A@4 B@2 C@2 D E@2 F@6 G@2 H@2 I@2 J K@6 L@2 M N O P Q O@2 J R S@2 T@6 U@4 V@5 W@4 X@5
>`.pickRestart({
  A: "[~@30 f#5@2 ~@4 f#5@5 ~ e5@12 f#5@30 e5@6 f#5@12 c#5@53 ~ a4@17 g4@19]/4",
  B: "[f#4@29 ~ f#5@2 ~@4 f#5@6 e5@11 ~ f#5@30 b5@6 a5@6]/2", C: "[b5 a5@9 f#5@3 e5@3]/2", D: "d5@2 ~",
  E: "[f#5@3 g5@3 f#5@6 e5@11 f#5@7 d5@12 c#5@11 d5@7 c#5@12 a4@3 ~@3 a4@11 ~ g4@6]/2",
  F: "[a4@60 ~@13 f#5@3 g5@3 f#5@5 g5@6 a5@11 d5@18 ~ f#5@3 g5@3 f#5@5 ~ g5@6 a5@11 b5@18 ~ a5@3 ~@3 a5@29 ~ f#5@17 e5@17 d5@14 c#5@6 d5@4 ~@8 c#5@6 d5@11 ~]/6",
  G: "f#5@12 c#5@6 d5@5 ~@7 c#5@6 d5@11 ~", H: "[c#5@11 a4@49 c#5@5 ~ d5@6 ~@6 c#5@6 d5@11 ~]/2",
  I: "f#5@12 c#5@6 d5@6 ~@6 c#5@6 d5@11 ~", J: "c#5@2 a4@3 g4@3",
  K: "[f#4@27 ~@2 f#5@2 ~@5 f#5@5 e5@12 f#5@31 e5@6 f#5@11 c#5@54 a4@18 g4@18 f#4@28 ~@3 f#5@2 ~@4 f#5@5 ~ e5@12 f#5@18 b5@3 ~@9 b5@5 ~ a5@6]/6",
  L: "[b5@5 a5@55 f#5@18 e5@18]/2", M: "d5@12 c#5@6 d5@6 ~@6 c#5@7 d5@11", N: "f#5@11 ~ c#5@6 d5@6 ~@6 c#5@6 d5@12",
  O: "f#5@2 c#5 d5 ~ c#5 d5@2", P: "c#5@11 ~ a4@17 ~ g4@18", Q: "f#4@12 c#5@6 d5@6 ~@6 c#5@6 d5@11 ~", R: "f#4@13 ~@11",
  S: "[f#5@3 g5@3 f#5@6 e5@10 ~@2 f#5@6 d5@12 c#5@12 d5@6 c#5@12 a4@3 ~@3 a4@12 g4@6]/2",
  T: "[a4@60 ~@12 f#5@3 g5@2 f#5@6 g5@6 a5@12 ~ d5@18 f#5@3 g5@2 f#5@6 g5@6 a5@13 b5@18 a5@2 ~@4 a5@78 c#5@12 ~ b4@11 a4@12]/6",
  U: "[g4@12 f#4@11 ~ d4@3 ~@3 d4@34 ~@8 f#4@2 ~@4 f#4@2 ~@4 f#4@6 g4@12 a4@17 d4@3 ~@4 d4@2 ~@4 d4@5 ~ e4@18 c#5@12 b4@12 a4@12]/4",
  V: "[g4@12 f#4@11 d4@3 ~@4 d4@36 ~@6 f#4@2 ~@4 f#4@2 ~@4 f#4@5 ~ g4@12 a4@17 ~ d4@3 ~@3 d4@2 ~@4 d4@5 e4@33 ~@4 f#5@2 ~@4 f#5@5 ~ e5@11 f#5@37 e5@6]/5",
  W: "[~@6 f#5@6 c#5@47 a4@18 g4@18 f#4@25 ~@6 f#5@2 ~@4 f#5@5 ~ e5@12 f#5@30 b5@5 ~ a5@6]/4",
  X: "[b5@6 a5@54 ~@73 c#5@71 ~@36, ~@12 f#5@29 ~@7, ~@84 e5@121 ~@35, ~@109 d5@95 ~@36]/5",
})).s("gm_string_ensemble_1").gain(0.17).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x ~@4]!71 [x ~@18 x ~@28] ~@3>").gain(0.7)

// drums · low tom
const low_tom = s("lt").struct(`<
  A ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2
  A@2 ~@2 A@2 ~@2 A@2 ~@2 A ~@4
>`.pickRestart({
  A: "~@6 x!2",
})).gain(0.63)

// drums · hihat
const hihat = s("hh").struct("<~ A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 B A@7 C ~@3>".pickRestart({
  A: "x!8", B: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~", C: "x ~@5 x ~@5 x ~@3 x ~@2 x ~@28",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2
  ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@5
>`.pickRestart({
  A: "~@6 x!2",
})).gain(0.63)

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

stack(
  piano, string_ensemble_1, acoustic_guitar_nylon, acoustic_guitar_steel, pad_warm, acoustic_guitar_steel_2,
  string_ensemble_1_2, kick, low_tom, hihat, mid_tom, crash
)

More by The Cure