Strudelify

Gringo

The Ventures

KeyA majorTempo170 bpm
0:00/0:00
// Gringo — The Ventures
// 170 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Mute Rhythm.
setcpm(170/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 · electric guitar clean · "Lead"
const electric_guitar_clean = note(`<
  ~@4 A B C@2 D B E F G H I F J@2 K L D B C@2 D B E F M N I F O@2 P Q R S T U V W X Y Z AA AB AC AD AE AF@2 AG AH AI AJ
  A B C@2 D B E F M N I F AK@2 AL AM AN AO AP AM AQ AR AS AM AT AU AV AW AX AY AZ BA D B BB@2 D B E BC BD@2 I BE BF@2 BG
  BH
>`.pickRestart({
  A: "~ [c#4,a4]@3 [c4,g#4]@2 [c#4,a4]@2", B: "[e4,g#4]@3 [d4,f#4]@3 [c#4,e4]@2",
  C: "[[e3,a3,c#4]@3 [e3,a3,c#4]@7 e2@2 f#2@2 g#2@2]/2", D: "~ [c#4,a4]@3 [c4,g#4]@2 [c#4,a4]@2, a2 ~",
  E: "~ d4@15, [e3,g#3,b3]", F: "~@2 b3 c#4", G: "d4 e4 b3 c#4", H: "d4 e4 b3 e4", I: "[f#4,a4]@3 [e4,g#4]@5",
  J: "[d4@2 e4@2 b3@2 c#4 d4@2 [f#4,a4]@3 [e4,g#4]@2 [d4,f#4]@2]/2", K: "[c#4,e4]", L: "~ e2 f#2 g#2",
  M: "d4@4 e4@3 ~ b3@4 c#4@4", N: "d4@4 e4@3 ~ b3@4 e4@4",
  O: "[d4@4 e4@3 ~ b3@4 c#4@2 d4@4 [e4,g#4]@6 [d4,f#4]@4 [d4,e4,g#4]@4]/2", P: "[c#4,e4,a4]!3 [c#4,e4,a4]@5",
  Q: "[c4,e4,g4,c5]!3 [c4,e4,g4,c5]@5", R: "[a3,c4,f4]!3 [a3,c4,f4]@5", S: "[d4,f4,a#4]!3 [d4,f4,a#4]@5",
  T: "~ g4@3 f4 d#4 c4 a#3", U: "d#4 d#3@2 f#3 g#3 a3 g#3 f#3", V: "d#3 ~ [a3,d#4]@2 [a3,d#4] a#3 [g#3,a#3] g3",
  W: "d#3@3 ~@7 [d4,d#4]@2 d#4@2 [d4,d#4]@2", X: "c4@2 [c4,d#4]!2 a#3@2 [a#3,d4]!2",
  Y: "a3@3 [g3,a#3] [g3,a#3]@2 [g#3,a#3]!2", Z: "a#3!2 [g#3,a#3]@2 g3@4, g#3 ~@3", AA: "[d3,f3]@4 ~ [d3,f3]@2 [d#3,g3]",
  AB: "[f3,g#3]@3 ~ [f3,g#3]@3 ~ [f3,g#3]@3 ~ [f3,g#3]@3 ~", // Fm
  AC: "[f3,g#3]@3 ~ [f3,g#3]@2 [f3,g#3]@2 [f3,g#3]@2 [f3,g#3]@2 [g#3,c4]@2 [g#3,c4]@2", // Fm G#
  AD: "[c4,d#4]@2 [c4,d#4]!2 c4@2 [a#3,d4]!2", AE: "[a#3,d4]@4 ~ [d3,f3]@2 [d#3,g3]",
  AF: "[[f3,g#3]@2 [a#3,d4]@2 [d3,f3]@2 [d#3,g3] [f3,g#3]@2 [a#3,d4]@3 [g#3,c4]@2 [a#3,d4]@2]/2", // Fm A# Dm D# Fm A# G# A#
  AG: "[g3,a#3,d#4]!3 [g3,a#3,d#4]@5", AH: "[c4,d#4,g#4]!3 [c4,d#4,g#4]@5", AI: "[d#4,f#4,b4]!3 [d#4,f#4,b4]@5",
  AJ: "[b3,e4,g#4]!3 [b3,e4,g#4]@5", AK: "[d4@4 e4@3 ~ b3@4 c#4@2 d4@4 [e4,g#4]@6 [d4,f#4]@4 g#4@4]/2", AL: "[c#4,a4]",
  AM: "~ a3@3 d4@2 e4@2", AN: "a4@3 a4 a4@2 f4 a3", AO: "a4@2 a4 g4@2 f4 g4 f4", AP: "a4 e4@7",
  AQ: "a4@2 ~ f4 g4@2 f4@2", AR: "a4@2 [a4,d5] a4@2 f4 g4 f4", AS: "d#4",
  AT: "[d4,f#4] ~@2 [c#4,f4] [d4,f#4] [f4,g#4]@2 [f#4,a4]", AU: "~ [f#4,a4]@3 [e4,g4]@2 [d4,f#4]@2",
  AV: "[c#4,a4]@3 [c#4,e4]@5", AW: "~@3 a3 [b3,d4] [c#4,e4]@3",
  AX: "[f#4,a4]@3 ~@3 [f4,g#4]@2 [f#4,a4]@3 ~@3 [f4,g#4]@2", AY: "[e4,a4] [d#4,f#4]@3 [e4,g#4]@2 [f#4,a4]@2",
  AZ: "[g#4,b4]", BA: "~ e2@3 f#2@2 g#2@2", BB: "[~ c#4@5 ~ c#4@13 e2@4 f#2@4 g#2@4, [e3,a3]@3 [e3,a3]@7 ~@6]/2",
  BC: "~@5 [g#3,b3]@2 c#4", BD: "d4@2 e4 ~ b3@2 c#4@2", BE: "~@4 [g#3,b3]@3 c#4",
  BF: "[d4@4 e4@3 ~ b3@4 c#4@2 d4@4 [e4,g#4]@6 [d4,f#4]@4 [e4,g#4]@4]/2", BG: "[c#4,a4]!8",
  BH: "[c#4,a4] ~@2 [c#4,a4] ~@4", // F#m
})).s("gm_electric_guitar_clean").gain(0.48)

// chords · electric guitar clean · "2nd Lead"
const electric_guitar_clean_2 = note(`<
  ~@11 A B@2 ~ A C ~@10 A B@2 ~ A C ~@9 D E F ~@3 G ~@6 H I ~@6 A B@2 ~ A C ~@35
>`.pickRestart({
  A: "~ [e3,g#3]", B: "[e3,g#3,b3] [e3,g#3]", C: "[e3,g#3]!2", D: "d#4 ~ d4 ~", E: "c4@3 ~@5", F: "~ a#3",
  G: "~@2 d4 ~", H: "~@5 e2 f#2 g2", I: "a2 ~@7",
})).s("gm_electric_guitar_clean").gain(0.3)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@4 A@2 B C B C D E D F G H I J B K A@2 B C B C D E D F G H I J L M N O P Q P@4 R@4 S R@2 T U V W X A@2 B C B C D E D
  F G H I J L Y Z@2 A AA AB AC AD@2 AE@2 B C AF AG AH J A@6 AI@8 L AJ
>`.pickRestart({
  A: "a1!2 c#2!2 e2!2 f#2 e2", B: "a1!2 c#2!2 e2!2 f#2!2", C: "a2!2 f#2!2 e2!2 c#2!2", D: "e1!2 g#1!2 b1!2 c#2!2",
  E: "e2!2 c#2!2 b1!2 g#1!2", F: "e2!2 f#2!2 e2!2 c#2!2", G: "b1!2 c#2!2 e2!2 f#2!2", H: "g#2!2 a2!2 b2!2 g#2 f#2",
  I: "e2!2 c#2!2 a1!2 c#2!2", J: "e2!2 d2!2 c#2!2 b1!2", K: "a2!2 f#2!2 e2!2 c#2 b1", L: "a1!8", M: "c2!6 c2@2",
  N: "f2!6 f2@2", O: "a#1!4 c#2!2 d2!2", P: "d#2!2 g2!2 a#2!2 c3 a#2", Q: "d#2!2 g2!2 d#2!2 g2!2",
  R: "a#1!2 c#2 d2 f2!2 g2 f2", S: "a#2!2 g2!2 f2!2 d2!2", T: "a#2!2 g#2!2 g2!2 f2!2", U: "d#2!3 d#2@2 d#2 d#2@2",
  V: "g#2!3 g#2@2 g#2 g#2@2", W: "b1!3 b1@2 b1 b1@2", X: "e2!3 e2@2 e2 e2@2", Y: "a1!4 b1!2 c#2!2",
  Z: "d2!2 f2!2 a2!2 b2 a2", AA: "a1!2 c#2!2 e2!2 c#2!2", AB: "d2!2 f2!6", AC: "f2!2 g2!2 a2!2 g2 e2",
  AD: "a1!2 c#2!4 e2!2", AE: "d2!2 f#2!2 a2!2 b2 a2", AF: "b1!2 d#2!2 f#2!2 g#2!2", AG: "b2!2 a2!2 g#2!2 f#2!2",
  AH: "e2!8", AI: "e1!2 g#1!2 b1!2 c#2 b1", AJ: "a1 ~@2 a1 ~@4",
})).s("gm_fretless_bass").gain(0.32)

// chords · acoustic guitar steel · "Rhythm"
const acoustic_guitar_steel = note(`<
  ~@4 A@6 B@8 A C A@6 B@8 D E F G H@6 I@8 J K L M A@6 B@8 N O P@2 Q@2 P@2 Q O R@2 Q@2 S@2 T@2 A@6 B@8 Q U
>`.pickRestart({
  A: "[e3,a3,c#4,e4] [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]!3", // A
  B: "[b2,e3,g#3,b3,e4] [b2,e3,g#3,b3,e4]@2 [b2,e3,g#3,b3,e4]@2 [b2,e3,g#3,b3,e4]!3", // E
  C: "[e3,a3,c#4,e4]@3 [e3,a3,c#4,e4]@2 [e3,a3,c#4,e4]@3", D: "[e3,a3,c#4,e4]!3 [e3,a3,c#4,e4]@5",
  E: "[c3,e3,g3]!3 [c3,e3,g3]@5", F: "[d#3,a3,c4]!3 [d#3,a3,c4]@5", G: "[g#3,d4,f4]!3 [g#3,d4,f4]@5",
  H: "[g3,a#3,d#4] [g3,a#3,d#4]@2 [g3,a#3,d#4]@2 [g3,a#3,d#4]!3", // D#
  I: "[f3,a#3,d4] [f3,a#3,d4]@2 [f3,a#3,d4]@2 [f3,a#3,d4]!3", J: "[d#3,a#3,c#4,g4]!3 [d#3,a#3,c#4,g4]@5",
  K: "[d#3,g#3,c4,f#4]!3 [d#3,g#3,c4,f#4]@5", L: "[d#3,a3,b3,f#4]!3 [d#3,a3,b3,f#4]@5",
  M: "[d3,g#3,b3,e4]!3 [d3,g#3,b3,e4]@5", N: "[e3,a3,c#4,g4]!3 [e3,a3,c#4,g4]@2 [e3,a3,c#4,g4]!3",
  O: "[e3,a3,c#4,g4]!8", P: "[f3,a3,d4,f4]!8", Q: "[e3,a3,c#4,e4]!8", R: "[f#3,a3,d4,f#4]!8", S: "[d#3,a3,b3,f#4]!8",
  T: "[e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]!2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2 [e3,g#3,b3,e4]@2", // E
  U: "[e3,a3,c#4,e4] ~@2 [e3,a3,c#4,e4] ~@4", // A
})).s("gm_acoustic_guitar_steel").gain(0.14).pan(0.2)

// drums · kick
const kick = s("bd").struct("<[x!2]!3 [x!4] [x!2]!99 [x ~@2 x ~@4]>").gain(0.19).pan(0.9)

// drums · snare
const snare = s("sd").struct("<A@3 B A@14 C B A@14 D@2 E F G A@16 H I A@45 B J>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "x!16", C: "x!5 ~ x ~@9", D: "x ~ x ~ x ~ x ~@3 x!6", E: "x ~ x ~ x ~ x ~@2 x!7", F: "~@7 x",
  G: "x!3 ~ x ~ x ~@5 x ~@3", H: "~@2 x!2 ~ x!3", I: "x ~ x ~ x ~ x!10", J: "x ~@2 x ~@4",
})).gain(0.19).pan(0.9)

// drums · low tom
const low_tom = s("lt").struct("<~@37 [~@10 x!4 ~@2] ~@66>").gain(0.22).pan(0.9)

// drums · mid tom
const mid_tom = s("mt").struct("<~@18 [~@8 x!5 ~ x ~] ~@18 [x ~ x ~ x ~ x ~ x!2 ~@5 x] ~@66>").gain(0.19).pan(0.9)

// drums · ride
const ride = s("rd").struct("<[x!8]!103 x>").gain(0.19).pan(0.9)

stack(electric_guitar_clean, electric_guitar_clean_2, bass, acoustic_guitar_steel, kick, snare, low_tom, mid_tom, ride)

More by The Ventures