Strudelify

I Feel Fine

The Ventures

KeyG majorTempo189 bpm
0:00/0:00
// I Feel Fine — The Ventures
// 188.5 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(188.5/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.

// other · epiano1 · "3 E.Piano 1"
const epiano1 = note(`<
  ~@4 A@2 B@2 C@8 A@2 D E C@6 A@2 D E C@2 F G E D F G H I C@4 A@2 D J C@6 A@4 B@2 C@8 A@2 D E C@2 F G E D F G H I C@4
  A@2 D J C@2 A@2 B@2 C@2 K@4
>`.pickRestart({
  A: "[d3@2 d4@2 d4 c4 a3 g4@2 f#4@2 e4@2 f#4 e4 d4]/2", B: "[c3@2 c4@2 c4 a#3 g3 f4@2 e4@2 d4@2 e4 d4 c4]/2",
  C: "[g2@2 g3@2 g3 f3 d3 c4@2 b3@2 a3@2 b3 a3 g3]/2", D: "[a3,d4,f#4]@3 [a3,d4,f#4]@5", E: "[g3,c4,e4]@3 [g3,c4,e4]@5",
  F: "[g3,b3,d4]@3 [g3,b3,d4]@5", G: "[b3,d4,f#4]@3 [b3,d4,f#4]@5", H: "[a3,c4,e4]@3 [a3,c4,e4]@5",
  I: "[a3,c4,d4,f#4]@3 [a3,c4,d4,f#4]@5", J: "[g3,c4,e4]@3 [g3,c4,e4]@2 d4 c4@2", K: "[[e3,g#3,b3]@7 ~]/4",
})).s("gm_epiano1").gain(0.54)

// bass · synth bass 2 · "3 Synth Bass 2"
const bass = note("<A@5 ~@97>".pickRestart({
  A: "[~@14 a2@51 ~@15]/5",
})).s("gm_synth_bass_2").gain(0.64)

// other · accordion · "1155 Dist Accord"
const accordion = note("<A@5 ~@97>".pickRestart({
  A: "[~@14 a2@51 ~@15]/5",
})).s("gm_accordion").gain(0.09)

// other · overdriven guitar · "3 Overdrive Gt"
const overdriven_guitar = note("<A@4 ~@98>".pickRestart({
  A: "[~@7 a2@25]/4",
})).s("gm_overdriven_guitar").gain(0.09)

// other · electric guitar clean · "3 Clean Gt"
const electric_guitar_clean = note(`<
  ~@11 A B C B D E@2 F G H@2 I C B D E@2 F G J@2 K@2 L M N@2 O P Q@2 I C E@2 F R S@2 T U T V ~@10 I C B D E@2 F G S@2
  K@2 L W N@2 O P B C B D E@2 F R S@2 ~@10
>`.pickRestart({
  A: "~@5 b3 c4 c#4", B: "d4 f4 c4 b3", C: "c4@2 b3 c4@2 b3 c4 c#4", D: "c4@2 b3 c4@2 b3 c4@2", E: "[d4@4 d4@27 ~]/2",
  F: "[d4,f#4,a4]@4 [d4,f#4,a4]@4 [d4,f#4,a4]@4 [c#4,f4,g#4]@3 ~", G: "[c4,e4,g4]@2 ~@2 a#3 g3 c4 [a#3,d4]",
  H: "[[g3,b3]@12 ~ b3 c4 c#4]/2", I: "d4 f4 d4 b3", J: "[g3@15 ~]/2",
  K: "[[b3,d4,g4]@7 ~ [b3,d4,g4]@2 [b3,d4,g4]@2 ~@2 [b3,d4,f#4]@13 ~@3 b3@2]/2", L: "c4@2 c4!2 d4 c4 e4 c4",
  M: "d4@2 d4@4 a#3 g3", N: "[[b3,d4,g4]@7 ~ [b3,d4,g4]@2 [b3,d4,g4]@2 ~@2 [b3,d4,f#4]@13 ~ d4@2 d#4@2]/2",
  O: "e4 c4 a3 g3", P: "f#3 ~ b3 c4", Q: "[d4@2 f4@2 c4@2 b3 c4@2 b3@2 c4@2 b3 c4 c#4]/2",
  R: "[c4,e4,g4]@2 ~@2 [a#3,d4] g3 [c4,e4] [a#3,d4]", S: "[[g3,b3]@31 ~]/2", T: "c4 f4 d4 g4",
  U: "c4@2 f4 d4@2 a#3 g3 a#3", V: "c4@2 f4 d4@2 a#3 g3@2", W: "d4@4 d4@6 ~ g3 a#3@2 g3@2",
})).s("gm_electric_guitar_clean").gain(0.7)

// chords · electric guitar clean
const electric_guitar_clean_2 = note(`<
  ~@4 A@2 B@2 C@2 D@2 E@2 F@2 G H I J K L M@2 N@2 G O I P K L Q R S H Q R T U M@2 V@2 W@2 I P K@3 L K X Y@2 Z@2 B@2 AA@2
  D@2 E@2 V@2 G H I P K L AB R S H Q R T U E@2 N@2 Y@2 I P K Q Z@2 B@2 AA@2 AC@4
>`.pickRestart({
  A: "[~ f#4@30 ~, [d3,a3,d4]@15 ~]/2", B: "[[c3,g3,c4,e4]@31 ~]/2", C: "[~ [d4,g4]@31, [g2,d3,g3,b3]@15 ~]/2",
  D: "[[d3,g3,b3,d4,g4]@3 ~ [d3,g3,b3,d4,g4]@3 ~ [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2, g2 ~@3 g2 ~@9 g2 ~@7 g2 ~@9]/2", // G
  E: "[[g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2, ~@4 g2 ~@9 g2 ~@7 g2 ~@9]/2", // G
  F: "[[g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4] ~, ~@4 g2 ~@9 g2 ~@7 g2 ~@9]/2", // G
  G: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@3 ~", // D
  H: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4] ~", // D
  I: "[d3,f#3,c4,d4]@3 ~ [d3,f#3,c4,d4]@4 [d3,f#3,c4,d4]@4 [c#3,f3,b3,c#4]@4", // D7 C#7
  J: "[c3,e3,a#3,c4]@2 [c3,e3,a#3,c4]@2 [c3,e3,a#3,c4] ~ [c3,e3,a#3,c4]@4 [c3,e3,a#3,c4] ~ [c3,e3,a#3,c4] ~ [c3,e3,a#3,c4] ~", // C7
  K: "[g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2", // G
  L: "[g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2, ~@6 g2 ~@9", // G
  M: "[[g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2, ~@4 g2 ~@9 g2 ~@7 g2 ~@9]/2", // G
  N: "[[g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4] ~, ~@4 g2 ~@9 g2 ~@7 g2 ~@9]/2", // G
  O: "[d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@2", // D
  P: "[c3,e3,a#3,c4]@2 [c3,e3,a#3,c4]@2 [c3,e3,a#3,c4] ~ [c3,e3,a#3,c4]@4 [c3,e3,a#3,c4]@2 [c3,e3,a#3,c4] ~ [c3,e3,a#3,c4] ~", // C7
  Q: "[g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4] ~", // G
  R: "[b2,f#3,b3,d4,f#4]@2 [b2,f#3,b3,d4,f#4]@2 [b2,f#3,b3,d4,f#4] ~ [b2,f#3,b3,d4,f#4]@4 [b2,f#3,b3,d4,f#4]@2 [b2,f#3,b3,d4,f#4] ~ [b2,f#3,b3,d4,f#4] ~", // Bm
  S: "[c3,g3,c4,e4]@2 [c3,g3,c4,e4]@2 [c3,g3,c4,e4] ~ [c3,g3,c4,e4]@2 [c3,g3,c4,e4]@2 [c3,g3,c4,e4]@2 [c3,g3,c4,e4] ~ [c3,g3,c4,e4] ~", // C
  T: "[e3,a3,c4,e4,a4]@2 [e3,a3,c4,e4,a4]@2 [e3,a3,c4,e4,a4] ~ [e3,a3,c4,e4,a4]@4 [e3,a3,c4,e4,a4]@2 [e3,a3,c4,e4,a4] ~ [e3,a3,c4,e4,a4] ~", // Am
  U: "[d3,f#3,c4,d4]@2 [d3,f#3,c4,d4]@2 [d3,f#3,c4,d4] ~ [d3,f#3,c4,d4]@4 [d3,f#3,c4,d4]@2 [d3,f#3,c4,d4] ~ [d3,f#3,c4,d4] ~", // D7
  V: "[[g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2 [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4] ~, ~@4 g2 ~@9 g2 ~@7 g2 ~@9]/2", // G
  W: "[[d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4] ~]/2", // D
  X: "[g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [d3,g3,b3,d4,g4]@4 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4] ~, ~@6 g2 ~@9", // G
  Y: "[[d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@4 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4] ~ [d3,a3,d4,f#4]@2]/2", // D
  Z: "[[d3,a3,d4,f#4]@15 ~]/2", AA: "[~ g4@31, [g2,d3,g3,b3,d4]@15 ~]/2",
  AB: "[g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4]@2 [g2,d3,g3,b3,d4,g4] ~ [g2,d3,g3,b3,d4,g4] ~", // G
  AC: "[[e2,b2,e3,g#3,b3,e4]@7 ~]/4", // E
})).s("gm_electric_guitar_clean").gain(0.25).pan(0.2)

// bass · electric bass finger · "3 Fingred Bs"
const bass_2 = note(`<
  ~@4 A@2 B@2 C@2 D E F G F H I J K L F G F G F H I J K L F M F N L O F N P Q F G F R I J K L F G F S F T I U A@2 B@2
  C@2 F S F G F H I J K L F M F N L O F N P Q F G F R I J K L F G A@2 B@2 V@2 W@4
>`.pickRestart({
  A: "[d2@29 ~@3]/2", B: "[c2@29 ~@3]/2", C: "[g1@29 ~@3]/2", D: "g2@5 ~ f2@2 g2@4 g2@2 f2@2",
  E: "g2@2 d2!2 f2 d2 f2 f#2", F: "g2@7 ~ d2@7 ~", G: "g2@5 ~ d2@5 ~ f2@4", H: "g2@5 ~ c2@5 ~ c#2@4",
  I: "d2@7 ~ a1@7 ~", J: "d2@5 ~ a1@5 ~ c2@4", K: "d2@5 ~ a1@2 d2@4 c#2@4", L: "c2@5 ~ g1@5 ~ c2@4", M: "g2 d2 f2 f#2",
  N: "b1@5 ~ f#1@5 ~ b1@4", O: "d2@5 ~ a1@5 ~ d2@4", P: "a1@5 ~ c2@5 ~ e2@4", Q: "d2@5 ~ c2@5 ~ a1@4",
  R: "g2@5 ~ d2@5 ~ c#2@4", S: "g2@5 ~ d2@4 d2@2 f2@3 ~", T: "g2@5 ~ c2@4 c2@2 c#2@3 ~", U: "d2@5 ~ a1@4 a1@2 c2@3 ~",
  V: "[g2@29 ~@3]/2", W: "[e2@57 ~@7]/4",
})).s("gm_electric_bass_finger").gain(0.64).pan(0.1)

// drums · kick
const kick = s("bd").struct("<~@10 A@22 B@8 A@16 C ~@3 D E A@12 B@8 A@10 ~@4 D E ~@4>".pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3", C: "x", D: "x ~@3 x ~@2 x", E: "~@2 x ~@2 x ~@2",
})).gain(0.57).pan(0.7)

// drums · snare
const snare = s("sd").struct("<~@9 A@22 B C@7 D A@9 B C@6 ~@6 C B A@9 B C@7 D A@10 ~@10>".pickRestart({
  A: "~@3 x", B: "~@5 x!3", C: "~ x ~ x", D: "~@2 x ~@2 x!3",
})).gain(0.57).pan(0.7)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@9 A ~@21 B ~@7 B ~@9 B ~@13 B ~@9 B ~@7 B ~@20>".pickRestart({
  A: "~@11 x ~@4", B: "~@9 x ~@6",
})).gain(0.29).pan(0.7)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@60
  [~@2 x ~@2 x ~@2]
  [x ~@2 x ~@2 x ~]
  ~@34
  [~@2 x ~@2 x ~@2]
  [x ~@2 x ~@2 x ~]
  ~@4
>`).gain(0.57).pan(0.7)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@60
  [~@2 x ~@2 x ~@2]
  [x ~@2 x ~@2 x ~]
  ~@34
  [~@2 x ~@2 x ~@2]
  [x ~@2 x ~@2 x ~]
  ~@4
>`).gain(0.57).pan(0.7)

// drums · high tom
const high_tom = s("ht").struct("<~@10 A@22 ~@8 A@10 ~@13 A@11 ~@8 A@10 ~@10>".pickRestart({
  A: "~@2 x!2 ~@4",
})).gain(0.57).pan(0.7)

// drums · crash
const crash = s("cr").struct("<~@32 A ~@17 A ~@5 A ~@5 A ~@11 A ~@23 A ~@3>".pickRestart({
  A: "x",
})).gain(0.5).pan(0.7)

// drums · ride
const ride = s("rd").struct("<~@10 A@21 B C D@7 A@9 E C D@4 F ~@6 G E A@9 B C D@7 A@10 ~@10>".pickRestart({
  A: "x ~ x!6", B: "x!3 ~", C: "~@2 x!6", D: "x!8", E: "x ~ x!3 ~@3", F: "x!5 ~ x ~", G: "~@2 x ~ x!4",
})).gain(0.57).pan(0.7)

stack(
  epiano1, bass, accordion, overdriven_guitar, electric_guitar_clean, electric_guitar_clean_2, bass_2, kick, snare,
  snare_soft, low_tom, mid_tom, high_tom, crash, ride
)

More by The Ventures