Strudelify

(There's) Always Something There to Remind Me

Naked Eyes

KeyD majorTempo148 bpm
0:00/0:00
// (There's) Always Something There to Remind Me — Naked Eyes
// 148 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 135 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(148/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 · synth bass 1
const bass = note(`<
  ~@2 A B C D A B C D E F G H I E F G J@2 K L M N O P Q N O R S T F U V ~ W ~ X Y@2 Z AA AB N O P AC N O R AD AE AF@2 AG
  AH AI@2 AJ@2 AE AF@2 AG AH A B C AK A B C AK T F U V ~ W ~ X Y@2 Z AA AB N O P AC N O R AD AE AF@2 AG AH AJ@2 ~@7 O AL
  AM AN AO AL AM AP AL@2 AM AN AO AL AM AP AL@2 AM AN AO AL AM AP AL AQ
>`.pickRestart({
  A: "[d2,d3]", B: "[c2,c3]", C: "[b1,b2]", D: "[a1,a2] [c2,c3]", E: "d3", F: "c#3", G: "c3", H: "b2", I: "a#2",
  J: "b2/2", K: "g2", L: "f#2", M: "e2", N: "d2@5 ~ d2@5 ~@13", O: "~@11 d3", P: "d2@5 ~ d2@4 a2@2 b2@4 ~@2 b2@5 ~",
  Q: "d2@12 d1@10 ~ a1", R: "d2@5 ~ d2@4 a2@2 b2@4 d3@2 b2@6", S: "d2@6 d1@5 [a1,a2]", T: "[d2,d3]@5 ~ d2@5 ~@13",
  U: "~@11 d2, c3", V: "g2@5 ~ g2@5 ~@13, b2", W: "[d2,d3]@5 ~ [d2,d3]@5 ~@13", X: "~@11 d2",
  Y: "[g2@5 ~ g2@5 ~@37, b2]/2", Z: "[g1,g2]", AA: "[f#1,f#2]", AB: "[e1,e2]", AC: "d2@6 d1@5 a1", AD: "d2 d1",
  AE: "f#1 a1 c#2 f#2", AF: "b1 d2 f#2 b2", AG: "g1 b1 d2 e2", AH: "a1@5 ~@17 [d2,d3]@2",
  AI: "[[d1,d2]@5 ~ d1@39 ~ [d2,d3]@2, ~@6 d2@5 ~@37]/2", AJ: "[[d1,d2]@5 ~ d1@42, ~@6 d2@5 ~@37]/2", AK: "[a1,a2]",
  AL: "d2@5 ~ d2@5 ~@11 d3@2", AM: "d2@5 ~ d2@4 ~@12 d3@2", AN: "d2@5 ~ d2@4 ~@6 d3@3 ~@5", AO: "d2@5 ~ d2@6 ~@10 d3@2",
  AP: "d2@5 ~ d2@4 a2@3 ~@3 d3@2 b2@5 ~", AQ: "[d1,d2]@5 ~ [d1,d2]@5 ~@13",
})).s("gm_synth_bass_1").gain(0.54)

// bass · synth bass 1 · soft notes
const bass_soft = note(`<
  ~@25 A ~@5 B ~@3 C ~ D E ~@7 A ~@27 B ~@3 C ~ D E ~@7 A ~@22 F ~@3 G ~@3 F ~@3 G ~@3 F ~@3 G ~@2
>`.pickRestart({
  A: "~@16 d3@3 ~@5", B: "~@6 d3@5 ~@13", C: "[a#1,a#2]", D: "c#3", E: "c3", F: "~@5 a2 b2@2 ~ b2@2 a2",
  G: "~@6 b2@2 ~@3 a2",
})).s("gm_synth_bass_1").gain(0.3)

// chords · tremolo strings
const tremolo_strings = note(`<
  ~@2 A B C D E B F G ~@13 H ~ I J K ~ I L ~@13 H ~ I J K ~ I L ~@14 A B C D E B F G ~@13 H ~ I J K ~ I L ~@15 H ~ I J K
  ~ I L H ~ I J K ~ I L H ~ I J K ~ I L M
>`.pickRestart({
  A: "~@3 [d5,d6]@2 ~ [e5,e6]@2 ~ [c5,c6]@2 ~", B: "~@6 [g4,g5]@4 ~@2 [b4,b5]@4 ~@2 [c5,c6]@5 ~",
  C: "~@6 [b4,b5]@5 ~ [g4,g5]@4 ~@2 [e4,e5]@4 ~@2", D: "[g4,g5]@5 ~ [f#4,f#5]@5 ~ [d4,d5]@4 ~@2 [c4,c5]@5 ~",
  E: "~@6 [d5,d6]@4 ~@2 [e5,e6]@5 ~ [c5,c6]@5 ~", F: "~@6 [b4,b5]@5 ~ [g4,g5]@5 ~ [e4,e5]@5 ~",
  G: "[g4,g5]@5 ~ [f#4,f#5]@5 ~ [d4,d5]@5 ~ [c4,c5]@6", H: "[d3,a3]@4 ~@2 [d3,a3]@5 ~@13",
  I: "[d3,a3]@4 ~@2 [d3,a3]@5 ~@7 [d3,a3]@3 ~@3", J: "[d3,a3]@11 ~", K: "[d3,a3]@5 ~ [d3,a3]@5 ~@13",
  L: "[d3,a3]@19 ~@5", M: "[a3,d4]@2 ~ [a3,d4]@2 ~@7",
})).s("gm_tremolo_strings").gain(0.36)

// chords · pad metallic
const pad_metallic = note("<~@10 A B C D E A B C F@2 G@3 ~@12 H I@3 ~@2 G@3 ~@34 H I@3 ~@2 G@3 ~@48>".pickRestart({
  A: "d3", B: "c#3", C: "c3", D: "b2", E: "a#2", F: "b2/2", G: "[g3 f#3 e3, d4]/3", H: "~@11 d4@13", I: "[a3@71 ~]/3",
})).s("gm_pad_metallic").gain(0.38).pan(0.7)

// other · tubular bells
const tubular_bells = note("<~@2 A B C D E B C D ~@56 A B C D E B C D ~@61>".pickRestart({
  A: "d4@4 ~@2 [d5,d6]@3 ~@3 [e5,e6]@2 ~@4 [c5,c6]@2 ~@4", // D E C
  B: "[f#4,f#5]@4 ~@2 [g4,g5]@2 ~@4 [b4,b5]@2 ~@2 g5 ~ [c5,c6]@2 ~@2 b5 ~, ~@18 a5 ~@5", // F# G B C
  C: "b3@2 ~ [b4,b5] ~@2 [g4,g5] ~@2 e5 ~@2, g5 ~@17 e4 ~@5", // B G
  D: "a3@4 ~@2 [f#4,f#5]@2 ~@4 [d4,d5]@2 ~@2 a5 ~ [c4,c5]@2 ~@2 d6 ~, ~@18 c6 ~@5", // F# D C
  E: "d4@4 ~@2 [d5,d6]@3 ~@3 [e5,e6]@2 ~@4 [c5,c6]@2 ~@4, d6 ~@23", // D E C
})).s("gm_tubular_bells").gain(0.35).pan(0.3)

// other · dulcimer
const dulcimer = note(`<
  ~@2 A B C D A B C D ~@13 E F G@2 E F G@2 ~@13 E F G@2 E F G@2 H I@2 J K L ~@3 H I@2 J K A B C D A B C D ~@13 E F G@2 E
  F G@2 H I@2 J K ~@10 E F G@2 E F G@2 E F G@2 E F G@2 E F G@2 E F G@2 M
>`.pickRestart({
  A: "[d3,d4]@11 ~", B: "[c3,c4]@11 ~", C: "[b2,b3]@11 ~", D: "[a2,a3] [c3,c4]", E: "d2@5 ~ d2@5 ~@11 d3@2",
  F: "d2@5 ~ d2@4 ~@12 d3@2", G: "[d2@23 ~]/2", H: "f#2 a2 c#3 f#3", I: "b2 d3 f#3 b3", J: "g2 b2 d3 e3",
  K: "a2@4 ~@6 a2@2 b2@4 d3 ~ d3@4 b2@2", L: "d2@3 ~@5", M: "[f#3,d4] ~ [f#3,d4] ~@5",
})).s("gm_dulcimer").gain(0.4).pan(0.6)

// chords · pad new age
const pad_new_age = note(`<
  ~@20 A B C ~@18 A B C ~@8 D E@2 F G H@2 I@2 D E@2 F G ~@18 A B C ~@8 D E@2 F G ~@35
>`.pickRestart({
  A: "[g3,b3,d4]@11 ~", B: "[f#3,a3,d4]@11 ~", C: "[e3,g3,b3]", D: "[f#4,a4,c#5]@23 ~", E: "[[d4,f#4,b4]@23 ~]/2",
  F: "[d4,g4,b4]", G: "[e4,a4,c#5] ~@5", H: "[[d3,a3]@3 [d3,g3]]/2", I: "[[d3,a3]@43 ~@5]/2",
})).s("gm_pad_new_age").gain(0.22).pan(0.3)

// other · steel drums
const steel_drums = note(`<
  ~@26 A ~@3 A B C D E F B C D E ~@7 A ~@3 A ~@22 B C D E F B C D E ~@7 A ~@3 A ~@10 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~
>`.pickRestart({
  A: "~@6 [d6,d7] ~", B: "~@6 d6!2 ~@16", C: "~@6 c#6!2 ~@16", D: "~@6 c6!2 ~@16", E: "~@6 b5!2 ~@16",
  F: "~@6 a#5!2 ~@16",
})).s("gm_steel_drums").gain(0.22).pan(0.3)

// other · sitar
const sitar = note(`<
  ~@25 A B ~@2 A B ~@15 A B ~@2 A B ~@37 A B ~@2 A B ~@9 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B C
>`.pickRestart({
  A: "~@9 d4@8 ~ b3@6", B: "a3@3 f#3@3 ~@2", C: "[d3,a3] ~ [d3,a3] ~@5",
})).s("gm_sitar").gain(0.25).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@2 A@50 B@4 C A@8 ~ A@29 B@4 C A@2 ~@8 A@24 D>".pickRestart({
  A: "x ~@4 x!2 ~@5", B: "x!4", C: "x", D: "x!2 ~@2",
})).gain(0.51)

// drums · rim
const rim = s("rim").struct(`<
  ~@2 A B A B A B A B ~@13 C D C D C D C D ~@13 C D C D C D C D ~@9 E@4 F A B A B A B A B C D C D C D C D C D ~@3 C D C
  D C D C D ~@7 C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D ~
>`.pickRestart({
  A: "~@8 x ~@2 x", B: "~@16 x ~@5 x!2", C: "x ~@3 x ~@16 x!3", D: "~ x ~@4", E: "x!2 ~@4", F: "x!6",
})).gain(0.31)

// drums · snare
const snare = s("sd").struct("<~@2 A@54 ~ A@8 ~ A@33 ~ A@2 ~@8 A@24 B>".pickRestart({
  A: "~ x ~ x", B: "x!2 ~@2",
})).gain(0.41)

// drums · clap
const clap = s("cp").struct("<~@33 [~@23 x] [~ x ~@6] ~@100>").gain(0.05)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~ A B ~@20 B A B A B A B A ~@13 B A B A B A B A ~@9 C@4 D ~@8 B A B A B A B A B A ~@3 B A B A B A B A ~@7 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 E
>`.pickRestart({
  A: "~@22 x!2", B: "x", C: "~@11 x", D: "x!6", E: "x!2 ~@2",
})).gain(0.31)

// drums · hihat
const hihat = s("hh").struct("<~ A@22 B@33 C B@8 ~ A@8 B@25 C B@2 C@8 B@24 D>".pickRestart({
  A: "x!4", B: "~ x ~@2 x ~@2 x ~@2 x ~", C: "~ x ~ x", D: "x!2 ~@2",
})).gain(0.15)

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

// drums · open hat
const open_hat = s("oh").struct("<~@23 A@33 ~ A@8 ~@9 A@25 ~ A@2 ~@8 A@24 ~>".pickRestart({
  A: "x!4",
})).gain(0.31)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~ A ~@22 A ~ A ~ A ~ A ~@14 A ~ A ~ A ~ A ~@9 A@4 ~@10 A ~ A ~ A ~ A ~ A ~@4 A ~ A ~ A ~ A ~@8 A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@6 x!3 ~@3",
})).gain(0.31)

// drums · shaker
const shaker = s("sh").struct("<[x!2] ~@134>").gain(0.2)

stack(
  bass, bass_soft, tremolo_strings, pad_metallic, tubular_bells, dulcimer, pad_new_age, steel_drums, sitar, kick, rim,
  snare, clap, low_tom, hihat, mid_tom, open_hat, high_tom, shaker
)

More by Naked Eyes