Strudelify

Angels Among Us

Alabama

KeyA♭ majorTempo68 bpm
0:00/0:00
// Angels Among Us — Alabama
// 68 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 17, 4/4 at bar 17) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 4 "Bass Clef" piano (copy of ch 5 "Bass Guitar" electric bass pick)
// note: Full arrangement: all 69 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(68/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.

// other · alto sax · "Soprano-Alto"
const alto_sax = note(`<
  ~@4 A B C ~ D E@2 F@2 G H I@2 J K L M N O P Q R S Q T U ~ V W X Y Z AA AB AC AD J K L M N O P Q R S ~ AE AF AG AH AI
  AJ AK AL AM AN ~@8
>`.pickRestart({
  A: "~@10 eb4!2 eb4@2 eb4@2", B: "eb4@2 eb4 eb4@3 eb4!2 eb4@3 ~ eb4@2 eb4@2", C: "eb4@3 ~@13",
  D: "~@10 ab4!2 ab4@2 ab4@2", E: "[g4@3 ~@2 g4!3 f4@3 f4 f4@2 f4 f4@4 ~@3 f4!2 eb4@2 eb4@2 eb4@3 ~]/2",
  F: "[eb4@2 eb4 eb4@4 ~@3 f4@2 f4@2 db4 eb4@8 ~ f4@8]/2", G: "g4@5 ~ g4@2 ab4@2 ab4 ab4@3 db4@2",
  H: "eb4@3 ~@3 eb4@2 f4@2 g4 ab4@3 ab4@2",
  I: "[eb4@3 ~@2 eb4 f4 ab4 c5@2 db5@2 bb4 ab4@2 bb4@8 ~@3 ab4@2 g4@2 f4 eb4]/2",
  J: "c4@5 ~ eb4@2 [eb4,ab4]@3 ~ [eb4,g4]@2 [eb4,ab4]@2", K: "~@2 eb4@2 db4@2 c4 db4@3 [db4,bb4]@3 ~@3",
  L: "~@4 c4@2 eb4@2 [eb4,g4]@2 [eb4,ab4]@3 ~ [eb4,bb4]@2", // Eb Ab5 Eb5
  M: "[f4,bb4]@2 [f4,c5]@2 [f4,ab4]@2 f4 [eb4,bb4]@3 ab4@2 g4@2 db4@2", // Bb5 F5 Fm Eb5
  N: "c4@5 ~ eb4@2 [eb4,g4]@2 [eb4,ab4]@3 ~ eb4@2", O: "eb4@3 ~ db4@2 c4 db4@3 [db4,bb4]@3 ~ eb4@2",
  P: "f4@2 g4@2 ab4@2 bb4 eb4@4 ~@5", Q: "~@7 eb4",
  R: "f4@2 g4@2 [f4,ab4]@2 [f4,bb4]@2 [eb4,c5]@3 ~ bb4 ab4 g4@2, ~@12 eb4@3 ~", S: "bb4@2 ab4@5 ~@9, eb4@7 ~@9",
  T: "c4@2 eb4@2 eb4@2 c4 eb4@4 ~@2 eb4 f4 g4", U: "ab4@2 ab4@2 db4@2 f4@3 eb4 db4@4 ~@2", V: "~@15 ab4",
  W: "ab4@2 ab4@2 ab4@2 ab4 g4@3 g4@3 ~ g4@2", X: "f4@3 f4 f4@2 f4 f4@4 ~@4 f4",
  Y: "eb4@2 eb4@2 eb4@2 eb4 eb4@4 ~@4 eb4", Z: "f4@2 f4@2 f4@2 db4 eb4@8 ~", AA: "f4@8 g4@5 ~ g4!2",
  AB: "ab4@2 ab4 ab4@3 db4@2 eb4@3 ~@5", AC: "f4@2 g4 ab4@3 ab4@2 eb4@3 ~@2 eb4 f4 ab4",
  AD: "c5@2 db5@2 bb4@2 ab4 bb4@3 ab4@2 g4@2 f4 eb4", AE: "~@15 eb4", AF: "f4@2 g4@2 ab4@2 bb4 bb4@3 eb4@5 ~",
  AG: "c5@2 db5@2 bb4@2 ab4 bb4@9", AH: "b4@7 ~@3 a4@2 ab4@2 gb4 e4",
  AI: "db4@5 ~ e4@2 [e4,a4]@3 ~ [e4,ab4]@2 [e4,a4]@2", AJ: "~@2 e4@2 d4@2 db4 d4@3 [d4,b4]@3 ~@3",
  AK: "~@4 db4@2 e4@2 [e4,ab4]@2 [e4,a4]@3 ~ [e4,b4]@2", // E A5 E5
  AL: "[gb4,b4]@2 [gb4,db5]@2 [gb4,a4]@2 gb4 [e4,b4]@3 a4@2 ab4@2 d4@2", AM: "db4@5 ~ e4@2 [e4,ab4]@2 [e4,a4]@3 ~ e4@2",
  AN: "e4@3 ~ d4@2 db4 d4@3 [d4,b4]@3 ~ e4@2", // G
})).s("gm_alto_sax").gain(0.72)

// other · alto sax · "Soprano-Alto" · soft notes
const alto_sax_soft = note("<~@61 A B C D E F@3>".pickRestart({
  A: "gb4@2 ab4@2 a4@2 b4 e4@4 ~@5", B: "~@7 e4",
  C: "gb4@2 ab4@2 [gb4,a4]@2 [gb4,b4]@2 [e4,db5]@3 ~ b4 a4 ab4@2, ~@12 e4@3 ~", D: "b4@2 a4@5 ~@8 e4, e4@7 ~@9",
  E: "gb4@2 ab4@2 a4@2 b4@2 db5@3 ~ b4@3 ~", F: "[a4@47 ~]/3",
})).s("gm_alto_sax").gain(0.4)

// chords · piano · "Treble Clef"
const piano = note(`<
  A B C D E F G H I J K L M N O P@2 Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM Q R S T U V W X Y AN AO@2
  AP AQ AR AS AT AU AT AU AT AV@2 AW AX AY AZ BA BB
>`.pickRestart({
  A: "~ [eb4,c5,eb5]", B: "[eb4,g4,bb4] [ab3,db4,f4,ab4]", C: "[g3,db4,eb4]@8 [ab3,c4,eb4]@5 ab3 eb4 ab4",
  D: "[bb3,eb4,g4]@2 ab4 eb4@3 ab3@2 [ab3,db4,f4]@5 ab3 db4 f4", E: "[g3,c4,eb4] [f3,bb3,db4] [ab3,c4,eb4]!2",
  F: "[g3,bb3,eb4]!2 [ab3,c4,eb4]!2", G: "[ab3,db4,eb4] [ab3,db4,f4] [ab3,c4,eb4]!2",
  H: "[ab3,c4,eb4]!2 [ab3,db4,eb4]!2", I: "[g3,bb3,eb4]@4 [g3,bb3,eb4]@4 [ab3,c4,eb4]@4 [c4,eb4] ab3 c4 ab4",
  J: "[bb3,eb4,g4]@4 [bb3,eb4,g4]@4 [ab3,c4,f4]@4 [c4,f4] ab3 c4 f4", // Eb Fm F5
  K: "[ab3,db4,f4]@4 [ab3,db4,f4]@4 [ab3,c4,eb4]@4 [ab3,ab4] eb4 c4 ab3", // Db Ab
  L: "[ab3,c4,f4]@4 [ab3,c4,f4]@4 [ab3,db4,f4]@4 f4 ab3 db4 f4", M: "[bb3,eb4,g4] [eb4,g4,bb4] [db4,f4,ab4,db5]!2",
  N: "[c4,eb4,g4,bb4]!2 [db4,eb4,f4,ab4]!2", O: "[db4,eb4,g4,bb4]@4 eb4@4 [db4,f4]@2 g4 ab4@3 ab4@2",
  P: "[[c4,eb4]@4 ~ eb4 f4 ab4 [eb4,f4,c5]@2 db5@2 bb4 ab4@2 [db4,eb4,bb4]@9 [eb5,eb6]@8]/2", // Cm F7 Eb7 Eb
  Q: "c4@3 eb4 [c4,eb4,ab4]@2 [c4,eb4,g4] [c4,eb4,ab4]", R: "~@2 eb4@2 db4@2 c4 db4@3 [db4,eb4,bb4]@6",
  S: "~@2 c4 eb4 [c4,eb4,g4] [c4,eb4,ab4]@2 bb4", T: "[db4,f4,bb4]@2 c5@2 ab4@2 f4 [db4,bb4]@3 ab4@2 g4@2 db4@2",
  U: "c4@3 eb4 [c4,eb4,g4] [c4,eb4,ab4]@2 eb4", V: "[ab3,db4,eb4]@4 db4@2 c4 db4@3 [db4,eb4,bb4]@6",
  W: "[db4,f4]@2 g4@2 ab4@2 bb4 eb4@5 [bb3,c4,eb4]@4", X: "[db4,f4]@2 g4@2 ab4@2 bb4 bb4@5 [db4,eb4,bb4]@4",
  Y: "[db4,f4]@2 g4@2 [db4,f4,ab4]@2 bb4@2 [db4,g4,c5]@4 bb4 ab4 g4@2", // Db C
  Z: "bb4@2 ab4@3 ab3 eb4 ab4 [bb3,eb4,g4]@2 ab4 eb4@3 ab3@2", // Eb
  AA: "[ab3,db4,f4]@5 ab3 db4 f4 [g3,c4,eb4]@4 [f3,bb3,db4]@4", AB: "[ab3,c4,eb4]!2 [g3,bb3,eb4]!2",
  AC: "[ab3,c4,eb4]!2 [ab3,db4,eb4] [ab3,db4,f4]", AD: "[ab3,c4,eb4]!4", AE: "[ab3,db4,eb4]!2 [g3,bb3,eb4]!2",
  AF: "[ab3,c4,eb4]@4 [c4,eb4] ab3 c4 ab4 [bb3,eb4,g4]@4 [bb3,eb4,g4]@4", // Ab Cm Eb
  AG: "[ab3,c4,f4]@4 [c4,f4] ab3 c4 f4 [ab3,db4,f4]@4 [ab3,db4,f4]@4", // Fm F5 Db
  AH: "[ab3,c4,eb4]@4 [ab3,ab4] eb4 c4 ab3 [ab3,c4,f4]@4 [ab3,c4,f4]@4", // Ab Fm
  AI: "[ab3,db4,f4]@4 f4 ab3 db4 f4 [bb3,eb4,g4]@4 [eb4,g4,bb4]@4", AJ: "[db4,f4,ab4,db5]!2 [c4,eb4,g4,bb4]!2",
  AK: "[db4,eb4,f4,ab4]!2 [db4,eb4,g4,bb4] eb4", AL: "[db4,f4]@2 g4 ab4@3 ab4@2 [c4,eb4]@4 ~ eb4 f4 ab4",
  AM: "[eb4,f4,c5]@2 db5@2 bb4 ab4@2 [db4,eb4,bb4]@9", AN: "bb4@2 [c4,eb4,ab4]@6 c4 db4 eb4@2 ab4 bb4 c5@2",
  AO: "[f4,ab4,db5]!2 [eb4,g4,c5] [c4,eb4,g4]", AP: "[f4,ab4,db5]!2 [eb4,g4,c5]!2",
  AQ: "[db4,f4,c5]@2 db5@2 bb4@2 ab4 db4 db4@4 eb4 ab4 bb4 eb5, ~@7 [eb4,bb4]@5 ~@4", // Dbmaj7 Eb5
  AR: "[e4,a4,b4,e5]@8 ~@2 [a4,a5]@2 [ab4,ab5]@2 [gb4,gb5] [e4,e5]", AS: "[db4,db5] [e4,a4,db5] [e4,a4,db5,e5]!2",
  AT: "[d4,gb4,b4,d5]!2 [d4,ab4,b4,d5] [e4,ab4,b4,e5]", AU: "[e4,a4,db5]!2 [e4,a4,db5,e5]!2",
  AV: "[gb4,a4,b4,d5]!2 [e4,ab4,b4,db5]!2", // Bm7 Dbm7
  AW: "[a3,gb4]@2 [b3,ab4]@2 [db4,a4]@2 [d4,b4]@2 [d4,ab4,db5]@4 [d4,b4] a4 ab4@2", // D E Gbm G Db G
  AX: "[db4,e4,b4]@2 a4@3 a3 db4 e4 [db4,e4,ab4]@2 a4@2 [db4,e4]@4", AY: "[b3,d4,gb4]@2 [d4,ab4,db5] [d4,ab4,b4]",
  AZ: "a4@15 ~", BA: "[e3,a3,db4]@11 ~ e5 a5 b5 db6", BB: "[a5,b5,db6,e6]@15 ~",
})).s("gm_piano").gain(0.48)

// bass · electric bass pick · "Bass Guitar"
const bass = note(`<
  A@3 B C D E F G H I J K L M N O P Q R Q P S T U V W X Y Z AA AB AC AD AE AF AG AH T AI P Q R Q P S T U V AJ AK@3 AL AM
  AN AO AN AO AN AO AP@2 AQ AR AS AT AU AV
>`.pickRestart({
  A: "[~@12 [ab1,ab2]@7 ~ [ab1,ab2]@7 ~ [ab1,ab2]@7 ~ eb2@3 ~ ab1@3 ~ ab2@3 ~]/3", B: "c2@3 ~ c3@3 ~ db2@3 ~ db3@3 ~",
  C: "eb2@7 ~ ab2@5 ~ ab2@2", D: "g2@7 ~ f2@5 ~ eb2@2", E: "db2@7 ~ ab2@5 ~ ab2@2", F: "f2@7 ~ db2@5 ~ db2@2",
  G: "eb2@3 ~ eb3@3 ~ ab2@7 ~", H: "g2@5 ~ g2@2 f2@7 ~", I: "db2@5 ~ eb2 f2 ab2@7 ~", J: "f2@5 ~ f2@2 db2@7 ~",
  K: "eb2@3 ~ eb3@3 ~ [db2,db3]@5 ~ db2@2", L: "c2@5 ~ c2@2 db2@5 ~ db2@2", M: "eb2@5 ~ eb2@2 db2@3 ~ db3@3 ~",
  N: "c3@3 ~ c2@3 ~ db2@3 ~ db3@3 ~", O: "eb3@7 ~ eb2@7 ~", P: "ab1@3 ~ ab2@2 g2@2 f2@3 ~ f2@3 ~",
  Q: "db2@3 ~ db2@3 ~ eb2@3 ~ eb2@2 g2@2", R: "ab2@3 ~ ab2@2 g2@2 f2@3 ~ f2@3 ~",
  S: "db2@3 ~ db2@3 ~ eb2@3 ~ eb2@2 eb2@2", T: "db2@3 ~ db3@3 ~ c3@3 ~ c2@3 ~", U: "db2@3 ~ db3@3 ~ eb3@3 ~ eb2@3 ~",
  V: "[db2,db3]@7 ~ eb3@3 ~ eb2@3 ~", W: "ab1@3 ~ ab2@3 ~ c2@3 ~ c3@3 ~", X: "db2@3 ~ db3@3 ~ eb2@7 ~",
  Y: "ab2@5 ~ ab2@2 g2@7 ~", Z: "f2@5 ~ eb2@2 db2@7 ~", AA: "ab2@5 ~ ab2@2 f2@7 ~", AB: "db2@5 ~ db2@2 eb2@3 ~ eb3@3 ~",
  AC: "ab2@7 ~ g2@5 ~ g2@2", AD: "f2@7 ~ db2@5 ~ eb2 f2", AE: "ab2@7 ~ f2@5 ~ f2@2", AF: "db2@7 ~ eb2@3 ~ eb3@3 ~",
  AG: "[db2,db3]@5 ~ db2@2 c2@5 ~ c2@2", AH: "db2@5 ~ db2@2 eb2@5 ~ eb2@2", AI: "db2@3 ~ db3@3 ~ eb3@7 ~",
  AJ: "~@2 ab2 bb2 c3@3 ~ c3 db3 eb3@2 ab2 bb2 c3@2", AK: "[db2,db3] ab2 db3!2 [c2,c3] g2 c3!2",
  AL: "[bb1,bb2]@3 ~ [bb1,bb2]@3 ~ [eb2,eb3]@3 ~ [eb2,eb3]@3 ~", AM: "[e2,e3]@5 ~ e3 b2 e2@7 ~",
  AN: "[a1,a2]@5 ~ ab2@2 gb2@5 ~ gb2@2", AO: "b1@5 ~ d2@2 e2@5 ~ e2@2",
  AP: "[d2,d3]@5 ~ [d2,d3]@2 [db2,db3]@5 ~ [db2,db3]@2", AQ: "[b1,b2]@7 ~ e2@7 ~", AR: "[a1,a2]@7 ~ [db2,db3]@7 ~",
  AS: "[d2,d3]@7 ~ e3@3 ~ ab2@3 ~", AT: "~@8 b2@7 ~", AU: "a2@15 ~", AV: "a1@15 ~",
})).s("gm_electric_bass_pick").gain(0.48)

stack(alto_sax, alto_sax_soft, piano, bass)

More by Alabama