Strudelify

Water From a Vine Leaf

William Orbit

KeyF♯ minorTempo102 bpm
0:00/0:00
// Water From a Vine Leaf — William Orbit
// 102 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 16 "BassBoost  (GS)" named as a bass, played on electric bass finger (its lead 1 square patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 16 "BassBoost  (GS)" electric bass finger (copy of ch 1 "Base Line  (GS)" electric bass pick)
// note: Full arrangement: all 174 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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 bass pick · "Base Line  (GS)"
const bass = note(`<
  ~@16 A@24 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@26 D ~@24 B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2
  B@2 C@2 B@2 C@2 B@2 C@2 B@2 C@2 B@16 ~@3
>`.pickRestart({
  A: "f#1 f#1@3 ~ f#1@3 c#2 e2@2 c#2 e2@3 ~", B: "f#1 f#1@3 ~ f#1@3 c#2 e2 ~ c#2 e2@3 ~",
  C: "b1 b1@3 ~ b1@3 c#2 e2 ~ c#2 e2@3 ~", D: "f#1 f#1@3 ~ f#1@3 ~@8",
})).s("gm_electric_bass_pick").gain(0.5)

// bass · electric bass pick · "Base Line  (GS)" · soft notes
const bass_soft = note(`<
  ~@16 A@26 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@27 ~@24 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@16 ~@3
>`.pickRestart({
  A: "~@4 f#1 ~@11", B: "~@4 b1 ~@11",
})).s("gm_electric_bass_pick").gain(0.3)

// other · piano · "LeftCyclic (GS)"
const piano = note(`<
  ~@8 A@2 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A ~@102
>`.pickRestart({
  A: "f#3@2 c#4 f#3 e4 f#3 ~ f#3@3 c#4 f#3 e4 f#3 f#4@2", B: "f#3@2 c#4 f#3 e4 f#3@2 f#3@3 c#4 f#3 e4 f#3 f#4@2",
})).s("gm_piano").gain(0.4)

// other · accordion · "LeftCyclic (GS)"
const accordion = note("<~@72 [f#3@2 c#4 f#3 e4 f#3 ~ f#3@3 c#4 f#3 e4 f#3 f#4@2]!53 ~@49>")
  .s("gm_accordion").gain(0.19)

// other · lead 2 sawtooth · "LeftCyclic (GS)"
const lead_2_sawtooth = note(`<
  ~@125 A B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A ~@2
>`.pickRestart({
  A: "f#3@2 c#4 f#3 e4 f#3 ~ f#3@3 c#4 f#3 e4 f#3 f#4@2", B: "f#3@2 c#4 f#3 e4 f#3@2 f#3@3 c#4 f#3 e4 f#3 f#4@2",
})).s("gm_lead_2_sawtooth").gain(0.19)

// other · lead 2 sawtooth · "RightCyclic(GS)"
const lead_2_sawtooth_2 = note(`<
  ~@8
  [~@4 f#3 c#4 f#3 e4 f#3 ~ f#3@3 c#4 f#4 e4]
  [f#3 f#4@2 f#3@2 c#4 f#3 e4 f#3 ~ f#3@3 c#4 f#4 e4]!63
  ~@53
  [f#3 f#4@2 f#3@2 c#4 f#3 e4 f#3 ~ f#3@3 c#4 f#4 e4]!47
  ~@2
>`).s("gm_lead_2_sawtooth").gain(0.24).pan(1)

// other · accordion · "RightCyclic(GS)"
const accordion_2 = note("<~@72 [f#3 f#4@2 f#3@2 c#4 f#3 e4 f#3 ~ f#3@3 c#4 f#4 e4]!53 ~@49>")
  .s("gm_accordion").gain(0.19).pan(1)

// chords · piano · "Piano Cord (GS)"
const piano_2 = note("<~@56 A@15 B@8 ~@60 C@8 D@8 ~@19>".pickRestart({
  A: "[a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 [g#4,g#5]@2", // A F# A B G#
  B: "[[a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 [g#4,g#5]@114]/8", // A F# A B G#
  C: "[[a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 [g#4,g#5]@2, ~@7 [g#4,g#5]@8 [g#4,g#5]@8 [g#4,g#5]@8 [g#4,g#5]@8 [g#4,g#5]@8 [g#4,g#5]@8 [g#4,g#5]@8 ~]/8", // A F# A B A F# A B …
  D: "[[a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2 [a4,a5]@3 [a4,a5]@3 [f#4,f#5]@3 [a4,a5]@3 [b4,b5]@2 ~@2, ~@7 [g#4,g#5]@8 [g#4,g#5]@8 [g#4,g#5]@8 [g#4,g#5]@8 [g#4,g#5]@8 [g#4,g#5]@8 [g#4,g#5]@9]/8", // A F# A B A F# A B …
})).s("gm_piano").gain(0.54).pan(0.7)

// chords · pad bowed · "Piano Cord (GS)"
const pad_bowed = note(`<
  ~@72
  [g#4@2 f#4@3 g#4@2 f#4 g#4@4 f#4@2 g#4@2, a#3 b3]!19
  [g#4@2 f#4@3 g#4@2 f#4 g#4@4 f#4@2 a3@2, a#3 b3]
  ~@82
>`).s("gm_pad_bowed").gain(0.3)

// other · orchestral harp · "Harp       (GS)"
const orchestral_harp = note(`<
  ~@5 A B@2 ~@3 C D E@2 F@2 ~ G H I J K L ~@40 M N M O@3 P Q ~@12 R S T U V W X ~ Y Z ~@2 Y Z ~@23 AA ~@52
>`.pickRestart({
  A: "~ f#3@2 c#4@2 d#4@3 e4@4 f#4@4", B: "[b3@2 ~ e4@6 ~@2 b3@2 e4@2 d#4@3 b3@3 d#4@8 ~@3]/2", C: "~@14 c#4 ~",
  D: "d#4 e4@14 ~", E: "[~@7 e4@8 ~]/2", F: "[~@8 c#4@2 ~ d#4@4 c#4@5 ~@12]/2", G: "d#4@9 ~@6 e4", H: "d#4@4 ~@11 e4",
  I: "~@13 e4!3", J: "e4 d#4@2 ~@3 e4!3 e4@3 f#4@2 d#4 ~", K: "c#4@2 ~@4 d#4!2 d#4@2 c#4@2 c#4@4",
  L: "e4@3 c#4@6 c#4!7", M: "f#3!12 g#3 ~ g#3 ~", N: "f#3 ~ a3!6 a3@4 f#3!2 e3!2",
  O: "[g#3!8 f#3@3 ~@3 e4 e4@2 e4!7 d#4!2 c#4!2 d#4 ~ e4 e4@2 e4!7 f#4 c#4 ~ c#4 d#4!2 e4!2]/3",
  P: "e4!8 d#4!2 c#4!2 d#4!2 e4!2", Q: "e4!10 d#4!2 c#4@3 ~", R: "~ e4!7 d#4 d#4@2 c#4@2 c#4!2 e4",
  S: "e4@4 e4 e4@3 d#4 ~@2 d#4 ~@2 c#4 ~", T: "~ e4!7 d#4 d#4@2 c#4 c#4@2 c#4!2",
  U: "e4@2 e4@2 e4@4 d#4 ~@2 d#4 ~@2 c#4 ~", V: "~@7 e4@3 e4!2 d#4@2 c#4@2", W: "a#3 c#4 ~@6",
  X: "e4 ~ e4!7 d#4 ~ c#4 ~ c#4 b3 ~", Y: "c#4 ~ e4!6 d#4!5 e4!2 ~", Z: "e4 f#4 ~ e4 d#4 ~@11",
  AA: "c#4 ~@2 d#4 ~ d#4 e4 ~ f#4 ~@2 c#4 ~ c#4 d#4 ~",
})).s("gm_orchestral_harp").gain(0.36).pan(0.3)

// other · orchestral harp · "Harp       (GS)" · soft notes
const orchestral_harp_soft = note("<~@15 A ~@4 B C ~@67 D ~@32 E ~@51>".pickRestart({
  A: "~@10 c#4 ~@5", B: "~@8 e4!5 ~@3", C: "~@4 e4!2 ~@10", D: "~@15 c#4",
  E: "c#4 ~@2 d#4 ~ d#4 e4 ~ f#4 ~@2 c#4 ~ c#4 d#4 ~",
})).s("gm_orchestral_harp").gain(0.18).pan(0.3)

// chords · piano · "Pad        (GS)"
const piano_3 = note("<A@8 B@8 ~@158>".pickRestart({
  A: "[~@5 e4@2 ~@6 e4@2 ~@6 e4@2 ~@6 e4@2 ~@6 e4@2 ~@6 e4@2 ~@6 e4@2 ~@6 e4@2 e4, a#4, f#4 f#4 f#4 f#4 f#4 f#4 f#4 f#4, ~ e4@2 e4@2 ~@2 e4@2 e4@2 e4@2 ~@2 e4@2 e4@2 e4@2 ~@2 e4@2 e4@2 e4@2 ~@2 e4@2 e4 d#4 e4 d#4@2 ~ e4@2 e4 d#4 e4@2 ~@2 e4@2 e4@2 e4@2 ~@2 e4@2 e4@2 e4@2 ~@3, ~ d#4!2 ~@2 d#4!2 ~@2 d#4!2 ~@2 d#4!2 ~ d#3@6 d#4 ~@2 d#4!2 ~@2 d#4!2 ~]/8",
  B: "[~@5 e4@2 ~@6 e4@2 ~@6 e4@2 ~@6 e4@2 ~@6 e4@2 ~@6 e4@2 ~@6 e4@2 ~@6 e4@2 e4, f#4 f#4 f#4 f#4 f#4 f#4 f#4 f#4, ~ e4@2 e4@2 ~@2 e4@2 e4@2 e4@2 ~@2 e4@2 e4@2 e4@2 ~@2 e4@2 e4@2 e4@2 ~@2 e4@2 e4@2 e4@2 ~@2 e4@2 e4@2 e4@2 ~@2 e4@2 e4@2 e4@2 ~@2 e4@2 e4@2 e4@2 ~@3, ~ d#4!2 ~@2 d#4!2 ~@2 d#4!2 ~@2 d#4!2 ~@2 d#4!2 ~@2 d#4!2 ~@2 d#4!2 ~@2 d#4!2 ~]/8",
})).s("gm_piano").gain(0.3)

// chords · pad sweep · "Pad        (GS)"
const pad_sweep = note(`<
  ~@48 A@2 B@2 C@2 B@2 A@2 B@2 C@2 B@2 D@2 B@2 C@2 E@8 ~@47 F@4 G@4 F@4 G@4 F@4 G@4 H@6 ~@19
>`.pickRestart({
  A: "[f#4,c#5]/2", B: "[f#4,b4,d#5]/2", C: "[a4,c#5,e5]/2", D: "[f#4,a4,c#5]/2", E: "[f#4,b4,d#5]/8",
  F: "[~ [a4,c#5,e5], [f#4,b4,d#5]]/4", G: "[f#4 [f#4,c#5], [b4,d#5]]/4", H: "[~ [a4,c#5,e5] ~, [f#4,b4,d#5]]/6",
})).s("gm_pad_sweep").gain(0.32).pan(0.7)

// chords · pad sweep · "Pad        (GS)" · soft notes
const pad_sweep_soft = note("<~@48 A@2 ~@6 A@2 ~@73 A@2 ~@6 A@2 ~@6 A@2 ~@25>".pickRestart({
  A: "a4/2",
})).s("gm_pad_sweep").gain(0.04).pan(0.7)

// chords · pad warm · "Pad        (GS)"
const pad_warm = note("<~@72 A@2 B@2 C@2 D ~@95>".pickRestart({
  A: "[f#5@11 e5@5 d#5@16, f#4]/2", B: "[~@7 f#4@9, d#5, b4@3 ~]/2", C: "[[e4,e5]@3 [d#4,d#5]]/2", D: "[b3,d#5]",
})).s("gm_pad_warm").gain(0.26).pan(0.7)

// chords · lead 2 sawtooth · "Pad        (GS)"
const lead_2_sawtooth_3 = note("<~@109 A@2 B@2 A@2 ~@59>".pickRestart({
  A: "[[b3,d#4,d#5]@29 ~@3]/2", B: "[[c#4,e4,e5]@29 ~@3]/2",
})).s("gm_lead_2_sawtooth").gain(0.11).pan(0.7)

// chords · piano · "Piano      (GS)"
const piano_4 = note("<~@39 A@4 B@7 C D@8 E@7 F@6 ~@52 G C D@8 E@7 F@6 ~ H@8 ~@18>".pickRestart({
  A: "[~@22 b4 ~@3 a4@6, ~@5 a4@3 a4@15 a4@3 ~@6, ~@13 f#4@32 ~@2 b4@17]/4",
  B: "[~@10 a4@2 ~@33 b4@3 ~@62 a4@2, ~@6 a4@16 a4@16 a4@2 a4@15 ~, ~@13 b4@32 ~@3 b4@32 ~@28 b4@4, ~ c#5@2 ~@4, ~@21 f#4@16 ~@2 f#4@16 ~]/7",
  C: "~@3 a4@5, b4",
  D: "[~@5 a4 ~@15 f#4 ~@4 a4@12 ~@16 b4 ~@3 a4@6, ~@6 a4@16 a4@4 ~@12 a4@2 a4@15 a4@3 ~@6, ~@14 b4@31 f#4@2 f#4@31 f#4@32 ~@18, ~ c#5@2 ~@5, ~@46 b4@2 b4@32 ~@31 b4@17]/8",
  E: "[~@10 a4 ~@34 b4@3 ~@62 a4@2, ~@6 a4@16 a4@16 a4@2 a4@15 ~, ~@13 b4@32 ~@3 b4@32 ~@28 b4@4, ~ c#5@2 ~@4, ~@21 f#4@16 ~@2 f#4@16 ~]/7",
  F: "[~@4 a4@22 a4@2 ~@33 b4@3 b4@32, b4@7 a4@8 a4@8 ~, ~@29 b4@32 ~@35, ~ c#5 ~, ~@29 f#4@16 ~@3]/6",
  G: "~@7 a4, ~@3 b4",
  H: "[~@11 a4@10 a4 ~@15 f#4 ~@4 a4@16 ~@6, ~@12 b4@4 b4@30 b4@31 f#4@2 f#4@32 ~@17, ~@7 a4@4 ~@11 a4@16 a4@4 ~@22, ~@3 c#5@2 ~@3, ~@39 b4 b4@16 ~@8]/8",
})).s("gm_piano").gain(0.72)

// chords · piano · "Piano      (GS)" · soft notes
const piano_soft = note("<~@43 A@5 ~@126>".pickRestart({
  A: "[~@10 a5@2 ~@33 b5@3 b5@32, ~@3 a5@8 a5@8 ~, ~@13 b5@32 ~@35, ~ c#6@2 ~@2, ~@21 f#5@16 ~@3]/5",
})).s("gm_piano").gain(0.4)

// chords · guitar harmonics · "WhisleEcho (GS)"
const guitar_harmonics = note("<~@32 A ~ A ~ B@2 C D ~@134>".pickRestart({
  A: "~@3 [f#3,a#3]@2 ~ [e3,g#3]@2 ~ [e3,g#3]@2 ~@5", // F# E
  B: "[~@3 [f#3,a#3]@2 ~ [e3,g#3]@2 ~@3 [g#3,b3] [f#3,a#3]@2 [g#3,b3] [f#3,a#3]@2 [g#3,b3] [f#3,a#3]@2 ~@9 [d#3,f#3]@2 [f#3,a3]]/2", // F# E G#m F# G#m F# G#m F# …
  C: "[e3,g#3]@2 ~ [f#3,a#3]@2 ~ [e3,g#3]@2 ~ [e3,g#3]@2 ~@4 [g#3,b3]", // E F# E G#m
  D: "[f#3,a3]@2 [g#3,b3] [f#3,a3]@2 [g#3,b3] ~@10", // F#m G#m F#m G#m
})).s("gm_guitar_harmonics").gain(0.06).pan(0.2)

// chords · guitar harmonics · "WhisleEcho (GS)" · soft notes · G#m F# E F#m G#m F#m
const guitar_harmonics_soft = note(`<
  ~@37
  [~@4 [g#3,b3] [f#3,a#3]@2 ~@9]
  [~@6 [e3,g#3] ~]
  [~@6 [f#3,a3]@2 [g#3,b3] [f#3,a3]@2 ~@5]
  ~@134
>`).s("gm_guitar_harmonics").gain(0.03).pan(0.2)

// chords · guitar harmonics · "Whisle     (GS)"
const guitar_harmonics_2 = note("<~@32 A ~ A ~ B C D ~@57 E F@14 ~@44 F@16 ~@3>".pickRestart({
  A: "[f#3,a#3]@2 ~ [e3,g#3]@2 ~@11", B: "[f#3,a#3]@2 ~ [e3,g#3]@2 ~@3 [g#3,b3] [f#3,a#3]@2 ~@5",
  C: "~@10 [d#3,f#3]@2 [f#3,a3] [e3,g#3]@2 ~", D: "[f#3,a#3]@2 ~ [e3,g#3]@2 ~@7 [g#3,b3] [f#3,a3]@2 ~",
  E: "~@4 e3@2 f#3@2 f#3@3 ~ f#3@3 ~", F: "f#3@4 e3@2 f#3@2 f#3@3 ~ f#3@3 ~",
})).s("gm_guitar_harmonics").gain(0.14).pan(0.9)

// chords · guitar harmonics · "Whisle     (GS)" · soft notes
const guitar_harmonics_soft_2 = note(`<
  ~@96
  [~@4 g#3@2 a#3@2 a#3@3 ~ a#3@3 ~]
  [a#3@4 g#3@2 a#3@2 a#3@3 ~ a#3@3 ~]!14
  ~@44
  [a#3@4 g#3@2 a#3@2 a#3@3 ~ a#3@3 ~]!16
  ~@3
>`).s("gm_guitar_harmonics").gain(0.05).pan(0.9)

// other · fretless bass · "JingleBell (GS)"
const fretless_bass = note("<~@20 [~ a#6@2 ~] [~ a#6@4 ~@3] [a#6@5 ~@7 a#6@4] [~ a#6] ~@150>")
  .s("gm_lead_8_bass_lead").gain(0.3)

// chords · lead 2 sawtooth · "JingleBell (GS)"
const lead_2_sawtooth_4 = note("<~@12 A@2 B@2 ~@34 C@2 D@2 E@2 ~@2 C@2 D@2 E@2 F@2 E@2 D@2 ~@104>".pickRestart({
  A: "[~@5 a#5@4 ~@7, ~@9 c#6@9 ~@14]/2", B: "[~@3 e6@2 ~@3]/2", C: "[d#4,f#4,b4]/2", D: "[a4,c#5,e5]/2",
  E: "[f#4,b4,d#5]/2", F: "[f#4,a4,c#5]/2",
})).s("gm_lead_2_sawtooth").gain(0.25).pan(0.2)

// other · blown bottle · "SE         (GS)"
const blown_bottle = note("<~@17 [~@7 g5] [g5 ~@7] ~@155>").s("gm_blown_bottle").gain(0.37)

// other · guitar harmonics · "SE         (GS)"
const guitar_harmonics_3 = note("<~@162 A B C A B C A B D E@2 D>".pickRestart({
  A: "~@15 [f#1,f#2]", B: "[f#1,f#2]@2 [c#2,c#3] [f#1,f#2]@5 ~@8", C: "~@7 [f#1,f#2] [f#1,f#2]@2 [c#2,c#3] [f#1,f#2]@5",
  D: "~@6 [f#1,f#2] [f#1,f#2]@2 [c#2,c#3] [f#1,f#2]@5 ~", E: "[~@14 [f#1,f#2] [f#1,f#2]@2 [c#2,c#3] [f#1,f#2]@5 ~@9]/2",
})).s("gm_guitar_harmonics").gain(0.32)

// other · piano · "Piano Echo (GS)"
// … 75 more lines

More by William Orbit