Strudelify

I Hear You Now

Vangelis

KeyB majorTempo112 bpm
0:00/0:00
// I Hear You Now — Vangelis
// 112 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "SWEEP PAD" pad sweep (copy of ch 8 "SLOWSTRIN" string ensemble 2)
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/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 · "SYN BASS"
const bass = note(`<
  A@8 B@2 C@2 B@2 A@10 B@2 C@2 B@2 A@10 B@2 C@2 B@2 A@10 B@2 C@2 B@2 A@4 B@2 A@2 B@2 A@4 B D A@3 E@2 A@13
>`.pickRestart({
  A: "b2@3 b2 b2@4", B: "g2@3 g2 g2@4", C: "f#2@3 f#2 f#2@4", D: "a2@3 a2 a2@4", E: "e3@3 e3 e3@4",
})).s("gm_synth_bass_1").gain(0.5)

// bass · synth bass 1 · "SYN BASS"
const bass_2 = note("b2 f#3 b3 f#4 b2 f#3 b3 f#4").s("gm_synth_bass_1").gain(0.56)

// chords · synth brass 1 · "SYNBRASS"
const synth_brass_1 = note(`<
  A@2 B@2 A@2 C@2 D@2 E@2 D F@3 A@2 B@2 A@2 C@2 D@2 E@2 D G@3 H@2 I@2 H@2 J@2 D@2 E@2 D G@3 H@2 I@2 H@2 J@2 D@2 E@2 K
  L@6 M@4 N@2 O@2 P@6 Q R@7 S T U@2 V T W
>`.pickRestart({
  A: "[c#4,e4]@2 [b3,d#4] [d#4,f#4]@4 [b3,d#4]", B: "[[c#4,e4]@2 [b3,d#4] [a3,c#4]@9 ~@3 [b3,d#4]]/2",
  C: "[[c#4,e4]@2 [b3,d#4] [a3,c#4]@9 ~@3 [g#4,b4]]/2", D: "[a4,c#5]@2 [g4,b4] [b4,d5]@4 [g4,b4]",
  E: "[[a4,c#5]@2 [g4,b4] [f#4,a4]@9 ~@3 [g4,b4]]/2", // A G F#m G
  F: "[[a4,c#5]@2 [g4,b4] [b4,d5]@3 [c#5,e5] [d#5,f#5]@13 ~@3 [b3,d#4]]/3", // A G Bm C#m D#m B
  G: "[[a4,c#5]@2 [g4,b4] [b4,d5]@3 [c#5,e5] [d#5,f#5]@13 ~@3 [b4,d#5]]/3", // A G Bm C#m D#m B
  H: "[c#5,e5]@2 [b4,d#5] [d#5,f#5]@4 [b4,d#5]", I: "[[c#5,e5]@2 [b4,d#5] [a4,c#5]@9 ~@3 [b4,d#5]]/2",
  J: "[[c#5,e5]@2 [b4,d#5] [a4,c#5]@9 ~@3 [g#4,b4]]/2", K: "[a4,c#5]@4 [g4,b4]@2 ~ b4@7 [g4,b4]@2, ~@3 d5@4 ~",
  L: "[[a4,c#5]@2 [g4,b4] [b4,d5]@3 [c#5,e5] [d#5,f#5]@13 ~ [c#5,e5] [b4,d#5] [a4,c#5]@13 [a4,c#5]@2 [g4,b4] [a4,c#5]@3 [g4,b4]@6]/6", // A G Bm C#m D#m C#m B A …
  M: "[~@2 [a4,c#5] [g4,b4] [a4,c#5] [b4,d5]@2 [b4,d#5]@6 [c#5,e5] [b4,d#5] [a#4,c#5]@6 [a4,c#5] [b4,d5] [a4,c#5]@3 [g4,b4]@6]/4", // A G A Bm B C#m B A#m …
  N: "[~ [f#4,a4] [g4,b4] [a4,c#5] [b4,d5] [a4,c#5] [g#4,b4] [b4,d#5]@9]/2", O: "[b4@3 [b4,d#5]@3 [c#5,e5]@10]/2",
  P: "[b4@3 [c#5,e5]@3 [g4,b4,d5]@5 d5@4 [a4,c#5,e5]@4 e5@4 [b4,d5,g5]@4 g5@4 [c#5,e5,a5]@4 a5@4 [d#5,f#5,b5]@9]/6", // C#m G A G A B
  Q: "[c#5,e5,a5]", R: "[[b4,e5,g#5]@12 ~ e4 g#4 [d#4,f#4]@31 [d#4,f#4] [e4,g#4]@3 [d#4,f#4] [f#4,b4]@4 [d#4,f#4]]/7",
  S: "[e4,g#4]@2 [d#4,f#4] [f#4,b4]@4 [d#4,f#4]", T: "[e4,a4]@2 [d#4,g#4] [c#4,f#4]@5",
  U: "[~@6 [d#4,f#4] [e4,g#4]@3 [d#4,f#4] [f#4,b4]@4 [d#4,f#4]]/2", V: "[e4,g#4]@2 [d#4,f#4] [f#4,b4]@4 ~",
  W: "~@7 [b3,c#4]", // Bsus2
})).s("gm_synth_brass_1").gain(0.64)

// other · music box
const music_box = note("<~@32 A B C ~ A B D ~@9 A B C ~ A B D ~@41>".pickRestart({
  A: "f#4@2 f#4!2 f#4@2 g#4@2 f#4@2 e4@2 d#4@2 d#4@2", B: "f#4@2 f#4@2 f#4@2 g#4 f#4@3 e4@2 d#4@2 e4@2",
  C: "d#4@2 c#4 e4@5", D: "a4@2 g#4 f#4@5",
})).s("gm_music_box").gain(0.64)

// chords · string ensemble 2 · "SLOWSTRIN"
const string_ensemble_2 = note(`<
  A@2 B C A@2 B@2 D@2 E@2 D@2 A@4 B C A@2 B@2 D@2 E@2 D@2 A@4 B@2 A@2 B@2 D@2 E@2 D@2 A@4 B@2 A@2 B@2 D@2 E@2 D@2 A@2
  F@2 G@2 H F G@2 H@2 F@2 I J K F H F L@2 H@6 F@2 H@2 F@2
>`.pickRestart({
  A: "[b2,b3,d#4,f#4]", B: "[b2,a3,c#4,e4]", C: "[b2,a3,c#4,e4,f#4]", D: "[g2,d4,f#4,g4,b4]", E: "[f#2,e4,f#4,a4,c#5]",
  F: "[b3,a4,c#5,e5]", G: "[f#3,g4,b4,d5]", H: "[b3,b4,d#5,f#5]", I: "[e4,g4,b4,d5]", J: "[f#4,a4,c#5,e5]",
  K: "[b3,g4,b4,d5]", L: "[e4,e5,g#5,b5]",
})).s("gm_string_ensemble_2").gain(0.3)

// drums · kick
const kick = s("bd").struct("x ~@2 x!2 ~@2 x").gain(0.59)

// drums · snare
const snare = s("sd").struct("~@2 x ~@3 x!2").gain(0.59)

// drums · hihat
const hihat = s("hh").struct("x!4 ~ x!5 ~ x!3 ~ x").gain(0.66)

// drums · open hat
const open_hat = s("oh").struct("~@2 x ~@2 x ~ x").gain(0.59)

stack(bass, bass_2, synth_brass_1, music_box, string_ensemble_2, kick, snare, hihat, open_hat)

More by Vangelis