Strudelify

Ammonia Avenue

Alan Parsons

KeyB♭ minorTempo148 bpm
0:00/0:00
// Ammonia Avenue — Alan Parsons
// 148 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 60 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(148/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 · piano · "piano clair"
const piano = note("<A B@5 C@8 D@7 E@5 F@8 G@3 H@7 I@6 J@5 K@5>".pickRestart({
  A: "~@7 db4, ~ db4@3 bb2@8, ~ bb1@7, ~@3 gb4@11 bb4@2 gb4@8, ~@3 bb4@11 db4@5 bb4@5",
  B: "[~@17 ab4@5 ~@17 [db4,ab4]@6 ~@11 bb3@5 ~@23 f4@5 a3 ~@15 f4@6 db4@3 ~@2 db4@3 f4, ~ c2@21 db4@6 f3@17 ~@6 bb2@16 eb2@12 bb3@11 ~@10 a3@11 ~@3 bb3@6, ~ ab4@13 eb4@9 ab4@13 f4@9 gb4@17 f4@5 bb3@6 eb3@17 ~@4 a2@17 [bb1,bb2]@9, ~ eb4@11 c4@11 f4@11 db4@5 ~@6 bb3@11 ~@5 bb3@3 gb4@14 gb4@11 [a1,c4]@23 ~@8, ~@6 c3@17 f2@22 [bb1,db4]@23 eb4@22 ~@30]/5", // Db5 Bb Am Bbm
  C: "[~@30 [db4,f4]@5 ~@19 db4@3 ~@17 ab4@6 ~@17 [db4,ab4]@5 ~@11 gb4@6 ~@2 gb4@3 ~@18 gb4@5 ~ a3 ~@15 f4@5 ~@9 f4@3 ~@8 g4@2 ~, ~@2 [c2,c3]@10 ~ db2@23 bb1@21 ab4@14 eb4@9 ab4@14 f4@8 gb4@11 ~@6 f4@5 bb3@12 [bb3,f4]@11 c4@22 [bb1,bb2]@11 ~ [bb1,bb2]@10 ~, ~@2 f4@7 f4@15 bb3@12 bb4@13 gb4@8 eb4@12 c4@11 db4@6 f3@17 ~@5 bb2@17 ~@5 eb3@17 ~@6 a2@16 db4@3 bb3@8 ~@4 bb3@7 ~, ~@2 c4@5 c4@5 ~ db4@17 ~@5 db4@6 bb2@16 c2@23 f2@23 bb1@22 eb2@23 a1@22 ~@5 db4@5 ~ eb4@5 ~ eb4@4 ~, ~@4 a3@8 ~@7 db3@17 gb4@11 db4@5 bb4@6 ~@5 c3@17 f4@11 db4@6 ~@5 [bb3,db4]@22 eb4@23 ~@12 a3@11 f4@8 ~@3 g4@8 ~@3]/8", // Db Db5 C Bb5 Bb Bbm
  D: "[[bb1,bb2,bb3,db4]@19 ~@39 f3@6 f3 ~@16 a2@5 ~@18 c4@5 bb3 ~@16 f4@5 ~@17 c4@5 ~@9 db4@3 [c2,c3,c4]@3, ~@19 bb1@46 ~@5 a2@11 ~@12 c3@17 ~@5 db3@16 f3@11 ~ f3@11 ~@3 f3@8 ~@3, ~@19 db4@17 bb2@5 f3@11 f4@3 bb3@9 ~@22 f3@12 f3@11 [db2,db4]@23 ~@5 c3@17 ~@5 bb3@5 ~@4, ~@19 [f3,bb3]@11 f4@11 bb3@6 bb2@17 [a1,a3,c4]@23 [c2,a3]@23 ~@21 [c2,a3]@22 ~ [bb1,bb2]@11 ~@3, ~@25 bb2@5 f3 bb3@10 db4@23 ~@11 f4@12 c4@17 ~@5 f3@11 f3@11 c4@17 ~@6 db4@8 ~@6]/7", // Bbm C Db Bb5 Am F Bb
  E: "[~@5 c4@2 ~@18 bb3@6 ~@40 f3@5 ~@17 a2@6 ~@17 c4@4, f3@8 f3@11 f3@11 ~ bb1@45 [a1,f3]@23 [c2,a3,f4]@21, ~@3 a3@5 db4@23 [bb3,db4]@23 [bb3,db4]@22 a3@11 ~ [a3,f4]@11 f3@11 f3@10, ~@9 db2@22 f3@11 f4@18 bb2@17 ~@5 a2@11 ~@12 c3@15, ~@14 db3@18 ~@5 bb2@5 f3@6 bb2@6 f3@11 f4@12 c4@22 c4@16 ~@5]/5", // Dm F Bbm Dm
  F: "[~@2 bb3 ~@20 f3 ~@16 c4@5 ~@7 f4@5 c2@5 c3@6 ~@6 db3@5 [c2,f3]@5 ~ c3@5 bb3 ~@18 bb3@3 ~@17 c4@5 ~@14 ab4@8 ~@19 db4@3 bb3 ~@10 eb4@3, ~ db2@22 c4@17 ~@6 bb3@12 ~@21 [a3,c4]@11 gb4@14 db4@9 c4@13 ab3@8 ab3@8 ~ ab3@13 gb3@6 bb2@17 ~@4 eb3@9, ~ db4@17 db4@7 ~@10 f3@10 [bb1,f3,db4]@12 ~@11 [db2,f3,bb3,db4]@12 ~@16 gb3@17 ab3@10 eb3@11 [f2,db4,f4]@22 bb3@11 gb3@11 gb3@14, ~ f3@11 f3@11 [c2,a3]@23 ~@11 [f3,a3,c4]@12 ~@21 db4@11 bb3@6 gb4@6 ~@5 c3@17 ~@5 f3@5 f3@11 db4@17 bb3@5 eb4@11 ~@3, ~@7 db3@18 ~@4 c3@17 ~@5 bb2@7 ~@32 gb2@22 c2@23 ~@21 bb1@23 eb2@13]/8", // F5 Am Bbm Db F
  G: "[~@2 gb3@6 ~@16 c4@5 ~@8 f4@3 ~@8 f4@3 ~@16 [db4,f4]@5, ~@8 [a1,a3]@22 ~@2 bb3@8 c4@5 c4@5 ~ [db4,f4]@16 ~@5, ~@8 c4@16 ~@5 f4@8 ~@3 f4@8 ~@14 bb3@10, ~@8 f3@10 f3@11 db4@5 ~ db4@6 ~@2 a3@8 ~@5 db3@16, ~@13 a2@16 [bb1,bb2]@11 [c2,c3]@11 db2@21]/3", // Db A Db Bb C
  H: "[bb3@2 ~@16 bb3@3 ~@17 c4@6 ~@16 f3@6 ~@19 db4@3 gb3 ~@15 gb3@5 ~@17 c4@5 db4@2 ~@6 f4@3 g4@2 ~@6 g4@3 bb2@6 ~@5 bb3@4, gb2@21 ~ c2@23 ~@12 ab4@9 db4@16 bb3@6 eb4@11 eb4@11 c4@16 ~@5 f4@8 ~@3 eb4@5 eb4@5 ~@16, gb4@13 db4@8 ~ c4@13 ab3@8 ~ ab3@8 ab3@15 bb1@22 ~@20 [a1,a3]@22 [bb1,bb2]@11 [bb1,bb2]@10 ~ [bb1,db4]@15, db4@11 bb3@5 gb4@6 ~@5 c3@17 [f2,db4,f4]@22 gb3@2 ~@4 bb2@17 ~@4 eb3@16 ~ f3@11 f3@11 ~ bb3@8 ~@4 bb3@8 bb3@11 ~@4, ~@6 gb3@16 ab3@11 eb3@11 ~@5 f3@6 f3@5 ~@6 bb3@11 gb3@11 eb2@21 ~@6 a2@16 ~@6 db4@5 ~@17 bb2@9]/7", // A Bb Bbm Db
  I: "[~ db4@3 ~@21 db4@3 ~@17 ab4@4 ~@19 db4@3 ~@10 bb3@5 ~@3 f4@3 ~@11 eb4@4 ~ gb4@6 ~@16 f4@5 [db4,f4]@3 ~@2 db4@3 f4, ~@7 bb1@21 c2@21 db4@6 f3@16 gb4@16 ~@5 eb4@11 ~@4 eb4@7 f4@16 ~@5 [bb1,bb2]@9, ~@7 bb4@13 gb4@8 ab4@14 eb4@8 f4@10 db4@5 ab4@6 [bb1,db4]@22 eb2@21 a3@11 a3@11 ~@2 bb3@6, ~@7 gb4@11 db4@5 bb4@5 eb4@11 c4@11 ab4@13 f4@9 ~@15 [bb3,gb4]@7 ~@4 eb3@17 ~@4 a2@17 ~@8, ~@7 db4@5 bb2@17 ~@5 c3@16 f2@22 ~@4 bb2@17 bb3@10 [bb3,f4]@11 [a1,c4]@22 ~@8]/6", // Db Bb Bbm Ebm Bb5 Am
  J: "[~@2 c4@3 ~@5 f4@3 ~@16 [db4,f4]@5 ~@18 db4@3 ~@16 ab4@6 ~@19 db4@3 ~@16 f4@5, ~@2 [c2,c3]@11 db2@21 bb1@21 eb4@11 c4@11 ab4@14 f4@9 ~@10 [bb3,gb4]@10, ~@2 f4@8 ~@13 bb3@11 gb4@11 db4@4 bb4@6 ab4@14 eb4@8 f4@11 db4@5 ab4@6 gb4@11 ~@10, ~@5 a3@9 ~@4 db3@16 db4@5 bb2@16 c2@22 f2@22 [bb1,db4]@21, ~@7 c4@6 [db4,f4]@16 ~@5 bb4@13 gb4@9 ~@5 c3@16 db4@6 f3@16 ~@5 bb2@16]/5", // Db C Ebm Bbm Db
  K: "[~@16 gb4@5 ~@17 f4@5 ~ f4 ~@6 f4@3 g4 ~@8 bb3@3 ~@17 [bb4,db5]@23 ~@14, [eb2,eb4]@21 a3@3 ~ a3@7 a3@11 [bb1,bb2]@11 [bb1,bb2]@12 [bb1,bb2,bb3,db4,f4]@40 ~@14, bb3@11 [bb3,f4]@11 [a1,c4]@22 ~@18 g4@3 ~@55, ~@6 eb3@16 f4@16 ~@5 db4@6 db4@5 eb4@6 eb4@6 ~@54, ~@27 a2@17 ~@2 bb3@8 ~@3 bb3@6 ~@57]/5", // Bbm Eb Bb Bbm Bb5 Am
})).s("gm_piano").gain(0.36)

// chords · string ensemble 2 · "ensemble"
const string_ensemble_2 = note("<~@14 A@8 B@4 C@3 D@8 E@8 ~@15>".pickRestart({
  A: "[~@20 [bb2,bb3,db4]@42 ~@24 c3@22 ~ [db3,bb3,db4]@22 [a3,c4]@19 ~@3 [bb2,bb3,db4]@11 ~ [a3,c4]@9 ~@2 [db3,bb3,db4]@10 ~@2 c4@4, ~@5 f3@43, ~@62 f4@89 ~@41, ~@63 c4@43 ~@86, ~@63 a2@2 a3@41 ~@25 c3@21 ~@13 c3@11 ~@11 [c3,a3]@5]/8", // Bbm Gb Am Bbm Am Gb F
  B: "[~@18 f4@33 ~ d4 ~@21 c3@22, ~@6 [bb2,bb3,db4]@44 ~ a3@43 ~@2, ~@51 a2@22 ~@23, ~@26 c4@21 ~, ~@21 f4@11]/4", // Bbm
  C: "[~ [db3,bb3,db4]@22 ~ c4@18 ~@3 [bb2,bb3,db4]@11 ~ [a3,c4]@10 ~ [db3,bb3,db4]@4, ~@23 [c3,a3]@20 ~@13 c3@10 ~@6]/3", // Gb Bbm Am Gb F
  D: "[~@6 [c3,a3,c4]@7 ~@5 [gb2,bb3,db4,gb4]@19 ~@4 c4 ~@2 ab3@17 ~ f2@22 ~ [bb3,db4]@20 ~ [eb2,eb3]@21 [a1,a2,f3,a3,c4]@21 [bb1,bb2,bb3,db4,f4]@11 ~ [c2,a3,c4]@10 ~ [db2,bb3,db4]@10 [c2,c3,a3,c4]@11, ~@17 gb3@19 ~@4 c3@21 [f3,ab3,db4,f4]@23 ~@21 [gb3,bb3,eb4]@22 ~@33 f4@32, ~@41 c2@21 ~@22 [bb1,bb2,gb3]@22 ~@86, ~@43 [eb3,c4]@19 ~@97 c3@11 db3@10 ~@12]/8", // F Gb Bbm Eb F Bbm F Gb …
  E: "[~ [bb3,gb4]@20 [c2,c3,eb3,ab3,c4]@21 ~@12 ab4@10 ~ [bb1,bb2,bb3,db4]@22 [eb2,eb3,gb3,bb3,eb4]@22 [a1,a2,f3,a3,c4]@21 ~ db4@10 ~ [bb1,bb2]@9 ~@4 g4@18 ~@19, [gb2,gb3,db4]@21 ~@21 f3@22 gb3@22 ~@44 bb3@21 ~ [bb1,bb3,db4]@21 ~@19, ~@43 [f2,ab3,db4,f4]@22 ~@65 [bb1,bb2,f4]@10 ~ [eb4,g4]@10 ~@2 bb2@21 ~@18]/8", // Ebm Ab Bbm Ebm F Bb Gb5 Bbm …
})).s("gm_string_ensemble_2").gain(0.31).pan(0.6)

stack(piano, string_ensemble_2)

More by Alan Parsons