Strudelify

Windsurf Windsurf

Battisti

KeyA majorTempo100 bpm
0:00/0:00
// Windsurf Windsurf — Battisti
// 100 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 4, 4/4 at bar 5) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · piano
const piano = note(`<
  A@4 B C@2 D@2 E F D@2 E F D@2 E F G@4 H I J K L M@2 D@2 E F D@2 E F D@2 E F G@4 H I J K N O@2 ~ P Q@2 ~ R S@2 ~ R T
>`.pickRestart({
  A: "[~ [a4,c#5,e5,f#5]@4 [a4,d5,f#5]@3]/4", B: "[c#5,f#5,b5]@3 [c#5,e5,a5]@5",
  C: "[[a#4,c#5,g#5]@3 [a#4,c#5,f#5]@4 [a4,c#5,f#5]@9]/2", D: "[c#4,e4,f#4,a#4]!8", E: "[d4,f#4,a4]!8",
  F: "[e4,g#4,b4]!8", G: "[c#4,e4]@3 [d4,f#4]@5", H: "[c#4,e4,a4] [c4,d#4,g#4]", I: "[a3,d4,f#4]!2", J: "[a3,c#4,e4]",
  K: "[b3,e4,g4] [a3,d4,f#4]", L: "[b3,c#4,f#4]@3 f#3 c#4 f#3 c#4 f#4", M: "[c#5 f#4 c#5 f#5 c#5 f#5 f#6 c#6@9]/2",
  N: "[f#4,b4,c#5]@3 [f#4,b4,c#5]@3 [f#4,b4,c#5]@3 [f#4,a4,c#5]@3 [f#4,a4,c#5]@4", // F#sus4 F#m
  O: "[c#4 f#4 c#5 f#4 c#5 f#5 f#6 c#6@9]/2", P: "[d4,f#4,a4]@3 [c#4,f#4,a4]@5", Q: "[c#5@3 f#5@4 [f#5,g#5]@9]/2",
  R: "~@3 c#4 f#4 b4 c#5@2 ~@3 c#4 f#4 b4 c#5@2", S: "[~@3 c#4 f#4 b4 c#5@2 ~@3 e4 a4 f#4@19]/2",
  T: "~@3 c#4 f#4 b4 c#5@2 ~@3 e4 a4 [f#4,g#5]@3", // F#sus2
})).s("gm_piano").gain(0.05)

// bass · electric bass finger · "Basso"
const bass = note(`<
  A B@2 C D E@2 F G H I F G H I F G H I J@4 K L M N O P@2 F G H I F G H I F G H I J@4 K L M N Q R@3 S T@4 U V@3 ~
>`.pickRestart({
  A: "~@2 f#1 c#2", B: "[f#2 c#3 b3@4 f#1 d2]/2", C: "d3 a3 d4 a4", D: "d3@3 ~ c#3 f#3 c#3 f#3, ~@3 f#2@5",
  E: "[c#3 f#3 c#4 f#3 c#4 f#4 f#5 [d3,c#5]@9, a#2@3 d#3@4 ~@9]/2", F: "f#2!8", G: "f#2!4 e2!4", H: "d2!8",
  I: "e2!4 g#2!4", J: "a2@3 a2@5", K: "a2 g#2", L: "b2 a2", M: "a2", N: "e2 d2", O: "b2 a#2", P: "[a#2@4 d3@3 d3@9]/2",
  Q: "f#2@3 f#2@3 f#2@3 f#2@3 f#2@4", R: "[a#1@3 d#2@4 d2@6 ~@2 e2@9]/3", S: "d2@3 f#2@5",
  T: "[a1@3 d#2@4 d2@8 e2@6 d2 e2 f#2@9]/4", U: "d2@7 ~", V: "[d2@7 e2@6 d2 e2 f#2@9]/3",
})).s("gm_electric_bass_finger").gain(0.12)

// other · acoustic guitar steel · "Chit."
const acoustic_guitar_steel = note("<~@30 A B C D A B C D A B C D ~@22>".pickRestart({
  A: "~@4 f#4 b4 a#4@2 ~@5 b4 a#4@2, ~@6 f#4 ~", B: "~@4 f#4 b4 a#4@2 ~@4 e4 b4 g#4@2",
  C: "~@4 a4 c5 a4@2 ~@4 a4 c5 a4@2", D: "~@4 b4 d5 g#4@2 ~@4 b4 d5 g#4@2",
})).s("gm_acoustic_guitar_steel").gain(0.18)

stack(piano, bass, acoustic_guitar_steel)

More by Battisti