Strudelify
What Goes Up cover art

1984 · Pyramid

What Goes Up

The Alan Parsons Project

KeyF minorTempo100 bpm
0:00/0:00
// What Goes Up — The Alan Parsons Project
// 100 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 5/4 at bar 12, 4/4 at bar 13, 3/4 at bar 15, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 29.
setcpm(100/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 · epiano1 · "WHAT GOES UP...                 ;Eric Woolfson / Alan Parsons"
const epiano1 = note("<A@4 B@4 C D E@4 ~@8 C D E@4 ~@8 C D E@4 ~@20 F@7 G H@8 I@4 ~@3>".pickRestart({
  A: "[[f3,c4] ~ [f3,c4]@3 ~ eb4@17 ~ [bb3,f4] ~ [eb3,bb3]@3 ~ [f3,c4]@30 ~@4, ~@3 ab3@5 ~@24]/4", // F5 Bb5 Eb5 F5
  B: "[[f3,c4] ~ [f3,c4]@3 ~ eb4@17 ~ [bb3,f4] ~ [eb3,bb3]@3 ~ [f3,c4]@33 ~, ~@3 ab3@5 ~@24]/4", // F5 Bb5 Eb5 F5
  C: "[f3,c4] ~ [f3,c4]@3 ~ [ab3,eb4]@9 ~", D: "[eb3,bb3] ~ [eb3,bb3]@4 [f3,c4]@9 ~",
  E: "[[f3,c4] ~ [f3,c4]@3 ~ [ab3,eb4]@4 [bb3,f4] ~ [g3,d4]@6 ~@2 [f3,c4] ~ [f3,c4]@3 ~ [ab3,eb4]@9 ~ [eb3,bb3] ~ [eb3,bb3]@3 ~ [f3,c4]@8 ~@2 [f3,c4] ~ [f3,c4]@3 ~ [ab3,eb4]@3 ~ [bb3,f4] ~]/4", // F5 Ab5 Bb5 G5 F5 Ab5 Eb5 F5 …
  F: "[eb4,eb5] ~ [eb4,eb5] ~ [eb4,eb5] ~ [eb4,eb5] ~ [eb4,eb5] ~ [eb4,eb5] ~ [eb4,eb5] ~ [eb4,eb5] ~", // Eb
  G: "[eb4,eb5] ~@7", H: "[[f3,c4] ~ [f3,c4]@4 [ab3,eb4]@17 ~ [bb3,f4] ~ [eb3,bb3]@4 [f3,c4]@32 ~@2]/4",
  I: "[[f3,c4,f4,ab4] ~ [f3,c4,f4,ab4]@4 [ab3,eb4,ab4,c5]@17 ~ [bb3,f4,bb4,d5] ~ [eb3,bb3,eb4,g4]@4 [f3,c4,f4,ab4]@32 ~@2]/4", // Fm Ab Bb Eb Fm
})).s("gm_epiano1").gain(0.33).pan(0.4)

// bass · fretless bass
const bass = note(`<
  A B C@12 D@8 C@6 E@3 F D@3 G C@6 H I H J K I L M N O N P Q O R@2 S@8 T U V W C@12 X@3
>`.pickRestart({
  A: "f1@4 f1@4 f1@3 ~ f1@2 f1@2", B: "f1@3 ~ f1@3 ~ f1@2 f1@2 f1@3 ~", C: "f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~",
  D: "c2@11 ~ c3@3 ~", E: "c2@15 ~", F: "c2@11 ~ g1@4", G: "c2@11 ~ g1@3 ~", H: "c2@4 g2@4 c2@3 ~ g1@3 ~",
  I: "c2@4 a2@4 c2@4 g1@3 ~", J: "c2@4 g2@4 c2@3 ~ g1@4", K: "c2@4 g2@4 c2@4 g1@3 ~", L: "c2@3 ~ g2@4 c2@3 ~ g1@3 ~",
  M: "c2@3 ~ g2@4 c2@3 ~ d2@3 ~", N: "eb2@4 bb2@4 eb2@3 ~ bb1@3 ~", O: "eb2@4 c3@4 eb2@4 bb1@3 ~",
  P: "eb2@4 bb2@4 eb2@3 ~ bb1@4", Q: "eb2@4 bb2@4 eb2@4 bb1@3 ~", R: "eb2@3 ~ bb2@4 eb2@3 ~ bb1@3 ~", S: "eb2@15 ~",
  T: "eb2@2 eb2@2 eb2 ~ eb2@2 eb2@2 eb2 ~ eb2 ~ eb2 ~", U: "eb2 ~ eb2 ~ eb2@2 eb2@2 eb2@2 eb2 ~ eb2 ~ eb2 ~",
  V: "eb2 ~ eb2 ~ eb2@2 eb2 ~ eb2 ~ eb2 ~ eb2@2 eb2 ~", W: "eb2 ~@7", X: "[f1 ~ ab1@3 ~ c2@42]/3",
})).s("gm_fretless_bass").gain(0.49)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@13 A@3 B@2 C@2 B@2 ~@5 D@3 B@2 C@2 B@2 ~@5 A@3 B@2 C@2 B@2 E F G E@2 F G E H I J I K@2 L@2 M@2 N O ~@15
>`.pickRestart({
  A: "[~@16 [g3,c4,e4,g4]@14 ~@2 [a3,d4,f4,g4]@15 ~, ~@15 [c3,e3]@14 ~@2 [a2,c3]@16 ~]/3", // C Dm C Am
  B: "[~ g4@13 ~@2 [g3,c4,e4,g4]@13 ~@3, [g2,d3,b3,d4,f4]@14 ~ [c3,e3]@14 ~@3]/2", // C G7 C
  C: "[~ g4@13 ~@2 [a3,d4,f4,g4]@15 ~, [c3,e3,g3,c4,e4]@14 ~ [a2,c3]@16 ~]/2", // Dm C Am
  D: "[~@16 [c4,e4,g4]@13 ~@3 [a3,d4,f4,g4]@15 ~, ~@15 [c3,e3,g3]@14 ~@2 [a2,c3]@16 ~]/3", // C Dm C Am
  E: "[bb3,eb4,g4]@2 [bb3,eb4,g4]!2 [bb3,eb4,g4]@2 [bb3,eb4,g4]!2 [bb3,eb4,g4]@2 [bb3,eb4,g4]!2 [bb3,eb4,g4]@2 [bb3,eb4,g4]!2", // Eb
  F: "[c4,f4,ab4]@2 [c4,f4,ab4]!2 [c4,f4,ab4]@2 [c4,f4,ab4]!2 [c4,f4,ab4]@2 [c4,f4,ab4]!2 [c4,f4,ab4]@2 [c4,f4,ab4]!2", // Fm
  G: "[d4,f4,ab4]@2 [d4,f4,ab4]!2 [d4,f4,ab4]@2 [d4,f4,ab4]!2 [d4,f4,ab4]@2 [d4,f4,ab4]!2 [d4,f4,ab4]@2 [d4,f4,ab4]!2", // Ddim
  H: "[gb3,b3,eb4,gb4]@13 ~@3", I: "[ab3,bb3,db4,f4]@7 ~", J: "[gb3,b3,eb4]@7 ~",
  K: "[[gb3,b3,eb4]@7 ~ [bb3,db4,f4]@7 ~, ~@15 ab3@14 ~@3]/2", // B Bbm
  L: "[[gb3,b3,eb4]@14 ~@2 [bb3,db4,f4]@15 ~, ~@15 ab3@15 ~@2]/2", // B Bbm
  M: "[[gb3,bb3,eb4]@7 ~ [bb3,db4,f4]@7 ~, ~@15 ab3@14 ~@3]/2", N: "[g3,bb3,eb4]@7 ~", O: "[g3,bb3,eb4]@3 ~@13",
})).s("gm_acoustic_guitar_steel").gain(0.27).pan(0.4)

// chords · flute
const flute = note("<~@8 A B C@3 D E F G H I J K H L M N@2 O P Q F G H I J R S ~@34 T@3 ~ U@3 ~ V@3 ~@4>".pickRestart({
  A: "c4 c4@2 eb4@4 ~", B: "bb3@2 bb3@4 c4@7 ~@3",
  C: "[c4@2 c4@4 eb4@4 f4@2 d4@6 eb4 d4 c4@2 c4@4 eb4@8 ~@2 bb3@2 bb3@4 c4@6]/3", D: "~@3 f3 c4@2 c4@4 eb4@4 f4@2",
  E: "g4@6 c4@2 c4@3 d4@3 e4@2", F: "e4 d4@7 d4@3 e4@3 f4@2", G: "g4 a4 g4@9 ~ e4@4", H: "e4@3 ~",
  I: "~@6 c4@2 c4@3 d4@3 e4@2", J: "e4@2 d4@6 d4@3 e4@3 f4@2", K: "g4 a4 g4@10 e4@4",
  L: "[c4,f4] [c4,f4]@2 [eb4,ab4]@3 ~@2", M: "[bb3,eb4] [bb3,eb4]@2 [c4,f4]@3 ~@2",
  N: "[[c4,f4]@2 [c4,f4]@4 [eb4,ab4]@4 [f4,bb4]@2 [d4,g4]@6 [eb4,ab4] [d4,g4] [c4,f4]@2 [c4,f4]@4 [eb4,ab4]@6]/2", // F5 Ab5 Bb5 G5 Ab5 G5 F5 Ab5
  O: "~@2 [bb3,eb4] [bb3,eb4]@2 [c4,f4]@3", P: "~@2 [c4,f4] [c4,f4]@2 [eb4,ab4]@2 [f4,bb4]",
  Q: "c5@6 c4@2 c4@3 d4@3 e4@2", R: "g4 a4 g4@8 ~@2 e4@4", S: "e4@11 ~@5", T: "[c4 c4@2 eb4@8 ~ f4 bb3@2 c4@9]/3",
  U: "[[c4,f4] [c4,f4]@2 [eb4,ab4]@9 [f4,bb4] [bb3,eb4]@2 [c4,f4]@9]/3", // F5 Ab5 Bb5 Eb5 F5
  V: "[[c4,f4,ab4] [c4,f4,ab4]@2 [eb4,ab4,c5]@9 [f4,bb4,d5] [bb3,eb4,g4]@2 [c4,f4,ab4]@9]/3", // Fm Ab Bb Eb Fm
})).s("gm_flute").gain(0.06).pan(0.4)

// chords · synth strings 2
const synth_strings_2 = note("<~ A B C D E B F ~@42 G H I G@2 H I G ~@8 J@4 ~@15>".pickRestart({
  A: "[g5,bb5,c6]", B: "[d5,f5,c6]", C: "[db5,f5,bb5]", D: "[f5,ab5,c6]", E: "[g5,bb5,c6,eb6]", F: "[db5,f5,c6]",
  G: "[g4,bb4,eb5]", H: "[ab4,c5,f5]", I: "[bb4,d5,f5]", J: "[eb6@49 ~@15]/4",
})).s("gm_synth_strings_2").gain(0.25)

// other · overdriven guitar
const overdriven_guitar = note("<~@57 [~@4 bb5 g5 eb5 bb4] gb4 ~@26>").s("gm_overdriven_guitar").gain(0.25).pan(0.4)

// chords · electric guitar jazz
const electric_guitar_jazz = note("<A@4 B@4 ~@28 C@4 D E F G H I J K L M ~@35>".pickRestart({
  A: "[[eb4,ab4,bb4,c5]@11 ~ [eb4,ab4,bb4,c5]@2 [eb4,g4,bb4,c5]@12 bb3@2 [bb3,eb4,g4,bb4,c5]@2 [d4,f4,bb4,c5]@13 ~ [d4,f4,bb4,c5] ~ [db4,f4,bb4,c5]@17 ~]/4", // Ab Cm7 Bb Bbm
  B: "[[eb4,ab4,bb4,c5]@11 ~ [bb3,eb4,ab4,bb4,c5]@2 [eb4,g4,bb4,c5]@12 bb3@2 [bb3,eb4,g4,bb4,c5]@2 [d4,f4,bb4,c5]@13 ~ [d4,f4,bb4,c5] ~ [db4,f4,bb4,c5]@17 ~, ~@14 bb3@11 ~@39]/4", // Ab Cm7 Bb Bbm
  C: "[g4@13 ~ g4@4 f4@2 c4 ~ g3@4 f3@4 c3@7 ~ ab3@4 bb3@2 g3@8 g4@12, f4 ~@13 f4 ~@37 f4 ~@11]/4",
  D: "f4 ~ c4@6 ab3 ~ g3@5 ~", E: "f3@2 c3@5 ~ c3@2 ab3@4 bb3 ~", F: "c4@8 g4@3 e4@3 c4@2",
  G: "f4@3 d4@3 a3@2 f3@3 d4@2 c4@2 ~", H: "b3@3 c4@3 d4@2 f3@2 ~ g3@2 f3@2 ~", I: "e3@8 c4@3 d4@2 e4@3",
  J: "e4@5 e4 ~ f4 g4 c5 ~ d5 e5@3 d5", K: "a5@8 a5@3 g5@2 f5 ~ e5", L: "d5@9 g5 ~ a5 b5@3 a5", M: "d6@7 ~",
})).s("gm_electric_guitar_jazz").gain(0.44).pan(0.2)

// chords · trumpet
const trumpet = note("<~@50 A B C D E F G H ~@27>".pickRestart({
  A: "[g4,eb5]@10 [g4,eb5]!3 bb4 eb5 g5, ~@7 g4", B: "~@2 ab4!3 ~ ab4!2 ab4@6 f5!2, f5@13 ~@3",
  C: "[ab4,f5]@10 [ab4,f5]!3 bb4 ab4@2, ~@14 f5 ~", // Db
  D: "[bb4,g5]@9 f5 [bb4,eb5] [bb4,d5] [bb4,eb5] ~ [bb4,eb5] [bb4,f5]", // Eb Eb5 Bb Eb5 Bb5
  E: "[eb5,g5]@9 ~ [bb4,eb5] [eb5,g5] [eb5,bb5] ~ [eb5,g5] ~", F: "[c5,ab5]@13 ~ [c5,ab5]!2",
  G: "[d5,ab5]@9 ~ [bb4,ab5]!3 g5 [bb4,f5] ~", H: "[g4,eb5]@15 ~",
})).s("gm_trumpet").gain(0.32).pan(0.8)

// other · string ensemble 1
const string_ensemble_1 = note("<~@55 A B C D@8 E@3 F ~@12 G@3>".pickRestart({
  A: "~@2 d4 c4", B: "bb3 g4 f4@2", C: "eb4", D: "eb6/8",
  E: "[eb5,eb6] ~ [eb5,eb6] ~ [eb5,eb6] ~ [eb5,eb6] ~ [eb5,eb6] ~ [eb5,eb6] ~ [eb5,eb6] ~ [eb5,eb6] ~", // Eb
  F: "[eb5,eb6] ~@15", G: "[[f2,f3,ab3,c4] ~ [ab2,f3,ab3,c4]@2 bb2@2 [c3,ab3,c4,eb4]@42]/3",
})).s("gm_string_ensemble_1").gain(0.2)

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

// drums · rim
const rim = s("rim").struct("<[x ~@2 x ~@2 x ~@9]!4 ~@81>").gain(0.33)

// drums · snare
const snare = s("sd").struct("<A B A@9 C D@2 ~@8 A@3 C D@2 ~@8 A@3 C D@2 A@16 ~@9 E F G A@12 B ~@2>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~ x", D: "x!2", E: "x ~ x!6", F: "x!8", G: "x ~@2 x",
})).gain(0.49)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@66 [x!8] [~ x ~@6] ~@17>").gain(0.27)

// drums · hihat
const hihat = s("hh").struct("<A@4 B@7 C D@2 ~@8 B@3 C D@2 ~@8 B@3 C D@2 ~@16 B@8 E@3 F B@12 G ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x", C: "~ x", D: "x!2", E: "x!8", F: "x", G: "~ x ~@2",
})).gain(0.44)

// drums · open hat
const open_hat = s("oh").struct("<~@50 [~ x!3]!8 ~@27>").gain(0.44)

// drums · crash
const crash = s("cr").struct("<~@14 x!9 ~@5 x!9 ~@5 x!17 ~@26>").gain(0.38)

// drums · ride
const ride = s("rd").struct("<~@14 A@8 ~@6 A@8 ~@6 B@8 ~@11 C D ~@22>".pickRestart({
  A: "~ x!15", B: "~ x ~ x!3 ~ x!3 ~ x!3 ~ x", C: "~@15 x", D: "x",
})).gain(0.27)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@50 [x ~ x ~ x ~ x!3 ~ x!3 ~ x!2]!8 ~@27>").gain(1.66)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@50 [~@3 x ~@12]!8 ~@27>").gain(1.11)

stack(
  epiano1, bass, acoustic_guitar_steel, flute, synth_strings_2, overdriven_guitar, electric_guitar_jazz, trumpet,
  string_ensemble_1, kick, rim, snare, snare_soft, hihat, open_hat, crash, ride, cabasa, cabasa_soft
)

More by The Alan Parsons Project