Strudelify

Young Girl

Gary Puckett

KeyE♭ majorTempo120 bpm
0:00/0:00
// Young Girl — Gary Puckett
// 120 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (4/4 at bar 1, 5/4 at bar 4, 4/4 at bar 5) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 95 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · rock organ
const rock_organ = note(`<
  ~@9 A B C D A B C E F@2 G@2 A H I A J K ~@6 A B C D A B C E F@2 G@2 A H I A J K ~@6 A B C L M N O P M N O Q R@2 S@2 M
  T U M V W ~@6 V W X Y Z ~@5
>`.pickRestart({
  A: "[bb4,eb5,g5]@15 ~", B: "[c5,eb5,ab5]@15 ~", C: "[eb5,g5]@7 ~, bb4",
  D: "[eb5,ab5,c6]@7 ~ [eb5,g5,bb5]@3 ~ [f5,ab5]@3 ~", E: "[eb5,ab5,c6]@7 ~ [g5,bb5]@3 ~ [f5,ab5]@4",
  F: "[~@8 g5@7 ~, [g4,b4], ~ d5@3]/2", G: "[[ab4,c5]@15 ~ b4@15 ~, [eb5,ab5]@31 ~]/2", H: "d5, f5@7 ~",
  I: "[b4,eb5,gb5]", J: "[ab4,c5]@15 ~", K: "[g4,bb4]@15 ~", L: "[db5,e5]@6 ~@2 [eb5,gb5]@7 ~", M: "[b4,e5,ab5]@15 ~",
  N: "[db5,e5,a5]@15 ~", O: "[e5,ab5]@7 ~, b4", P: "[e5,a5,db6]@7 ~ [e5,ab5,b5]@3 ~ [gb5,a5]@3 ~",
  Q: "[e5,a5,db6]@7 ~ [ab5,b5]@3 ~ [gb5,a5]@4", R: "[~@8 ab5@7 ~, [ab4,c5], ~ eb5@3]/2",
  S: "[[a4,db5]@15 ~ c5@15 ~, [e5,a5]@31 ~]/2", T: "eb5, gb5@7 ~", U: "[c5,e5,g5]", V: "[a4,db5]@15 ~",
  W: "[ab4,b4]@15 ~", X: "db5", Y: "[b4,eb5]", Z: "bb4",
})).s("gm_rock_organ").gain(0.19).pan(0.8)

// chords · rock organ · soft notes
const rock_organ_soft = note(`<
  ~@12 A ~@3 B ~@3 C ~ D ~@13 A ~@3 B ~@3 C ~ D ~@13 E ~@3 F ~@3 G ~@3 H ~ I ~@12 J ~ K L M@4
>`.pickRestart({
  A: "~@12 eb5 ~@3", B: "~@2 eb5 ~", C: "ab4", D: "bb4@15 ~", E: "a4@6 ~@2 b4@7 ~", F: "~@12 e5 ~@3", G: "~@2 e5 ~",
  H: "a4", I: "b4@15 ~", J: "e5", K: "db5", L: "[b4,eb5]", M: "[[d5,gb5]@4 c5@14 db5@11 ~@3, ~@4 e5@25 ~@3]/4",
})).s("gm_rock_organ").gain(0.05).pan(0.8)

// bass · electric bass finger
const bass = note(`<
  ~ A ~ B C D E F G H I J K H L M N O P Q R H S T U V W B C D E F G H I J K H L M N O P Q R H S T U V W B C D E F G H I
  J X Y Z AA AB Y AC AD AE AF AG AH AI Y AJ AK AL AM AN AO AP AQ AR AS AT AM AN AO AP AQ AR AS AU@3
>`.pickRestart({
  A: "~@5 f1 ~@2", B: "ab1@4 ~@2 ab1 ~ ab1@4 ~@2 ab1@2", C: "g1@2 ~ g1 d2 g1 d2 g2",
  D: "f1@4 ~@2 f1@2 c2@2 f1 ~ c2@2 f1@2", E: "bb1@4 ~@2 bb1 ~ bb1@3 ~ bb1@3 ~", F: "db2@4 ~@2 db2@2 b1@4 ~@2 b1 ~",
  G: "b1@4 ~@2 b1 ~ b1@2 ~@2 b1@3 ~", H: "eb2@4 ~@2 eb2 ~ eb2@4 bb2@2 eb2@2", I: "ab1@4 ~@2 ab1 ~ ab1@4 ab2@2 eb2@2",
  J: "eb2@4 ~@2 eb2 ~ eb2@3 ~ bb2@2 eb2@2", K: "ab2@4 ~@2 ab2@2 bb2@3 ~ ab2@4",
  L: "ab1@4 ~@2 ab1 ~ ab1@3 ~ eb2@2 ab1@2", M: "eb2@4 ~@2 eb2 ~ eb2@4 bb2@2 eb2 ~", N: "ab2@2 ~ ab2 bb2@2 ab2@2",
  O: "g1@4 ~@2 g1 ~ g1@4 g2@4", P: "g1@4 ~@2 g1 ~ g1@4 g2@2 g1@2", Q: "ab1@4 ~@2 ab1@5 ~ eb2@2 ab1 ~",
  R: "ab1@4 ~@2 ab1 ~ ab1@4 eb2@2 ab1@2", S: "bb1@4 ~@2 bb1 ~ bb1@4 f2@2 bb1@2", T: "b1@4 ~@2 b1 ~ b1@4 ~@2 b1@2",
  U: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~", V: "ab1@4 ~@2 ab1@2 eb2@2 ab1@2 eb2@2 ab1 ~",
  W: "g1@4 ~@2 g1@2 d2@2 g2@2 d2@2 g1 ~", X: "gb2@4 ~@2 gb2 ~ gb2@2 f2@2 eb2@3 ~", Y: "e2@4 ~@2 e2 ~ e2@4 b2@2 e2@2",
  Z: "a1@4 ~@2 a1 ~ a1@4 a2@2 e2@2", AA: "e2@4 ~@2 e2 ~ e2@3 ~ b2@2 e2@2", AB: "a2@4 ~@2 a2@2 b2@3 ~ a2@4",
  AC: "a1@4 ~@2 a1 ~ a1@3 ~ e2@2 a1@2", AD: "e2@4 ~@2 e2 ~ e2@4 b2@2 e2 ~", AE: "a2@2 ~ a2 b2@2 a2@2",
  AF: "ab1@4 ~@2 ab1 ~ ab1@4 ab2@4", AG: "ab1@4 ~@2 ab1 ~ ab1@4 ab2@2 ab1@2", AH: "a1@4 ~@2 a1@5 ~ e2@2 a1 ~",
  AI: "a1@4 ~@2 a1 ~ a1@4 e2@2 a1@2", AJ: "b1@4 ~@2 b1 ~ b1@4 gb2@2 b1@2", AK: "c2@4 ~@2 c2 ~ c2@4 ~@2 c2@2",
  AL: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~", AM: "a1@4 ~@2 a1@2 e2@2 a1@2 e2@2 a1 ~",
  AN: "ab1@4 ~@2 ab1@2 eb2@2 ab2@2 eb2@2 ab1 ~", AO: "a1@4 ~@2 a1 ~ a1@4 ~@2 a1@2", AP: "ab1@2 ~ ab1 eb2 ab1 eb2 ab2",
  AQ: "gb1@4 ~@2 gb1@2 db2@2 gb1 ~ db2@2 gb1@2", AR: "b1@4 ~@2 b1 ~ b1@3 ~ b1@3 ~", AS: "d2@4 ~@2 d2@2 c2@4 ~@2 c2 ~",
  AT: "c2@4 ~@2 c2 ~ c2@2 ~@2 c2@3 ~", AU: "[~ c2@19 a1@22 ~@6]/3",
})).s("gm_electric_bass_finger").gain(0.49)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@9 A B A C A B A C D@2 E F A G H I J K ~@2 L M N@2 A B A C A B A O D@2 E P A G H I ~ K ~@2 L M N@2 A B A Q R S R T R
  S R U V@2 W X R Y Z AA ~ J ~@2 AB AC AD@2 ~ AE ~@2 AF@2 AG@4
>`.pickRestart({
  A: "[g4,bb4]", B: "[ab4,c5]", C: "[ab4,c5]@2 [g4,bb4] [f4,ab4]", D: "[d4,g4]/2", E: "[eb4,ab4]",
  F: "[eb4,ab4]@8 b4@2 db5@2 b4@3 ~", G: "[bb4,d5]", H: "b5", I: "eb6", J: "ab4", K: "g4", L: "f6 eb6",
  M: "~ bb5 d6 g6", N: "[f6@8 eb6@23 ~]/2", O: "[ab4,c5]@2 ~ [f4,ab4], ~@8 [g4,bb4]@7 ~", P: "[eb4,ab4]@4 b4 db5 b4@2",
  Q: "[a4,db5] [b4,eb5]", R: "[ab4,b4]", S: "[a4,db5]", T: "[a4,db5]@2 [ab4,b4] [gb4,a4]",
  U: "[a4,db5]@2 ~ [gb4,a4], ~@8 [ab4,b4]@7 ~", V: "[eb4,ab4]/2", W: "[e4,a4]", X: "[e4,a4]@4 c5 d5 c5@2",
  Y: "[b4,eb5]", Z: "c6", AA: "e6", AB: "gb6 e6", AC: "~ b5 eb6 ab6", AD: "[gb6@8 e6@23 ~]/2", AE: "ab4@7 ~",
  AF: "[gb6@4 e6@5 ~ b5@2 eb6@2 ab6@2]/2", AG: "[gb6@7 ~ e6@50 ~@6]/4",
})).s("gm_string_ensemble_1").gain(0.27).pan(0.2)

// other · tuba
const tuba = note("<~@57 A@5 ~@33>".pickRestart({
  A: "[~@8 g3 ~ bb3@2 ~@2 eb4@9 ~ eb4 ~ d4 ~ c4 ~ bb3@8 ~@2 bb3 ~ eb4 ~@3 e4@8 ~@2 e4 ~ eb4 ~ db4 ~ b3@8 ~@10]/5",
})).s("gm_tuba").gain(0.49).pan(0.4)

// chords · tremolo strings
const tremolo_strings = note(`<
  A@2 ~ B C D E F@2 ~@18 B C D E F@2 ~@18 B C D E F@2 ~ G H I ~@18 J B K L M@2 ~@2 J ~@7
>`.pickRestart({
  A: "[[eb4,ab4,c5]@13 [eb4,g4,c5]@13 f3@3 ~@3]/2", B: "[ab4,eb6]", C: "[g4,d6]", D: "[f4,c6]", E: "[bb4,d6]",
  F: "[[db5,f6]@8 [b4,eb6]@23 ~]/2", G: "~@4 bb5 ~ eb6@6 ~@4", H: "~@4 g5 ~ bb5@6 ~@4", I: "~@4 ab5 ~ b5@6 ~@4",
  J: "[a4,e6]", K: "[gb4,db6]", L: "[b4,eb6]", M: "[[d5,gb6]@8 [c5,e6]@23 ~]/2",
})).s("gm_tremolo_strings").gain(0.27).pan(0.8)

// chords · tremolo strings · soft notes
const tremolo_strings_soft = note("<~@88 A B C D@4>".pickRestart({
  A: "[ab4,eb6]", B: "[gb4,db6]", C: "[b4,eb6]", D: "[[d5,gb6]@4 c5@14 db5@11 ~@3, ~@4 e6@25 ~@3]/4",
})).s("gm_tremolo_strings").gain(0.11).pan(0.8)

// other · brass section
const brass_section = note(`<
  ~@8 A B ~@9 C@2 D ~ E F G H@2 I@2 J K@2 L ~@9 C@2 D ~ E F G H@2 I@2 J K@2 L ~@13 M@2 N ~ O P Q R@2 S@2 T U@2 V R@2 W@2
  ~@5
>`.pickRestart({
  A: "~@2 [b3,b4] [db4,db5] [eb4,eb5] [db4,db5] [b3,b4] [eb4,eb5]", B: "[d4,d5]@3 ~",
  C: "[~@10 [ab3,ab4] ~ [c4,c5] ~ [eb4,eb5]@9 ~ [eb4,eb5]@2 [db4,db5]@2 [b3,b4]@2 [eb4,eb5]@2]/2", // Ab C Eb Db B Eb
  D: "[bb3,bb4]@11 ~@5", E: "~@4 [b3,b4] ~ [db4,db5] ~ [eb4,eb5] ~ [db4,db5]@4 [b3,b4] [db4,db5]",
  F: "[eb4,eb5]@13 ~@3", G: "[eb4,eb5]@11 ~@5", H: "[~@4 [d4,d5] ~ [c4,c5] ~ [bb3,bb4] ~ [d4,d5]@4 [eb4,eb5]@11 ~@7]/2",
  I: "[~@4 [d4,d5] ~ [c4,c5] ~ [bb3,bb4] ~ [d4,d5]@4 [f3,f4]@10 ~@8]/2", J: "[bb3,bb4]@7 ~",
  K: "[[db4,db5]@7 ~ [b3,b4]@11 ~ [b3,b4]@2 [db4,db5]@2 [eb4,eb5]@2 [db4,db5]@2 [b3,b4]@2 [eb4,eb5]@2]/2", // Db B Db Eb Db B Eb
  L: "[d4,d5]@11 ~@5", M: "[~@10 [a3,a4] ~ [db4,db5] ~ [e4,e5]@9 ~ [e4,e5]@2 [d4,d5]@2 [c4,c5]@2 [e4,e5]@2]/2",
  N: "[b3,b4]@11 ~@5", O: "~@4 [c4,c5] ~ [d4,d5] ~ [e4,e5] ~ [d4,d5]@4 [c4,c5] [d4,d5]", P: "[e4,e5]@13 ~@3",
  Q: "[e4,e5]@11 ~@5", R: "[~@4 [eb4,eb5] ~ [db4,db5] ~ [b3,b4] ~ [eb4,eb5]@4 [e4,e5]@11 ~@7]/2",
  S: "[~@4 [eb4,eb5] ~ [db4,db5] ~ [b3,b4] ~ [eb4,eb5]@4 [gb3,gb4]@10 ~@8]/2", T: "[b3,b4]@7 ~",
  U: "[[d4,d5]@7 ~ [c4,c5]@11 ~ [c4,c5]@2 [d4,d5]@2 [e4,e5]@2 [d4,d5]@2 [c4,c5]@2 [d4,d5]@2]/2", V: "[db4,e5]@7 ~@9",
  W: "[~@4 [eb4,eb5] ~@3 [b3,b4] ~ [eb4,eb5]@4 gb4@10 ~@8]/2", // Eb B Eb
})).s("gm_brass_section").gain(0.44).pan(0.6)

// other · brass section · soft notes
const brass_section_soft = note("<~@88 A@2 B C@4>".pickRestart({
  A: "[~@6 [db4,db5] ~@7 gb3@10 ~@8]/2", B: "[b3,b4]@7 ~",
  C: "[[d4,d5]@7 ~ [c4,c5]@12 ~ [c4,c5]@2 ~ d4@2 [e4,e5]@2 [d4,d5]@3 [c4,c5]@2 [d4,d5]@3 [a3,db5]@22 ~@6, ~@23 d5@3 ~@38]/4", // D C E D C D A
})).s("gm_brass_section").gain(0.16).pan(0.6)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@8 A ~@79 B C D E F G ~>".pickRestart({
  A: "~@2 x!2 ~ x!2 ~", B: "~@3 x!2 ~@3", C: "x ~@2 x!2 ~@3", D: "x ~@2 x!2 ~@2 x", E: "x!2", F: "~ x ~@5 x ~@2 x ~@5",
  G: "~ x ~@2",
})).gain(0.22)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 A ~@51 B ~@27 C D@3 E ~@2>".pickRestart({
  A: "~ x!2 ~@5", B: "~@8 x!2 ~@6", C: "~@3 x", D: "~ x ~ x", E: "~@5 x ~@6 x ~@2 x",
})).gain(0.27)

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@11 B ~@3 C ~@7 B ~@15 D ~@7 B E ~@2 B ~@11 B ~@3 D ~@7 B ~@10>".pickRestart({
  A: "~@13 x!3", B: "~@15 x", C: "~@11 x!5", D: "~@12 x!4", E: "x",
})).gain(0.49)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@3 A B@3 ~@2 B@8 A B C D B@3 E ~@8 B@10 C@2 B@3 ~@9 A B@2 D B@10 C F A B@2 ~@19
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x!3 ~", D: "x!2 ~@2", E: "x", F: "~ x ~@2",
})).gain(0.38)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@2 A ~@5 B ~@11 C ~@3 D ~@7 E ~@15 F ~@7 E ~@3 E ~@10 G C ~@3 F ~@7 E ~@10
>`.pickRestart({
  A: "~@4 x!4", B: "~@10 x!3 ~@3", C: "~@11 x!4 ~", D: "~@7 x!4 ~@5", E: "~@12 x!3 ~", F: "~@4 x!8 ~@4", G: "~@13 x!3",
})).gain(0.44)

// drums · high tom
const high_tom = s("ht").struct("<~@2 A ~@5 B ~@11 C ~@3 D ~@7 E ~@15 F ~@7 E ~@14 G C ~@3 F ~@7 E ~@10>".pickRestart({
  A: "~@4 x!4", B: "~@8 x!2 ~@6", C: "~@8 x!3 ~@5", D: "~@4 x!3 ~@9", E: "~@8 x!4 ~@4", F: "x!4 ~@12",
  G: "~@10 x!3 ~@3",
})).gain(0.33)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@3 B ~ A ~@7 A ~@2 A@2 ~@2 A@2 ~@5 B ~ A ~@10 A@2 ~@3 A ~@5 B ~ A ~@3 A ~@10 A@2 ~@3 A ~@5 B ~ A ~@5 B ~@3
>`.pickRestart({
  A: "x", B: "x!2",
})).gain(0.27)

// drums · ride
const ride = s("rd").struct("<~@7 A B ~@16 C@4 D C E B ~@16 F C@3 D C A B ~@20 C@4 D C G B H C@2 I ~@6>".pickRestart({
  A: "~@3 x ~@2 x!2", B: "x!4 ~@4", C: "x!4", D: "x ~ x ~ x ~ x!2", E: "x ~@2 x ~@2 x!2", F: "~ x!2 ~ x ~ x ~",
  G: "x ~@2 x!2 ~ x!2", H: "~ x!3", I: "x!3 ~",
})).gain(0.33)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@7 A ~@23 A ~@23 A ~@27 A ~@4 B C D E ~@3>".pickRestart({
  A: "~ x!2 ~@2 x ~@2", B: "~@3 x", C: "x ~ x ~ x ~ x!2", D: "x!4", E: "~ x!3 ~ x!3",
})).gain(0.16)

// drums · tambourine
const tambourine = s("tb").struct("<~@3 A@4 ~@2 B@18 A@4 ~@2 B@18 A@4 ~@2 B@22 A@4 ~@2 B@2 C ~@7>".pickRestart({
  A: "x!4", B: "~ x ~ x", C: "x!2 ~ x",
})).gain(0.38)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@87 [~ x] [x!4]!3 ~@4>").gain(0.16)

stack(
  rock_organ, rock_organ_soft, bass, string_ensemble_1, tuba, tremolo_strings, tremolo_strings_soft, brass_section,
  brass_section_soft, kick, kick_soft, snare, snare_soft, low_tom, hihat, mid_tom, high_tom, crash, ride, ride_soft,
  tambourine, tambourine_soft
)

More by Gary Puckett