Strudelify

Temporary Secretary

McCartney

KeyD♭ majorTempo132 bpm
0:00/0:00
// Temporary Secretary — McCartney
// 132 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 3 "HARPSICHRD" harpsichord (copy of ch 1 "NYLON GTR" acoustic guitar nylon)
// 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(132/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 nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@4 A ~@4 A ~@3 B C B D B E B D B E B D B C B C ~@8 B C B D ~@4 B C B D B E B D ~@24 B C B C ~@34
>`.pickRestart({
  A: "~@4 [db3,gb3,a3] ~ d3 ~ [db3,f3,ab3]@4 [db3,f3,ab3] ~@3", // Gbm Db
  B: "~@4 [db4,gb4,a4] ~@3 [db4,f4,ab4]@3 ~ [db4,f4,ab4] ~@3", C: "~@4 [db4,gb4,a4] ~@3 [db4,f4,ab4]@4 ~@4",
  D: "~@4 [db4,gb4,a4] ~@3 [db4,f4,ab4]@5 ~@3", E: "~@4 [db4,gb4,a4] ~@3 [db4,f4,ab4]@6 ~@2",
})).s("gm_acoustic_guitar_nylon").gain(0.27).pan(0.7)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@21 A B@6 C D E F G H E I G J@2 K J H E I G L M N O P M Q R S T U V W X Y Z AA AB AC AD I E F G H E I G H E I G B@3 C
  AE AF S T U V W X Y Z AA AB I E F G H E I G H E I G I AG@8 ~
>`.pickRestart({
  A: "db2@2 db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~", B: "db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~",
  C: "db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db1 ~", D: "db1 ~@3 d2 ~@3 db2@4 b1@2 ~@2",
  E: "~@4 d2 ~@3 db2@3 ~ db2 ~@3", F: "~@4 d2 ~@3 db2@4 b1 ~@3", G: "~@4 a1 ~@3 ab1@4 db1@3 ~",
  H: "~@4 d2@2 ~@2 db2@3 ~ b1 ~@3", I: "~@4 d2 ~@3 db2@4 b1@2 ~@2", J: "db2@2 db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db3@4",
  K: "db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db3@4", L: "db2@2 db2@2 db2 ~ db2 ~ db2 ~ db2 ~ db2@2 db2 ~",
  M: "db2@2 db2 ~ db2@2 db2 ~ db2 ~ db2@2 db3@4", N: "db2@3 ~ db2@2 db2 ~ db2@2 db2 ~ db2 ~ db2 ~",
  O: "db2@3 ~ db2@2 db2@2 db2@2 db2@2 db2 ~ ab2@2", P: "db2@2 db2 ~ db2@2 db2 ~ db2@2 db2 ~ db2@2 db2@2",
  Q: "db2@3 ~ db2 ~ db2 ~ db2@2 db2@2 db2@2 db2@2", R: "db2@2 db2@2 db2 ~ db2@2 db2@2 db2 ~ db2@4",
  S: "db2@2 db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2@2", T: "db2 ~ db2@2 db2 ~ db2@2 db2 ~ db2 ~ db2 ~ db2 ~",
  U: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~", V: "d2@2 d2 ~ d2 ~ d2 ~ d2@2 d2 ~ d2 ~ d2 ~",
  W: "eb2@2 eb2 ~ eb2 ~ eb2@2 eb2 ~ eb2 ~ eb2 ~ eb2@2", X: "eb2 ~ eb2 ~ eb2@2 eb2@2 eb2 ~ eb2 ~ eb2 ~ eb2 ~",
  Y: "e2@2 e2@2 e2 ~ e2 ~ e2 ~ e2@2 e2 ~ e2 ~", Z: "e2 ~ e2 ~ e2 ~ e2 ~ e2@2 e2 ~ e2@2 e2 ~",
  AA: "f2@2 f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~", AB: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~",
  AC: "f2@2 f2 ~ f2 ~ f2@2 f2@2 f2 ~ f2@2 f2 ~", AD: "f2 ~ f2 ~ f2@2 f2 ~ f2 ~ f2 ~ f2@2 f2 ~",
  AE: "c2@2 c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@2, db1 ~@15", AF: "c2 ~ c2@2 c2 ~ c2@2 c2 ~ c2 ~ c2 ~ c2 ~",
  AG: "[~@4 a1 ~@3 ab1@4 db1@116]/8",
})).s("gm_fretless_bass").gain(0.33)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@29 A B A C D B A E ~@4 D B A E ~@20 A B F G A B F H F I F H ~@16 F I J E J B J E F B F H A K ~@8
>`.pickRestart({
  A: "~@4 d5@2 a4@2 db5@4 b4 ~@3", B: "~@4 d5@2 a4@2 db5@3 ~ db5 ~@3", C: "~@2 a4 ~ ab4@2 ~@2",
  D: "~@4 d5@2 a4@2 db5@3 ~ b4 ~@3", E: "~@4 a4@2 gb4@2 ab4@3 ~ ab4 ~@3", F: "~@4 d5@2 ~@2 db5@4 b4 ~@3",
  G: "~@4 a4@2 gb4@2 ab4@4 ~ ab4 ~@2", H: "~@4 a4@2 ~@2 ab4@3 ~ ab4 ~@3", I: "~@4 d5@2 a4 ~ db5@3 ~ db5 ~@3",
  J: "~@4 d5@2 a4 ~ db5@4 b4 ~@3", K: "~@2 d5 a4 db5 ~ db5 ~",
})).s("gm_lead_2_sawtooth").gain(0.4).pan(0.4)

// other · lead 2 sawtooth · "SAW WAVE" · soft notes
const lead_2_sawtooth_soft = note("<~@32 A ~@34 B ~@3 B C B ~ B C ~@16 D ~@7 D ~ D A ~@10>".pickRestart({
  A: "~@3 gb4 ~@4", B: "~@6 a4 ~@9", C: "~@6 gb4 ~@9", D: "~@3 a4 ~@4",
})).s("gm_lead_2_sawtooth").gain(0.25).pan(0.4)

// other · clavinet
const clavinet = note("<A B@51 C D E F G H I J K B@20 L M D E F G H I J K B@15 N ~@8>".pickRestart({
  A: "~@15 b4", B: "c5 e4 db5 f5 db5 gb4 db4 gb5 f4 f3!2 e4 f4 f3!2 b4",
  C: "c5 e4 db5 f5 db5 gb4 db4 gb5 f4 f3!2 e4 f4 f3!2 g4", D: "ab4 c4 a4 db5 a4 d4 a3 d5 db4 db3!2 c4 db4 db3!2 g4",
  E: "ab4 c4 a4 db5 a4 d4 a3 d5 db4 db3!2 c4 db4 db3!2 ab4", F: "a4 db4 bb4 d5 bb4 eb4 bb3 eb5 d4 d3!2 db4 d4 d3!2 ab4",
  G: "a4 db4 bb4 d5 bb4 eb4 bb3 eb5 d4 d3!2 db4 d4 d3!2 a4", H: "bb4 d4 b4 eb5 b4 e4 b3 e5 eb4 eb3!2 d4 eb4 eb3!2 a4",
  I: "bb4 d4 b4 eb5 b4 e4 b3 e5 eb4 eb3!2 d4 eb4 eb3!2 bb4", J: "b4 eb4 c5 e5 c5 f4 c4 f5 e4 e3!2 eb4 e4 e3!2 bb4",
  K: "b4 eb4 c5 e5 c5 f4 c4 f5 e4 e3!2 eb4 e4 e3!2 b4", L: "g4 b3 ab4 c5 ab4 db4 ab3 db5 c4 c3!2 b3 c4 c3!2 gb4",
  M: "g4 b3 ab4 c5 ab4 db4 ab3 db5 c4 c3!2 b3 c4 c3!2 g4", N: "c5 e4 db5 f5 db5 gb4 db4 gb5 f4 f3!2 e4 f4 ~@3",
})).s("gm_clavinet").gain(0.22).pan(0.8)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@2 A B@4 C D E D F B@4 C D E D F ~@8 G H@2 I J@2 H J ~@4 J@2 H J ~@20 G H@2 I J@2 H J@3 H J ~@16 G H@2 I J@2 H J@3 H
  J H J ~@8
>`.pickRestart({
  A: "~@10 db3 ~ db3 ~ db3 ~", B: "db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~",
  C: "db3 ~@3 db3 ~@3 db3 ~ db3 ~ db3 ~ db3 ~", D: "db3 ~@3 db3 ~@3 db3 ~@3 db3 ~ db3 ~",
  E: "db3 ~ db3 ~ db3 ~@3 db3 ~ db3 ~ db3 ~ db3 ~", F: "db3 ~@3 db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~",
  G: "~@4 [gb5,a5]@2 ~@2 [db5,f5]@4 [db5,ab5] ~@3, ~@4 d5 ~@3 ab5@3 ~@5", // Gbm Db Db5
  H: "~@4 [d5,gb5,a5] ~@3 [db5,f5,ab5]@4 [db5,f5,ab5] ~@3", I: "~@4 [d5,gb5,a5] ~@3 [db5,f5,ab5]@4 ~@4",
  J: "~@4 [d5,gb5,a5] ~@3 [db5,f5,ab5]@3 ~ [db5,f5,ab5] ~@3", // D Db
})).s("gm_rock_organ").gain(0.38).pan(0.2)

// chords · rock organ · "ORGAN 3" · soft notes
const rock_organ_soft = note(`<
  ~@7 A B C B D ~@4 A B C B D ~@32 E@2 F@2 G@2 H@2 I@4 ~@16 J@2 K@2 F@2 G@2 H@2 L@2 ~@22
>`.pickRestart({
  A: "~@2 db3 ~@3 db3 ~@9", B: "~@2 db3 ~@3 db3 ~@3 db3 ~@5", C: "~@6 db3 ~@9", D: "~@2 db3 ~@13", E: "[f4,ab4,db5]/2",
  F: "[gb4,a4,d5]/2", G: "[g4,bb4,eb5]/2", H: "[ab4,b4,e5]/2", I: "[a4,c5,f5]/4", J: "[e4,g4,c5]/2",
  K: "[[f4,ab4,db5]@15 ~]/2", L: "[a4,c5,f5]/2",
})).s("gm_rock_organ").gain(0.22).pan(0.2)

// other · orchestra hit · "ORCHESTRA"
const orchestra_hit = note(`<
  ~@29 A B C D E F C D ~@4 E F C D ~@20 A B C D E F C D E F C D ~@16 A B C D E F C D E F C D C G ~@8
>`.pickRestart({
  A: "~@2 d5 ~ [db5,db6]@2 b4 ~, ~@4 d6 ~@7 b5 ~@3", B: "~@4 [d5,d6] ~@3 [db5,db6]@3 ~ [db5,db6] ~@3",
  C: "~@4 [d5,d6] ~@3 [db5,db6]@4 [b4,b5]@2 ~@2", D: "~@4 [a4,a5] ~@3 [ab4,ab5]@4 [db4,db5]@3 ~",
  E: "~@4 [d5,d6] ~@3 [db5,db6]@4 [b4,b5] ~@3", F: "~@4 [d5,d6] ~@3 [db5,db6]@3 ~ db6@2 ~@2, ~@12 db5 ~@3",
  G: "~@4 [a4,a5] ~@3 [ab4,ab5]@4 db5@2 ~@2, ~@12 db4 ~@3", // A Ab
})).s("gm_orchestra_hit").gain(0.38)

// other · shakuhachi
const shakuhachi = note(`<
  A B@28 ~@8 B@4 ~@4 B@7 C D E F G H I J K B@4 ~@12 B@4 L M D E F G H I J K B@2 ~@22
>`.pickRestart({
  A: "~@15 b4", B: "c5 e4 db5 f5 db5 gb4 db4 gb5 f4 f3!2 e4 f4 f3!2 b4",
  C: "c5 e4 db5 f5 db5 gb4 db4 gb5 f4 f3!2 e4 f4 f3!2 g4", D: "ab4 c4 a4 db5 a4 d4 a3 d5 db4 db3!2 c4 db4 db3!2 g4",
  E: "ab4 c4 a4 db5 a4 d4 a3 d5 db4 db3!2 c4 db4 db3!2 ab4", F: "a4 db4 bb4 d5 bb4 eb4 bb3 eb5 d4 d3!2 db4 d4 d3!2 ab4",
  G: "a4 db4 bb4 d5 bb4 eb4 bb3 eb5 d4 d3!2 db4 d4 d3!2 a4", H: "bb4 d4 b4 eb5 b4 e4 b3 e5 eb4 eb3!2 d4 eb4 eb3!2 a4",
  I: "bb4 d4 b4 eb5 b4 e4 b3 e5 eb4 eb3!2 d4 eb4 eb3!2 bb4", J: "b4 eb4 c5 e5 c5 f4 c4 f5 e4 e3!2 eb4 e4 e3!2 bb4",
  K: "b4 eb4 c5 e5 c5 f4 c4 f5 e4 e3!2 eb4 e4 e3!2 b4", L: "g4 b3 ab4 c5 ab4 db4 ab3 db5 c4 c3!2 b3 c4 c3!2 gb4",
  M: "g4 b3 ab4 c5 ab4 db4 ab3 db5 c4 c3!2 b3 c4 c3!2 g4",
})).s("gm_shakuhachi").gain(0.27).pan(0.6)

// other · synth drum
const synth_drum = note("<~@10 A@3 ~@16 A@16 ~@10 A@8 ~@2 A@12 ~@8 A@22 ~@8>".pickRestart({
  A: "~@4 db2 ~@7 db2 ~@3",
})).s("gm_synth_drum").gain(0.55)

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

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!11 [~@2 x ~@3 x!2] [~ x ~ x]!93 [~ x ~@2] ~@8>").gain(0.55)

// drums · low tom
const low_tom = s("lt").struct("<~@63 A B ~@16 C D E F ~@30>".pickRestart({
  A: "~@5 x!3", B: "~@3 x!3 ~@2", C: "x!8", D: "x!3 ~ x ~ x!2", E: "x!7 ~", F: "x!3 ~ x ~@3",
})).gain(0.33)

// drums · crash
const crash = s("cr").struct("<~@12 [~ x ~@2]!2 ~@101>").gain(0.49)

stack(
  acoustic_guitar_nylon, bass, lead_2_sawtooth, lead_2_sawtooth_soft, clavinet, rock_organ, rock_organ_soft,
  orchestra_hit, shakuhachi, synth_drum, kick, snare, low_tom, crash
)

More by McCartney