Strudelify

Put It There

McCartney

KeyD majorTempo178 bpm
0:00/0:00
// Put It There — McCartney
// 178 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 12 "HARPSICHRD" harpsichord (copy of ch 1 "STEEL GTR" acoustic guitar steel); ch 11 "HARPSICHRD" harpsichord (copy of ch 3 "STEEL GTR" acoustic guitar steel)
// note: Full arrangement: all 93 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(178/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 · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A@2 B@2 C@2 D@3 E@2 F@2 G@2 H@2 I J K@2 L@2 M@2 N O P Q R@2 S@2 T U V@4 W X Y Z AA@2 AB@2 AC AD AE@5 E@2 F@2 G@2 H@2 I
  J K@2 L@2 M@2 N O P Q R@2 S@2 T U V@4 W X Y Z AF@2 AG@2 ~
>`.pickRestart({
  A: "[~@4 e3@3 ~@13 [d3,a3]@3 ~ d3@4 e3@4, c3@7 ~ b2@7 ~ a2@7 ~@9, ~@4 [g3,d4]@7 ~ [d3,g3,d4]@7 ~ d4@11 ~]/2", // D5 G5
  B: "[~@4 e3@3 ~@21 [a3,d4]@4, c3@7 ~ b2@7 ~ a2@7 ~@9, ~@4 [g3,d4]@7 ~ d3@12 d3@8, ~@12 [g3,d4]@7 ~ [a3,d4]@7 ~@5]/2", // D5 G5 D5
  C: "[~@4 [g3,d4]@4 ~@4 [g3,d4]@4 ~@4 [d3,a3]@3 ~ d3@4 e3@4, c3@7 ~ b2@7 ~ a2@7 ~@9, ~@4 e3@3 ~@5 d3@8 d4@12]/2", // G5 D5
  D: "[~@4 e3@3 ~@5 d3@4 d3@19 ~@13, c3@7 ~ b2@6 ~@34, ~@4 [g3,d4]@7 ~ d4@23 ~@13, ~@12 g3@7 ~@29]/3", // G5
  E: "[~@4 [g3,b3]@3 ~@5 [d3,g3,b3]@4 ~@12 [g3,b3]@4, g2@6 ~@2 b2@12 [d3,g3,b3]@7 ~ d3@2 ~@2, ~@16 g2@6 ~@2 b2@7 ~]/2", // G
  F: "[~@14 [a3,d4] ~, d3@12 [d3,a3,d4]@8 [d3,a3,d4]@7 ~ d3@4, ~ [a3,d4]@2 ~@5, ~@8 a2@8 a2@7 ~ a2@8]/2", // D5
  G: "[~ [d3,g3,b3] ~@5 [d3,g3,b3], g2@7 ~ b2@15 ~ b2@6 ~@2, ~@12 [d3,g3,b3]@7 ~ [d3,g3,b3]@7 ~@5, ~@8 g2@3 ~@5]/2", // G
  H: "[~@4 a2@2 ~@8 [a3,d4] ~, d3@15 ~ d3@16, ~@4 [a3,d4]@7 ~ [a3,d4]@7 ~ [a3,d4]@7 ~@5, ~@3 a2]/2", // D5
  I: "~@2 b2 [g3,b3], g2@7 ~@9, ~@4 [d3,g3,b3]@7 ~ d3@2 ~@2", J: "~@2 b2 [g3,b3], d3@15 ~, ~@4 [g3,b3]@7 ~@5",
  K: "[~@6 d3@2 ~@6 [a3,d4] ~, d3@3 ~ d3@3 d3, ~@4 [a3,d4]@8 [a3,d4]@8 [a3,d4]@7 ~@5, ~@8 a2@7 ~@9 a2@7 ~]/2", // D5
  L: "[~@3 d3 ~@3 [g3,b3], g2@7 ~ b2@7 ~ d3@15 ~, ~@4 [d3,g3,b3]@7 ~ [g3,b3]@7 ~ [g3,b3]@7 ~@5, ~@12 b2@3 ~]/2", // G
  M: "[~@5 [a3,d4] d3 c#3, d3@2 d3 ~, ~@4 [a3,d4]@8 [a3,d4]@7 ~@13, ~@8 a2@7 ~@17]/2", // D5
  N: "~@4 b3@4 ~@4 [f#3,b3,d4]@3 ~, b2@7 ~ f#2@6 ~@2, ~@4 [f#3,d4]@7 ~@5", // Bm D
  O: "~@4 e3@2 ~@6 [a3,c#4]@3 ~, a2@3 ~ e3@3 ~, ~@4 [a3,c#4]@7 ~@5", // A
  P: "~@3 [d3,g3,b3], g2@7 ~ b2@6 ~@2, ~ [d3,g3,b3]@2 ~", Q: "~@3 [g3,b3], d3@15 ~, ~@4 [g3,b3]@7 ~@5, ~@4 b2@3 ~",
  R: "[~@12 [a3,d4]@3 ~@5 e3@3 ~@5 [a3,c#4]@3 ~, d3@9 ~@3 e3@3 ~, ~@4 [a3,d4]@7 ~@9 [a3,c#4]@7 ~@5, ~@8 a2@8 a2@7 ~@9]/2", // D5 A D5 A
  S: "[~@12 g3@4 ~@8 g2@2 ~@2 a2@3 ~, g2@8 g2@8 g2@7 ~@9, ~@4 [d3,g3,b3]@7 ~ [d3,b3]@7 ~ [d3,g3,b3]@11 ~]/2", // G
  T: "~@12 [f#3,b3,d4]@3 ~, b2@3 ~ f#2@3 ~, ~@4 [f#3,b3,d4]@7 ~@5", // Bm
  U: "~@4 e3@3 ~@5 [a3,c#4]@4, a2@6 ~@2 e3@7 ~, ~@4 [a3,c#4]@7 ~@5", // A
  V: "[~@12 d3@4 ~@28 [a3,d4]@3 ~@13 [a3,c#4]@2 ~@2, g2@7 ~ b2@7 ~ d3@15 ~ d3@8 d3@10 ~@2 [e3,a3,c#4]@7 ~@5, ~@4 [d3,g3,b3]@7 ~ [g3,b3]@8 [g3,b3]@7 ~ [g3,b3]@6 ~@2 [a3,d4]@8 ~@20, ~@24 b2@6 ~@18 a2@8 a2@7 ~]/4", // D5 A G D5
  W: "~@8 f#2@3 ~ a2@4, b2@7 ~@9, ~@4 [f#3,b3,d4]@9 ~@3", X: "~@3 [d3,g3,b3], g2@7 ~ g2@6 ~@2, ~@4 [d3,g3,b3]@7 ~@5",
  Y: "~@6 [a3,d4] ~, d3!2, ~@4 [a3,d4]@7 ~@5", Z: "~@12 [a3,c#4]@3 ~, a2@4 a2@3 ~, ~@4 [a3,c#4]@7 ~@5, ~@6 e3@5 ~@5",
  AA: "[~@28 [a3,d4] ~@3, d3@8 d3@8 d3@8 d3@7 ~, ~@4 [a3,d4]@7 ~ [a3,d4]@7 ~ [a3,d4]@7 ~@5]/2", // D5
  AB: "[~@4 e3@2 ~@6 g3@4 ~@4 d3@4 d3@4 e3@3 ~, c3@7 ~ b2@7 ~ a2@13 ~@3, ~@2 [g3,d4]@3 ~ [d3,d4]@4 [a3,d4]@6]/2", // G5 D D5
  AC: "e3 ~@3 [e3,g3,d4]@4 ~@4 [g3,d4]@4, c3@7 ~ b2@6 ~@2, ~@6 d3 ~", // Em7 G5
  AD: "~@4 d3@3 ~@5 [a3,d4]@4, a2@6 ~@2 d3@7 ~, ~@2 [a3,d4]@3 ~@3", // D5
  AE: "[~@4 e3@3 ~@5 g3@4 ~@4 d3@4 d3@4 [e3,a3]@3 ~@5 e3@2 ~@2 b2@3 ~ a2@2 b2 ~ d3@30 ~@2, c3@7 ~ b2@7 ~ a2@14 ~@2 c3@7 ~@41, ~@4 [g3,d4]@6 ~@2 [d3,d4]@7 ~ [a3,d4]@8 d4@6 ~@2 d4@15 ~@29, ~@36 g3@11 ~@33]/5", // A5 G5 D D5
  AF: "[~@8 b2@4 a2@4 ~@12 [g3,d4] ~@3, b2@8 ~@8 g2@8 g2@7 ~, ~@4 [g3,d4]@7 ~ [g3,d4]@7 ~ [g3,d4]@7 ~@5]/2", // G5
  AG: "[d3,a3,d4]/2", // D5
})).s("gm_acoustic_guitar_steel").gain(0.33).pan(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@9 A@2 B C A@2 B@2 D E F@2 A E B G H I A E B J K L M N O E P Q R S P T P U V W X W V Y Z AA@2 A@2 B@2 A D B AB A AC
  F@2 AD E B AE M AF A E B AG AH AI AJ N A E AK Q AL S P AM AN AH AO@2 ~
>`.pickRestart({
  A: "g1@5 ~@3 b1@5 ~@3", B: "d2@5 ~@3 a1@5 ~@3", C: "d2@5 ~@3 a1@6 ~@2", D: "g1@4 ~@4 b1@5 ~@3",
  E: "d2@5 ~@3 b1@5 ~@3", F: "d2@4 ~@4 a1@5 ~@3", G: "d2@4 ~@4 d2@3 ~ c#2@4", H: "b1@3 ~ f#1@3 ~",
  I: "a1@5 ~@3 e2@6 ~@2", J: "a1@3 ~ e2@3 ~", K: "g1@3 ~ g1@2 ~@2", L: "g2@2 a2@2 g2@2 d2@2 g1@2 ~@2 a1@3 ~",
  M: "b1@6 ~@2 f#1@5 ~@3", N: "a1@5 ~@3 d#2@5 ~@3", O: "g1@5 ~@3 b1@6 ~@2", P: "d2@5 ~@3 d2@5 ~@3", Q: "a1 ~ a1 ~",
  R: "b1@7 ~ f#1@3 ~ a1@3 ~", S: "g1@5 ~@3 g1@5 ~@3", T: "a1@3 ~@5 a1@7 ~", U: "d2 ~ d2 ~", V: "c2@5 ~@3 b1@7 ~",
  W: "a1@7 ~ d2@5 ~@3", X: "c2@5 ~@3 b1@6 ~@2", Y: "a1@7 ~ d2@4 ~@4", Z: "c2@5 ~@3 b1@3 ~ a1@2 b1@2", AA: "[d2@7 ~]/2",
  AB: "d2@3 ~ a1@2 ~@2", AC: "d2@4 ~@4 b1@5 ~@3", AD: "g1@3 ~ b1@3 ~", AE: "d2@5 ~@3 d2@4 c#2@3 ~",
  AF: "a1@6 ~@2 e2@5 ~@3", AG: "a1@5 ~@3 e2@5 ~@3", AH: "g1@5 ~@3 g1@4 ~@4", AI: "g2 ~ a2@2 g2@2 d2@2 g1@3 ~ a1@2 ~@2",
  AJ: "b1@5 ~@3 f#1@5 ~@3", AK: "d2@4 ~@4 d2@5 ~@3", AL: "b1@5 ~@3 f#1@2 ~@2 a1@4", AM: "a1@4 ~@4 a1@7 ~",
  AN: "b1@8 b1@3 ~ a1@4", AO: "[d2@13 ~@3]/2",
})).s("gm_acoustic_bass").gain(0.38)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel_2 = note(`<
  A B C D E F G H@2 I@8 J@8 K L M@3 N@8 O@7 P B E Q E B G R@2 I@8 J@8 K L M@3 N@8 S@7 T@2 ~
>`.pickRestart({
  A: "g4@8 d4@7 ~", B: "d4@8 a4@7 ~", C: "g4 d4", D: "d4@3 ~ e4 f#4@2 ~", E: "g4@7 ~ d4@8", F: "d4 a4",
  G: "g4@7 ~ d4@5 ~@3", H: "[~@16 [a3,d4,f#4]@15 ~, f#4 ~, ~@7 d3@9]/2",
  I: "[~@32 e4 ~@63 e4 ~@27 d4@4, [g3,g4]@7 ~ [g3,g4]@8 [g3,g4]@8 [g3,g4]@7 ~ a3@8 [a3,f#4]@8 [a3,f#4]@8 [a3,f#4]@8 [g3,g4]@7 ~ [g3,g4]@8 [g3,g4]@8 [g3,g4]@7 ~ a3@8 [a3,f#4]@8 [a3,f#4]@8 [a3,f#4]@8, ~@4 d4@8 d4@7 ~ d4@7 ~ d4@8 d4@8 d4@8 d4@8 d4@8 d4@7 ~ d4@7 ~ d4@8 d4@7 ~ d4@8 d4@8 d4@8 ~@4, ~@33 f#4@7 ~@57 f#4@7 ~@24]/8", // G D G D
  J: "[~@32 e4 ~@63 e4 ~@27 d4@3 ~, [g3,g4]@8 [g3,g4]@8 [g3,g4]@8 [g3,g4]@7 ~ a3@8 [a3,f#4]@8 [a3,f#4]@8 [a3,f#4]@8 [g3,g4]@7 ~ [g3,g4]@8 [g3,g4]@8 [g3,g4]@7 ~ a3@8 [a3,f#4]@8 [a3,f#4]@8 [a3,f#4]@8, ~@4 d4@7 ~ d4@7 ~ d4@7 ~ d4@8 d4@8 d4@7 ~ d4@7 ~ d4@8 d4@7 ~ d4@7 ~ d4@7 ~ d4@8 d4@8 d4@7 ~ d4@8 ~@4, ~@33 f#4@7 ~@57 f#4@7 ~@24]/8", // G D G D
  K: "~@3 d4, ~ b3@3, ~ d4@2 ~, ~ f#4", L: "~@3 c#4, ~ a3@3, ~ c#4@2 ~, ~ e4",
  M: "[~@12 d4@8 ~@8 d4@7 ~@9 d4@4, ~@4 g3@31 ~ a3@12, ~ d4@2 ~@2 d4@2 ~@2 d4@2 ~, ~@8 g4@16 g4@11 ~@5 f#4@8]/3",
  N: "[~@12 c#4@7 ~@9 d4@7 ~@9 d4@7 ~@9 d4@8 ~@8 c#4@7 ~@9 d4@7 ~@9 d4@7 ~@9 d4@4, ~@4 a3@14 ~@2 g3@16 g3@15 ~@5 f#4@10 ~@6 e4@10 ~@6 g4@15 ~ g4@11 ~@5 f#4@8, ~@4 c#4@8 ~@8 d4@8 ~@8 d4@8 ~@8 b3@15 ~ a3@14 ~@2 g3@16 g3@15 ~ a3@12, ~@8 e4@11 ~@5 g4@15 ~ g4@11 ~ d4@8 ~@8 c#4@8 ~@8 d4@8 ~@8 d4@8 ~@8 d4@8 ~@4]/8",
  O: "[~@12 c#4@5 ~@11 d4@7 ~@9 d4@7 ~@9 d4@7 ~@9 c#4@6 ~@10 d4@7 ~@9 d4@2 ~@2, ~@4 a3@15 ~ b3@16 b3@14 ~@2 a3@16 a3@13 ~@3 a3@16 a3@11 ~, ~@4 c#4@8 ~@8 d4@8 ~@8 d4@8 ~@8 d4@8 ~@8 c#4@7 ~@9 d4@8 ~@8 d4@8 ~@4, ~@8 e4@9 ~@7 f#4@10 ~@6 g4@11 ~@5 f#4@10 ~@6 e4@11 ~@5 f#4@16 f#4@6 ~@2]/7",
  P: "g4@6 ~@2 d4@7 ~", Q: "d4@6 ~@2 e4@2 f#4@5 ~", R: "[d3,a3,d4,f#4]/2",
  S: "[~@12 c#4@5 ~@11 d4@7 ~@9 d4@7 ~@9 d4@7 ~@9 c#4@6 ~@10 d4@7 ~@9 d4@2 ~@2, ~@4 a3@15 ~ b3@16 b3@14 ~@2 a3@16 a3@13 ~@3 b3@16 b3@11 ~, ~@4 c#4@8 ~@8 d4@8 ~@8 d4@8 ~@8 d4@8 ~@8 c#4@7 ~@9 d4@8 ~@8 d4@8 ~@4, ~@8 e4@9 ~@7 f#4@10 ~@6 g4@11 ~@5 f#4@10 ~@6 e4@11 ~@5 g4@16 g4@6 ~@2]/7",
  T: "f#4/2",
})).s("gm_acoustic_guitar_steel").gain(0.38).pan(0.7)

// other · clarinet
const clarinet = note("<~@69 A@2 B@3 C@2 D@3 E@2 F G H@2 ~@8>".pickRestart({
  A: "[~@8 d5@2 c#5@3 ~ b4@16 ~@2]/2", B: "[~@3 a4@2 ~ a4@2 b4@4 a4@2 g4@19 ~@3 b3@4 b3@4 c#4@4]/3",
  C: "[d4@7 ~ d4@4 f#4@9 ~@3 c#4@4 f#4@4]/2", D: "[g4 b4@2 g4@6 ~@3 d5 c#5@2 b4@7 ~@2]/3",
  E: "[~@4 a4@2 a4@2 b4@4 a4@3 g4@14 ~@3]/2", F: "~ b3!2 c#4", G: "d4@2 d4@4 d4@5 d4@5",
  H: "[e4@7 ~ d4@2 c#4@3 ~ b3@16 ~@2]/2",
})).s("gm_clarinet").gain(0.38).pan(0.4)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@45 A B C D A E F G@2 ~@39>".pickRestart({
  A: "g4@8 d4@7 ~", B: "d4@8 a4@7 ~", C: "g4@4 d4@3 ~", D: "d4@7 ~ e4@2 f#4@3 ~@3", E: "d4 a4", F: "g4@2 d4 ~",
  G: "[a4@31 ~]/2",
})).s("gm_string_ensemble_1").gain(0.38).pan(0.8)

// other · violin
const violin = note("<~@45 A B A C D E F G@2 ~@39>".pickRestart({
  A: "d4@4 b3@3 ~", B: "a3@6 ~@2 f#4@7 ~", C: "a3@8 d4@5 ~@3", D: "d4@8 b3@5 ~@3", E: "a3@3 ~ f#4@3 ~",
  F: "d4@7 ~ b3@4 ~@4", G: "[f#4@15 ~]/2",
})).s("gm_violin").gain(0.33).pan(0.6)

// other · viola
const viola = note("<~@45 A B C D E B A F@3 ~@38>".pickRestart({
  A: "g3@3 ~ g3@4", B: "f#3 d4", C: "g3@5 ~@3 g3@8", D: "f#3@5 ~@3 g3@2 a3@4 ~@2", E: "g3@7 ~ g3@7 ~",
  F: "[d4@11 ~@5]/3",
})).s("gm_viola").gain(0.38)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note("<~@45 A B C D E F G H@2 ~@39>".pickRestart({
  A: "c3@7 ~ b2@7 ~", B: "a2@4 d3 ~ e3 ~", C: "c3 b2", D: "a2@4 d3@3 ~", E: "c3@8 b2@7 ~", F: "a2@8 d3@7 ~",
  G: "c3@8 b2@5 ~@3", H: "[f#4@31 ~]/2",
})).s("gm_string_ensemble_1").gain(0.33).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@7 [x!2]!83 x ~@2>").gain(0.38)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@7 [~ x ~ x ~ x ~ x]!83 ~@3>").gain(0.83)

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

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@7 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B
  A@3 B A@3 ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.16)

stack(
  acoustic_guitar_steel, bass, acoustic_guitar_steel_2, clarinet, string_ensemble_1, violin, viola, string_ensemble_1_2,
  kick, rim, cabasa, shaker, shaker_soft
)

More by McCartney