Strudelify

Vacation

The Go-Go's

KeyF majorTempo160 bpm
0:00/0:00
// Vacation — The Go-Go's
// 160 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 115 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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 · "Guitar"
const electric_guitar_clean = note(`<
  ~@3 A B@3 C D E F@2 D E F@2 E F E F E F E F D E F@2 D E F@2 E F E F E F G H F I J E F I E F@2 D F E F D F I K D F E F
  D F I L B@3 C D M I K D M I K C F I J E F I E F@2 D F E F D F I K D F E F D F I K D F E F D F I N O N P@2
>`.pickRestart({
  A: "~@15 [f2,c3,f3,a3,c4,f4]", B: "[f2,c3,f3,a3,c4,f4]@15 [f2,c3,f3,a3,c4,f4]", C: "[f2,c3,f3,a3,c4,f4]",
  D: "[f2,c3]!8", E: "[bb2,f3]!8", F: "[c3,g3]!8", G: "[bb2,f3]!4 [a2,e3]!4", H: "[g2,d3]!8", I: "[d3,a3]!8",
  J: "[d3,a3]!4 [c3,g3]!4", K: "[bb2,f3]!4 [c3,g3]!4", L: "[a2,d3,a3,d4,f4]@15 [f2,c3,f3,a3,c4,f4]",
  M: "[c3,g3]!4 [bb2,f3]!4", N: "~ [bb2,f3,bb3,d4] [bb2,f3,bb3,d4]@2 ~ [c3,g3,c4,e4] [c3,g3,c4,e4]@2",
  O: "[d3,a3,d4,f4]!3 [d3,a3,d4,f4]@2 [d3,a3,d4,f4] [d3,a3,d4,f4]@2", P: "[f2,c3,f3,a3,c4,f4]/2",
})).s("gm_electric_guitar_clean").gain(0.41)

// bass · electric bass pick · "electric bass"
const bass = note(`<
  ~@4 A@4 B C D@2 B C D@2 C D C D C D C D B C D@2 B C D@2 C D C D C D E F D G H C D G C D@2 B D C D B D G I B D C D B D
  G@2 A@4 B J G I B J G I A D G H C D G C D@2 B D C D B D G I B D C D B D G I B D C D B D G K L K M@2
>`.pickRestart({
  A: "f1", B: "f1!8", C: "bb1!8", D: "c2!8", E: "bb1!4 a1!4", F: "g1!8", G: "d2!8", H: "d2!4 c2!4", I: "bb1!4 c2!4",
  J: "c2!4 bb1!4", K: "~ bb1 bb1@2 ~ c2 c2@2", L: "d2!3 d2@2 d2 d2@2", M: "f1/2",
})).s("gm_electric_bass_pick").gain(0.36)

// chords · dulcimer · "Synth"
const dulcimer = note(`<
  A B C D E@2 F G ~ H I J ~ H I J ~ K L K M@2 N O ~ P I J ~ Q I J R S T U V@2 W X Y Z AA@2 AB AC AD@3 AE@2 AF@2 AG@4
  AE@2 AF@2 AH@3 AI E@2 F G A B AJ AK A B C AL AM Y Z AA@2 AB AC AD@3 AE@2 AF@2 AG@4 AE@2 AF@2 AN@2 AO@2 AE@2 AF@2 AP@3
  AQ AR AQ AS@2
>`.pickRestart({
  A: "[f4,a4]@3 [f4,bb4]@3 [f4,a4]@2", B: "[f4,g4]@3 [f4,a4]@3 [f4,bb4]@2", C: "[f4,a4]@3 [f4,a4]",
  D: "[d4,f4]@2 [d4,f4]@2 [e4,g4] [e4,g4]@3", E: "[[c4,f4]@2 f4!2 c4 f4@2 c4 f4@2 c4 f4@2 c4 f4@2, a4]/2",
  F: "[c4,f4]@2 f4 c4@2 f4 c4@2, a4", G: "[c4,f4]@2 c4 f4@5, a4", H: "[c4,f4]@2 [c4,f4] c4@2 c4 c4@2",
  I: "[c4,f4,g4] [c4,e4,g4]", J: "[c4,d4,g4] [c4,e4,g4]", K: "[f4,g4]@2 [c4,e4] g4", L: "[bb3,d4,f4] ~@3",
  M: "[[bb3,d4,f4]@2 ~@5 c4@2 ~@7]/2", N: "bb3!2", O: "bb3 c4", P: "[c4,f4]@3 c4@2 c4 c4@2", Q: "[c4,f4]!2 c4!2",
  R: "[bb3,d4] ~@3", S: "[c4,e4] ~ [c4,e4] g4", T: "[bb3,d4,f4]@2 ~@2 f4@2 f4!2", U: "[c4,f4,g4]@2 [c4,e4] g4",
  V: "[[bb3,d4,f4]@2 ~@5 e4@3 ~@6]/2", W: "f4 e4", X: "d4 ~", Y: "c4@6 d4 ~", Z: "d4@2 d4 d4@3 ~@2",
  AA: "[d4@2 d4@2 c4 c4@2 bb3@5 ~@4]/2", AB: "c4!3 ~", AC: "~ d4 ~@2", AD: "[d4@2 ~@2 d4@2 ~ e4@2 ~ e4@2 c4@12]/3",
  AE: "[~@2 a4@2 g4@2 f4 [c4,e4]@2 e4 [c4,e4] e4 [c4,f4]@2 [c4,e4,g4]@2, f4 ~@3]/2", // C F5 C
  AF: "[~@2 f4@2 f4@2 f4 ~@3 g4 a4@2 g4 f4@2, [bb3,d4] [c4,e4], ~@7 a4@3 ~@6]/2", // Bb C
  AG: "[~@2 a4@2 g4@2 f4 [c4,e4]@2 e4 [c4,e4]@2 f4 g4@2 [d4,f4]@2 ~ f4@2 f4@2 d4 f4@2 d4 f4 d4 f4@2 [e4,g4]@2, f4 ~@7]/4", // C Dm Em
  AH: "[~@2 a4@2 g4@2 f4 [c4,e4]@2 e4 [c4,e4]@2 f4 g4@2 [d4,f4]@2 [d4,f4,a4]@7, f4 ~@5]/3", AI: "[d4,f4,a4]",
  AJ: "[f4,a4]@3 [f4,g4]@3 f4@2", AK: "d4@3 e4@5", AL: "[bb3,d4] [c4,e4]", AM: "[c4,f4]",
  AN: "[~@2 a4@2 g4@2 f4 [c4,e4]@2 e4 [c4,e4]@2 f4 g4@2 [d4,f4], f4 ~@3]/2", // C Dm
  AO: "[[d4,f4] ~ f4 d4 f4@2 d4 f4@2 d4 f4 d4 f4@2 [e4,g4]@2]/2", // Dm Em
  AP: "[~@2 a4@2 g4@2 f4 [c4,e4]@2 e4 [c4,e4]@2 f4 g4@2 [d4,f4]@2 d4@6 ~, f4 ~@5]/3", // C Dm
  AQ: "~ [bb3,d4,f4] [bb3,d4,f4]@2 ~ [c4,e4,g4] [c4,e4,g4]@2", AR: "[d4,f4,a4]!3 [d4,f4,a4]@2 [d4,f4,a4] [d4,f4,a4]@2",
  AS: "[a3,c4,f4]/2", // F
})).s("gm_dulcimer").gain(0.46)

// drums · kick
const kick = s("bd").struct(`<
  A@8 B@15 C B@15 C B@8 C B@3 C B@7 C B@4 A@4 B@8 ~ B@8 C B@3 C B@7 C B@7 C B@3 D B D E ~
>`.pickRestart({
  A: "x!4", B: "x!2", C: "x ~ x!2", D: "x!3 ~ x!3 ~", E: "x",
})).gain(0.46)

// drums · snare
const snare = s("sd").struct(`<
  A@4 ~@3 B C@3 D C@3 D C@7 E C@7 D C@7 E C@8 E C@3 E C@7 E C@4 ~@3 B C@8 F C@8 E C@3 E C@7 E C@7 E C@3 G C G ~@2
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@8 x!8", C: "~ x ~ x", D: "~@4 x ~@7 x!4", E: "~ x ~@2", F: "x!4", G: "~ x!2 ~@2 x!2 ~",
})).gain(0.46)

// drums · low tom
const low_tom = s("lt").struct("<A@4 ~@19 B ~@15 B ~@8 B ~@3 B ~@7 B ~@25 B ~@3 B ~@7 B ~@7 B ~@8>".pickRestart({
  A: "x!2 ~@2 x!2 ~ x", B: "~@2 x!2",
})).gain(0.46)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@3 ~ B@3 C B@3 C B@7 D B@7 C B@7 D B@8 D ~@16 A@3 ~@10 B@8 D ~@28>".pickRestart({
  A: "x!4", B: "x!8", C: "x!6 ~@2", D: "x!4 ~@4",
})).gain(0.41)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@4
  [~ x!3 ~ x!3 ~ x!3 ~ x!3]!3
  [x!8 ~@8]
  ~@57
  [~ x!3 ~ x!3 ~ x!3 ~ x!3]!3
  [x!8 ~@8]
  ~@46
>`).gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct("<[~ x ~@2]!4 ~@106 [~@3 x ~@3 x] ~ [~@3 x ~@3 x] ~@2>").gain(0.46)

// drums · high tom
const high_tom = s("ht").struct("<A@4 ~@19 B ~@15 B ~@8 B ~@3 B ~@7 B ~@25 B ~@3 B ~@7 B ~@7 B ~@8>".pickRestart({
  A: "~@3 x", B: "~@5 x ~ x",
})).gain(0.51)

// drums · crash
const crash = s("cr").struct(`<
  A ~@3 A ~@3 A ~@40 A ~@3 A B ~@2 A B ~@6 A ~@21 A ~@3 A B ~@2 A B ~@6 A ~@3 A B ~@4 A ~
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.51)

// drums · ride
const ride = s("rd").struct("<~@49 A@3 B A@7 B A@4 ~@4 A@8 ~@10 A@3 B A@7 B A@7 B A@6 ~@2>".pickRestart({
  A: "x!8", B: "x!4 ~@4",
})).gain(0.46)

stack(electric_guitar_clean, bass, dulcimer, kick, snare, low_tom, hihat, hihat_soft, mid_tom, high_tom, crash, ride)

More by The Go-Go's