Strudelify

Kyoto Song

The Cure

KeyB minorTempo115 bpm
0:00/0:00
// Kyoto Song — The Cure
// 115 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 118 bars on a 16-step grid, each part at one level. 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 guitar jazz · "Electr.guitar (jazz)"
const bass = note(`<
  ~ A@8 B C A@6 B C A@6 B C A@6 B C A@6 B C A@6 B C A@6 B C A@2 D@2 E@2 D@2 F G A@4 B C A@6 B C A@6 B C A@2 D@2 E@2 D@2
  F G A@4 B C A H A@4 B C A I@2
>`.pickRestart({
  A: "b1@2 ~ b1@4 ~", B: "a1@2 ~ a1@4 ~", C: "f#1@2 ~ f#1@4 ~", D: "e2@2 ~ e2@2 e2 d2@2", E: "b1@2 ~ b1@2 b1 a1@2",
  F: "b1@2 ~ b1@2 b1 d2@2", G: "c2@3 c2@2 c2 g1@2", H: "b1@2 ~ d2@4 ~", I: "[b1@2 ~ d2@11 ~@2]/2",
})).s("gm_electric_guitar_jazz").gain(0.43)

// chords · acoustic guitar nylon · "Spanish guitar"
const acoustic_guitar_nylon = note(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B@2 A B A B A B A B A B A B A B A
  ~@8 B A B A B A B A@2 B A B A B A B@2 A B A B A B A ~@8 B A B A B A B A B A B A B A B A ~
>`.pickRestart({
  A: "~@3 f#3@5, [b2,e3,b3], ~ f#3@2 ~@5, ~ g3@3", B: "~ f#3, [b2,e3,b3], ~ f#3@3 ~@4, ~ g3@3",
})).s("gm_acoustic_guitar_nylon").gain(0.18)

// other · koto
const koto = note(`<
  ~@4 A B C D C E@2 D F B C D C E@2 D G ~@15 A B C D C E@2 D F ~@15 H I J K L I J K A B C D C E@2 D F ~@15 H I J K L I J
  K A B C D C E@2 D F B C D C E@2 D G M
>`.pickRestart({
  A: "~@5 b4 c#5 d5", B: "f#5@5 d5 c#5 d5", C: "b4@5 b4 c#5 d5", D: "f#5@3 f#5@2 d5 c#5 d5", E: "c#5@5 b4 c#5 d5",
  F: "b4@4 ~ b4 c#5 d5", G: "b4 ~", H: "~@5 d5 c#5 b4", I: "g4@5 d5 c#5 b4", J: "g4@5 c#5 b4 g4", K: "f#4@5 c#5 b4 g4",
  L: "f#4@5 d5 c#5 b4", M: "d5 c#5 b4 g4 f#4 ~@3",
})).s("gm_koto").gain(0.32)

// other · synth brass 2 · "New Track"
const synth_brass_2 = note("<~@103 [b4@2 c#5 d5] [f#5@2 g5 f#5] [d6@2 c#6 b5] ~@12>").s("gm_synth_brass_2").gain(0.29)

// other · electric guitar muted · "Electr.guitar (Muted"
const electric_guitar_muted = note(`<
  ~@29 A B A C D E C F ~@16 A B A C D E C F ~@24 A B A C D E C F ~@16 A B A C D E C F ~
>`.pickRestart({
  A: "[a3,a4]!3 [b3,b4]@2 ~ [f#3,f#4]@2", B: "[a3,a4] [a3,a4]@2 [b3,b4] [b3,b4]@2 ~@2", C: "d4@3 c#4@3 b3@2",
  D: "d4@3 c#4@3 a3@2", E: "[a3,a4]@3 [b3,b4]@3 [f#3,f#4]@2", F: "f#3",
})).s("gm_electric_guitar_muted").gain(0.29).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x!2 ~@3]!116 ~>").gain(0.32)

// drums · clap
const clap = s("cp").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~@5 x!3",
})).gain(0.25)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct("<[~@4 x!2 ~@2] ~@117>").gain(0.32)

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

// drums · triangle
const triangle = s("triangles:35").struct(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~ x!2 ~", B: "~@2 x!2 ~@4",
})).gain(2.5)

stack(
  bass, acoustic_guitar_nylon, koto, synth_brass_2, electric_guitar_muted, kick, clap, mid_tom, open_hat, high_tom,
  crash, triangle
)

More by The Cure