Strudelify

Corridors of Time

Vincent Ward

KeyA majorTempo116 bpm
0:00/0:00
// Corridors of Time — Vincent Ward
// 116 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5310359; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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 · acoustic guitar nylon · "Classical Guitar"
const acoustic_guitar_nylon = note(`<
  ~@4 A B C D E@2 F@2 E@2 G H E@2 F@2 I J K@2 ~ L M N O@2 P Q@2 L M N R@2 S@2 A B C T ~@10 E@2 F@2 I J K@2 ~ L M N U@2 P
  Q@2 L M N R@2 V@3 ~@9
>`.pickRestart({
  A: "[a3,c#4,f#4]@2 ~@4 [a3,c#4,f#4]@6 [a3,c#4,f#4]@2 [a3,c#4,f#4]!2", // F#m
  B: "[a3,c#4,f#4] ~@2 [a3,c#4,f#4]@3 [a3,c#4,f#4]!2", C: "[g#3,b3,e4] ~@2 [g#3,b3,e4]@3 [g#3,b3,e4]@2",
  D: "[f#3,a3,c#4]@2 ~@4 [f#3,a3,c#4]@6 [f#3,a3,c#4]@2 [f#3,a3,c#4]!2", E: "~@4 [a3,d4,f#4] ~@5 [a3,d4,f#4] ~@5",
  F: "~@4 [g#3,c#4,e4] ~@5 [g#3,c#4,e4] ~@5", G: "~@4 [c#4,f#4,g#4] ~@5 [c#4,f#4,g#4] ~@5",
  H: "~@4 [c#4,f#4,a4] ~@5 [c#4,f#4,g#4] ~@5", I: "~@4 [f#3,a3,d4] ~@5 [f#3,a3,d4] ~@5",
  J: "~@4 [g#3,b3,e4] ~@5 [g#3,b3,e4] ~@5", K: "~@4 [a3,c#4,f#4] ~@5 [a3,c#4,f#4] ~@5", L: "[b3,b4] [e4,e5]",
  M: "[g#4,g#5]", N: "[a4,a5]@2 [g#4,g#5] [e4,e5]", O: "[c#5@4 c#5@2 [b3,b4] [e4,e5], c#4@3 ~]/2", P: "[b3,b4] [a3,a4]",
  Q: "[[g#3,g#4]@4 [f#3,f#4]@2 [e3,e4] [f#3,f#4]@9]/2", R: "[c#5@2 c#5 [e4,e5], c#4@3 ~]/2", S: "[f#4,f#5]",
  T: "[f#3,a3,c#4] ~@7", U: "[[c#4,c#5]@6 [b3,b4] [e4,e5]]/2", V: "[f#5@16 f#5@17 ~@15, f#4@11 ~@5]/3",
})).s("gm_acoustic_guitar_nylon").gain(0.25)

// chords · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note(`<
  ~@7 A B@2 C@2 D@2 E@3 F G@2 H I J K ~@19 A L@2 M N L@2 O P@2 Q@2 F G@2 H I J K ~@26
>`.pickRestart({
  A: "~@7 c#4", B: "[g#4@3 g#4@3 f#4@2 f#4@14 f#4 g#4 a4@3 b4@3 a4 g#4]/2", C: "[f#4@3 f#4@3 e4@2 e4@16 ~@6 c#4@2]/2",
  D: "[g#4@3 g#4@3 f#4@2 f#4@14 f#4@2 g#4@3 a4@3 b4@2]/2", E: "[b4@3 c#5@3 c#5@14 ~@2 c#5@2 e5@3 c#5@3 a4@14 ~@4]/3",
  F: "~@3 a4 f#4@2 c#5@2", G: "[b4@3 c#5@3 g#4@5 ~ f#4@2 e4@14 ~@2 e4@2]/2", H: "f#4@2 a3@2 d4@2 e4@2 f#4@3 g#4@3 a4@2",
  I: "g#4@2 b3@2 e4@2 f#4@2 g#4@3 a4@3 g#4@2", J: "g#4@13 ~ f#4@2", K: "f#4", L: "[a3,f#4] ~@3 [a3,f#4] ~@3",
  M: "[g#3,e4] ~@3 [g#3,e4] ~@3", N: "[a3,e4] ~@3 [g#3,e4] ~@3", O: "[c#4,g#4] ~@3 [c#4,g#4] ~@3",
  P: "[[c#4,a4]@2 ~@4 [c#4,g#4]@25 ~]/2", Q: "[~@6 c#5@2 e5@3 c#5@3 a4@14 ~@4]/2",
})).s("gm_acoustic_guitar_steel").gain(0.58)

// chords · acoustic guitar steel · "Acoustic Guitar" · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@4 A B C D ~@16 A ~@15 A B C D E@2 F@2 E@2 G H@2 I@2 J K@2 L M N O A ~@25
>`.pickRestart({
  A: "~ f#4@15, [g#4,a4]", B: "[f#4,a4,c#5]", C: "[c#4,e4,f#4]", D: "[f#3,a3,c#4] ~", E: "d4 ~@3 d4 ~@3",
  F: "c#4 ~@3 c#4 ~@3", G: "f#4 ~@3 f#4 ~@3", H: "[f#4@2 ~@4 f#4@25 ~]/2", I: "[~@6 e4@2 g#4@3 e4@3 c#4@14 ~@4]/2",
  J: "~@3 c#4 a3@2 e4@2", K: "[b3@3 e4@3 b3@5 ~ a3@2 [e3,g#3]@14 ~@2 e5@2]/2",
  L: "f#5@2 a4@2 d5@2 e5@2 f#5@3 g#5@3 a5@2", M: "g#5@2 b4@2 e5@2 f#5@2 g#5@3 a5@3 g#5@2", N: "g#5@13 ~ f#5@2",
  O: "f#5",
})).s("gm_acoustic_guitar_steel").gain(0.29)

// bass · acoustic bass
const bass = note(`<
  ~@4 A@2 B C A@2 D@2 A@2 B C A@2 D@2 A E B C A@2 B C A@2 B C A@2 B C A F B C A@2 B G ~@10 A@2 D@2 A E B C A@2 B C A@2 B
  C A@2 B C A F B C ~@10
>`.pickRestart({
  A: "d2 ~@2 d2 ~@2 a2 d3", B: "f#2 ~@2 f#2 ~@2 c#3 f#3", C: "f#2 ~@2 f#2 ~@2 e2@2", D: "c#2 ~@2 c#2 ~@2 g#2 c#3",
  E: "e2 ~@2 e2 ~@2 b2 e3", F: "d2 ~@2 d2 ~@2 c#2@2", G: "f#2 ~@7",
})).s("gm_acoustic_bass").gain(0.38)

// other · cello · "Violin"
const cello = note(`<
  ~@25 A B C D@2 E F@2 A B C G@2 H@2 ~@4 I@2 J@2 I@2 K L@2 ~ M@2 N@2 O N M@2 ~ A B C D@2 E F@2 A B C G@2 P@3 ~@9
>`.pickRestart({
  A: "b4 e5", B: "g#5", C: "a5@2 g#5 e5", D: "[c#5@6 b4 e5]/2", E: "b4 a4", F: "[g#4@4 f#4@2 e4 f#4@9]/2",
  G: "[c#5@3 e5]/2", H: "f#5/2", I: "f#4 ~@3 f#4 ~@3", J: "e4 ~@3 e4 ~@3", K: "g#4 ~@3 g#4 ~@3",
  L: "[a4@2 ~@4 g#4@25 ~]/2", M: "~@4 f#4 ~@5 f#4 ~@5", N: "~@4 e4 ~@5 e4 ~@5", O: "~@4 d4 ~@5 d4 ~@5",
  P: "[f#5@11 ~@5]/3",
})).s("gm_cello").gain(0.31)

// other · cello · "Violin" · soft notes
const cello_soft = note("<~@5 A B C ~@33 A B D ~@44>".pickRestart({
  A: "f#4", B: "e4", C: "c#4", D: "a3",
})).s("gm_cello").gain(0.17)

// other · viola
const viola = note(`<
  ~@25 A B C D@2 E F@2 A B G H@2 I@2 ~@4 J@2 K L J@2 M N@2 ~ O@2 P@2 ~@5 A B C D@2 E F@2 A B G H@2 Q@3 ~@9
>`.pickRestart({
  A: "f#4 b4", B: "e5", C: "f#5@2 e5 c#5", D: "[a4@6 f#4 b4]/2", E: "g#4 f#4", F: "[e4@4 c#4@2 c#4 d4@9]/2",
  G: "f#5@2 e5 b4", H: "[a4@3 g#4]/2", I: "a4/2", J: "a3 ~@7 a3 ~@7", K: "g#3 ~@7 g#3 ~@7", L: "a3 ~@7 g#3 ~@7",
  M: "c#4 ~@7 c#4 ~@7", N: "[c#4 ~@5 c#4@25 ~]/2", O: "~@4 a3 ~@5 a3 ~@5", P: "~@4 g#3 ~@5 g#3 ~@5", Q: "[a4@11 ~@5]/3",
})).s("gm_viola").gain(0.36)

// other · viola · soft notes
const viola_soft = note("<~@5 A@3 ~@33 A@3 ~@14 B C D@2 ~@26>".pickRestart({
  A: "c#4", B: "~@4 f#3 ~@5 f#3 ~@5", C: "~@4 g#3 ~@5 g#3 ~@5", D: "~@4 a3 ~@5 a3 ~@5",
})).s("gm_viola").gain(0.12)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@4
  [~@4 x ~@7 x ~ x!2]!39
  ~@10
  [~@14 x!2]
  [~@4 x ~@7 x ~ x!2]!23
  [~@4 x ~@7 x ~@2 x]
  x
  ~@9
>`).gain(1.89)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@4
  [x ~@2 x ~@2 x ~@3 x ~@5]!39
  x
  ~@9
  [~@3 x]
  [x ~@2 x ~@2 x ~@3 x ~@5]!24
  ~@10
>`).gain(1.89)

stack(
  acoustic_guitar_nylon, acoustic_guitar_steel, acoustic_guitar_steel_2, bass, cello, cello_soft, viola, viola_soft,
  congas, congas_2
)