Strudelify

Guitar Twist

The Ventures

KeyB♭ majorTempo195 bpm
0:00/0:00
// Guitar Twist — The Ventures
// 195.2 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 2 "P2-Grand Piano" named as a piano, played on piano (its acoustic guitar steel patch is not one); ch 3 "P3-Grand Piano" named as a piano, played on piano (its fretless bass patch is not one)
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(195.2/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 · "P1-Jazz Man"
const piano = note(`<
  A@12 B@2 A@2 C@2 D E A@4 B@2 A@2 C@2 F@2 G H I J K L M N G@2 O@2 P@2 Q R S T U V W X Y Z@3 AA AB AC@2 AD@2 AE@2 AF AG
  C@12 A@2 C@2 AH@2 AI@10
>`.pickRestart({
  A: "[~@2 f3@2 ab3@2 bb3 ~@2 f3@2 f3 ab3!2 bb3!2, bb2@7 bb2@9]/2",
  B: "[~@2 bb3@2 db4@2 eb4 ~@2 bb3@2 bb3 db4!2 eb4!2, eb3@7 eb3@9]/2",
  C: "[~@2 c3@2 eb3@2 f3 ~@2 c3@2 c3 eb3!2 f3!2, f2@7 f2@9]/2", D: "~ f3 ab3 bb3, bb2", E: "~@2 f3@2 ab3!2 bb3@2, bb2",
  F: "[~@2 f3@2 ab3@2 bb3 bb2@2 f3@2 f3!5, bb2@7 ~@9]/2", G: "f4@2 bb4 f4@2 bb4 f4 bb4",
  H: "f4@4 db4@2 bb3@5 ~ d4@2 eb4@2", I: "f4!4", J: "f4@2 eb4@2 db4@2 bb3@5 ~ [g4,db5]@4", K: "bb4@2 f4@2 bb4 f4@2 bb4",
  L: "eb4@2 db4 bb3@2 [f4,bb4]!3", M: "[f4,bb4]!3 eb4 db4 bb3 db4 eb4", N: "f4 eb4 db4 bb3@2 db4@2 ~",
  O: "e4@2 a4 e4@2 a4 e4 a4", P: "eb4@2 ab4 eb4@2 ab4 eb4 ab4", Q: "d4@2 g4 d4@2 g4 d4@2",
  R: "~ [bb3,db4,gb4]!3 ~ [a3,c4,f4]!3", S: "[f4,bb4] ~ [f4,bb4] [f4,bb4]@2 [f4,bb4]!3", T: "[g3,c4]@2 [f4,bb4]!5 ~",
  U: "~@3 [a4,bb4] bb4!4", V: "[f4,bb4] bb4!2 ~ c5 bb4!3, ~@3 bb4@2 ~@3", W: "bb4 ~ bb3 [g3,bb3] c4 [g3,bb3] bb3 db4",
  X: "bb3 f4 bb3 db4 bb3 g3 bb3 [g3,bb3]", Y: "d4@2 d4!2 d4@2 d4!2",
  Z: "[g4@2 g4 g4@2 eb4 d4 eb4@2 f4!2 [eb4,f4]!2 f4!2 db4@2 ~ bb3 g3 bb3 db4 c4@2]/3", // Ebsus2
  AA: "[f3,bb3]@3 f3 ab3@2 [f3,bb3]@3 f3 ab3@2 [f3,bb3]@2 ab3@2", // Bb5
  AB: "[f3,bb3]@3 f3 ab3@2 [f3,bb3]@4 [f3,bb3]@2 [f3,bb3]@2 ~@2", // Bb5
  AC: "[d3,f3,bb3]@2 [d3,f3,bb3]!2 [d3,f3,bb3]@2 [d3,f3,bb3]!2", // Bb
  AD: "[eb3,gb3,b3]@2 [eb3,gb3,b3]!2 [eb3,gb3,b3]@2 [eb3,gb3,b3]!2", // B
  AE: "[e3,g3,c4]@2 [e3,g3,c4]!2 [e3,g3,c4]@2 [e3,g3,c4]!2", AF: "[c3,e3,g3]!8", AG: "[c3,e3,g3]!7 ~",
  AH: "[~@2 g3@2 bb3@2 c4 ~@2 g3@2 g3 bb3!2 c4!2, c3@7 c3@9]/2",
  AI: "[~@2 c3@2 eb3@2 f3 ~@2 c3@2 c3 eb3!2 f3 ~, f2@7 f2@9]/2",
})).s("gm_piano").gain(0.41)

// other · electric guitar clean · "P4-Finger Dark"
const electric_guitar_clean = note("<~@54 [f3 ~ f3!3 ~ f3!2] ~ [~@7 f4] ~@39>").s("gm_electric_guitar_clean").gain(0.42)

// chords · piano · "P2-Grand Piano"
const piano_2 = note(`<
  ~@8 A B A C D E A C F G A C A B A C D E A C F G A H I J K J K J K J L@2 M@2 N@2 O P Q@4 R@2 Q@2 S@2 Q@2 L@2 T@2 U@2 V
  W ~@7 X Y Z AA Z AB L AA Z AC AD AA Z AA Z AA Z AA Z AA Z
>`.pickRestart({
  A: "~@2 [bb3,d4,f4] [bb3,d4,f4]@2 [bb3,d4,f4] [bb3,d4,f4]@2", B: "~@3 [bb3,d4,f4]@2 [bb3,d4,f4]!3",
  C: "[bb3,d4,f4] [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4]!3", // Bb
  D: "~@2 [g3,bb3,eb4] [g3,bb3,eb4]@2 [g3,bb3,eb4] [g3,bb3,eb4]@2", // Eb
  E: "[g3,bb3,eb4] [g3,bb3,eb4]@2 [g3,bb3,eb4]@2 [g3,bb3,eb4]!3", // Eb
  F: "~@2 [eb3,a3,c4,f4] [eb3,a3,c4,f4]@2 [eb3,a3,c4,f4] [eb3,a3,c4,f4]@2", // F7
  G: "[eb3,a3,c4,f4] [eb3,a3,c4,f4]@2 [eb3,a3,c4,f4]@2 [eb3,a3,c4,f4]!3", H: "~ [eb3,a3,c4,f4]@2 [eb3,a3,c4,f4]!5",
  I: "[bb3,d4,f4]!3 ~", J: "~ [eb3,g3,bb3,eb4] [f3,bb3,d4,f4] ~", K: "[bb3,d4,f4]@2 [bb3,d4,f4]@2 ~ [bb3,d4,f4]@2 ~",
  L: "[f3,bb3,d4,f4]@3 [f3,bb3,d4,f4]@3 [f3,bb3,d4,f4]@2", M: "[e3,a3,db4,e4]@3 [e3,a3,db4,e4]@3 [e3,a3,db4,e4]@2",
  N: "[eb3,ab3,c4,eb4]@3 [eb3,ab3,c4,eb4]@3 [eb3,ab3,c4,eb4]@2", O: "[d3,g3,b3,d4]@3 [d3,g3,b3,d4]@3 [d3,g3,b3,d4]@2",
  P: "[db3,gb3,bb3,db4,gb4] [c3,f3,a3,c4,f4]", Q: "[f3,bb3,d4,f4]!4", R: "[eb3,g3,bb3,eb4]!4", S: "[eb3,a3,c4,f4]!4",
  T: "[gb3,b3,eb4,gb4]@3 [gb3,b3,eb4,gb4]@3 [gb3,b3,eb4,gb4]@2", U: "[g3,c4,e4,g4]@3 [g3,c4,e4,g4]@3 [g3,c4,e4,g4]@2",
  V: "[g3,c4,e4,g4]!8", W: "[g3,c4,e4,g4]!7 ~", X: "~@6 [f3,a3,c4,f4]!2",
  Y: "[f3,a3,c4,f4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4]@2 [f3,a3,c4,f4] [f3,a3,c4,f4]@2", // F
  Z: "[f3,a3,c4,f4]@3 [f3,a3,c4,f4]@3 [f3,a3,c4,f4]@2", // F
  AA: "~@2 [f3,a3,c4,f4] [f3,a3,c4,f4]@2 [f3,a3,c4,f4] [f3,a3,c4,f4]@2", // F
  AB: "~@2 [f3,bb3,d4,f4] [f3,bb3,d4,f4]@2 [f3,bb3,d4,f4] [f3,bb3,d4,f4]@2", // Bb
  AC: "~@2 [e3,g3,c4,e4] [e3,g3,c4,e4]@2 [e3,g3,c4,e4] [e3,g3,c4,e4]@2", // C
  AD: "[e3,g3,c4,e4]@3 [e3,g3,c4,e4]@3 [e3,g3,c4,e4]@2", // C
})).s("gm_piano").gain(0.22).pan(0.2)

// bass · piano · "P3-Grand Piano"
const bass = note(`<
  ~@3 A B@5 C D E F G H I J K L M B C D E F G H I J K L N O P Q P Q P Q P R H S@2 T@2 U V W X Y Z AA AB AC AD AE M AF AG
  H@2 AH@2 AI AJ AK@2 AL ~@2 AM AN@6 AO AP AQ@2 AO@2 AI AR AO AS AO AS AO AS AO AS AO AS
>`.pickRestart({
  A: "~@3 c2", B: "bb1 f2 ab2 bb2", C: "bb1@2 f2 ab2!3 g2 f2", D: "bb1!2 d2!2 f2!2 g2@2", E: "bb1!2 d2!2 f2!2 d2 f2",
  F: "eb2!2 g2!2 bb2!2 c3 bb2", G: "eb2!2 c3!2 bb2!2 g2 f2", H: "bb1!2 d2!2 f2!2 g2 f2", I: "bb1!2 d2!2 f2!2 g2 d2",
  J: "f2!2 a2!2 c3!2 a2 c3", K: "eb2!2 g2!2 f2!2 d2 c2", L: "bb1!2 d2!2 f2!2 g2!2", M: "f2!5 eb2 d2 c2", N: "f2!8",
  O: "bb1!3 ~", P: "~ eb2 bb1 ~", Q: "bb1@2 bb1@2 ~ bb1@2 ~", R: "bb1@5 ~ bb1@4 bb1@2 bb1@4",
  S: "a1!2 db2!2 e2!2 gb2 e2", T: "ab1!2 c2!2 eb2!2 f2 eb2", U: "g1!3 ~", V: "gb1@2 gb1@2 f1@2 g1 a1",
  W: "bb1!2 d2 eb2 f2!3 g2", X: "bb2!2 d3!2 f3!2 g3!2", Y: "bb3!4 g3 f3 d3 c3", Z: "bb2!2 ab2!2 f2!2 d2!2",
  AA: "eb2!2 g2!2 bb2!4", AB: "eb3!2 db3!2 bb2!2 g2 bb2", AC: "a2 bb2!3 db3 d3 f3!2", AD: "bb2!4 g2 f2 d2 f2",
  AE: "f2!2 a2!2 c3!2 d3 c3", AF: "bb1!8", AG: "f1@2 f1 f1@3 f1@2", AH: "b1!2 eb2!2 gb2!2 ab2 gb2",
  AI: "c2!2 e2!2 g2!2 a2 g2", AJ: "c2!2 e2!2 g2!3 ~", AK: "c2!8", AL: "f1 ~@3", AM: "~@3 g1", AN: "f1 c2 eb2 f2",
  AO: "f1!2 a1!2 c2!2 d2 c2", AP: "f1!2 a1!2 c2!2 a1 c2", AQ: "bb1!3 d2 f2!2 g2 f2", AR: "c2!3 c2@2 bb1 a1 g1",
  AS: "c2!5 bb1 a1 g1",
})).s("gm_piano").gain(0.35).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@4 [x!2]!15 [x!4] [x!2]!11 [x!8] [x!2]!36 ~@4 [x!2]!24>").gain(0.25).pan(0.9)

// drums · snare
const snare = s("sd").struct("<~@3 A B@15 C B@11 D B@34 D@2 ~@3 E F B@23>".pickRestart({
  A: "~@3 x", B: "~@2 x!2 ~@2 x!2", C: "x!5 ~@3 x!5 ~ x ~", D: "x!8", E: "~@2 x!6", F: "x ~ x!2 ~@2 x!2",
})).gain(0.25).pan(0.9)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [~@5 x ~ x] ~@92>").gain(0.25).pan(0.9)

// drums · ride bell
const ride_bell = s("rd").struct("<~@8 [x!8]!60 ~@4 [x!8]!24>").gain(0.19).pan(0.9)

stack(piano, electric_guitar_clean, piano_2, bass, kick, snare, mid_tom, ride_bell)

More by The Ventures