Strudelify

Mina on the Terrace

Philip Glass

KeyE♭ majorTempo168 bpm
0:00/0:00
// Mina on the Terrace — Philip Glass
// 168 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Piano" named as a piano, played on piano (its tremolo strings patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5362838; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 204 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(168/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
const piano = note(`<
  ~@2 A@2 ~@2 A@2 B C B C D E F D G H G H I J K I L@6 M N L@2 M N L@2 O P L@2 Q R L@2 M N L@2 M N L@2 O P L@2 Q R S@2
  T@2 S@2 T@2 S@2 T U S@2 T@2 S@2 T@2 S@2 T U V@2 Q R W@2 X@2 Y@2 Z@2 Y@2 AA@2 W@2 X@2 Y@2 Z@2 Y@2 AA@2 V@2 AB AC AD@2
  AE@2 V@2 AF@2 S@2 T AG AD@2 AE@2 V@2 AF@2 S@2 T AG V@2 AB AH AI@2 AJ AK AI@2 AJ AK AI@2 AJ AK AI@2 AJ AK AI@2 AJ AK
  AI@2 AJ AK AL@2 AM AN AO AP AF AQ ~@28
>`.pickRestart({
  A: "[ab4,f5] [c5,ab5] ~ [f5,c6] [ab5,f6] [f5,c6] ~ [c5,ab5] [ab4,f5] [c5,ab5] ~ [f5,c6] [ab5,f6] [f5,c6] ~ [c5,ab5]", // Db Fm F5 Db F5 Fm Db Fm …
  B: "~@8 [c2,c3]@3 ~@5", C: "~@8 [ab1,ab2]@3 ~@5", D: "~@8 [c1,c2]@3 ~@5", E: "~@8 [d1,d2]@3 ~@5",
  F: "~@8 [eb1,eb2]@3 ~@5", G: "~@4 [c2,c3]!2 ~@2", H: "~@4 [ab1,ab2]!2 ~@2", I: "~@4 [c1,c2]!2 ~@2",
  J: "~@4 [d1,d2]!2 ~@2", K: "~@4 [eb1,eb2]!2 ~@2",
  L: "[eb4,c5] [ab4,eb5] ~ [c5,ab5] [eb5,c6] [c5,ab5] ~ [ab4,eb5] [eb4,c5] [ab4,eb5] ~ [c5,ab5] [eb5,c6] [c5,ab5] ~ [ab4,eb5]", // Cm Ab5 Fm Cm Fm Ab5 Cm Ab5 …
  M: "[eb4,b4] [ab4,eb5] ~ [b4,ab5] [eb5,b5] [b4,ab5] ~ [ab4,eb5] [eb4,b4] [ab4,eb5] ~ [b4,ab5] [eb5,b5] [b4,ab5] ~ [ab4,eb5]", // Abm Ab5 E Abm E Ab5 Abm Ab5 …
  N: "[eb4,db5] [ab4,eb5] ~ [db5,ab5] [eb5,b5] [db5,ab5] ~ [ab4,eb5] [eb4,b4] [ab4,eb5] ~ [b4,ab5] [eb5,b5] [b4,ab5] ~ [ab4,eb5]", // Eb7 Ab5 Db5 Abm Db5 Ab5 Abm Ab5 …
  O: "[g4,eb5] [bb4,g5] ~ [eb5,bb5] [g5,eb6] [eb5,bb5] ~ [bb4,g5] [g4,eb5] [bb4,g5] ~ [eb5,bb5] [g5,eb6] [eb5,bb5] ~ [bb4,g5]", // Cm Eb Eb5 Cm Eb5 Eb Cm Eb …
  P: "[g4,db5] [bb4,g5] ~ [db5,bb5] [g5,db6] [db5,bb5] ~ [bb4,g5] [g4,db5] [bb4,g5] ~ [db5,bb5] [g5,db6] [db5,bb5] ~ [bb4,g5]", // Gdim Eb Gb Gdim Gb Eb Gdim Eb …
  Q: "[gb3,bb3,db4,gb4,bb4,db5]!4", R: "[g3,bb3,d4,g4,bb4,d5]!2 [g3,bb3,eb4,g4,bb4,eb5]!2",
  S: "[c3,eb3,c4,eb4] [ab3,ab4] [c3,eb3,c4,eb4] [ab3,ab4] [c3,eb3,c4,eb4] [ab3,ab4] [c3,eb3,c4,eb4] [ab3,ab4]", // Cm Ab Cm Ab Cm Ab Cm Ab
  T: "[bb2,eb3,bb3,eb4] [g3,g4] [bb2,eb3,bb3,eb4] [g3,g4] [bb2,eb3,bb3,eb4] [g3,g4] [bb2,eb3,bb3,eb4] [g3,g4]", // Eb5 G Eb5 G Eb5 G Eb5 G
  U: "[bb2,db3,bb3,db4] [ab3,g4] [bb2,db3,bb3,db4] [ab3,g4] [bb2,db3,bb3,db4] [ab3,g4] [bb2,db3,bb3,db4] [ab3,g4]", // Bbm Abmaj7 Bbm Abmaj7 Bbm Abmaj7 Bbm Abmaj7
  V: "[eb3,ab3,eb4,ab4] [c4,c5] [eb3,ab3,eb4,ab4] [c4,c5] [eb3,ab3,eb4,ab4] [c4,c5] [eb3,ab3,eb4,ab4] [c4,c5]", // Ab5 C Ab5 C Ab5 C Ab5 C
  W: "[~@15 [eb3,eb6], ab2@4 c6@6 c4 [eb3,eb6] [ab2,bb5] [eb3,eb6] [c4,bb6]@2, ~ eb3@2 eb3@2 [eb3,eb6] c4@2 ab2 [eb3,eb6] b6@6, ~ c4@2 c7@5, ~@4 ab2@3 [eb3,eb6] b5@8]/2", // Eb Absus2 Eb C7 Eb
  X: "[~@15 [eb3,g5], ab5@7 [eb3,bb5] [eb2,f5] [eb3,g5] [g3,f6] [eb3,g5] [eb2,db5] [eb3,g5] [g3,db6]@2, bb2@3 [eb3,bb5] bb2@12, ~ [eb3,bb5] db4@2 g5 [eb3,bb5] [db4,g6]@10, ~ ab6@7]/2", // Eb Eb5 Ebsus2 Eb G7 Eb Eb7 Eb …
  Y: "[~@15 [eb3,ab5], ab2@4 c5@6 c4 [eb3,ab5] [ab2,d5] [eb3,ab5] [c4,d6]@2, ~ eb3@2 eb3@2 [eb3,ab5] c4@2 ab2 [eb3,ab5] db6@6, ~ c4@2 c6@5, ~@4 ab2@3 [eb3,ab5] db5@8]/2", // Ab5 Abdim Ab5 Csus2 Ab5
  Z: "[~@15 [eb3,g5], eb5@7 [eb3,g5] eb5@2 g3 [eb3,g5] [eb2,b4] [eb3,g5] [g3,b5]@2, bb2@3 [eb3,g5] [bb2,f5]@12, ~ [eb3,g5] db4@3 [eb3,g5] [db4,f6]@10, ~@2 eb6@6 eb2 [eb3,g5] eb6@6]/2", // Eb Abm Eb G Eb Bb5 Eb Db …
  AA: "[~@7 g5 ~@7 [eb3,db6], eb5@7 eb3 [eb2,g5] [eb3,db6] [g3,g6] [eb3,db6] [eb2,bb5] [eb3,db6] [g3,bb6]@2, bb2@3 [eb3,g5] [bb2,f5]@12, ~ [eb3,g5] db4@3 [eb3,g5] [db4,f6]@10, ~ eb6@7]/2", // Eb7 Eb Eb7 G Eb7 Eb5 Eb7 Gm …
  AB: "[gb3,bb3,gb4,bb4] [db4,db5] [gb3,bb3,gb4,bb4] [db4,db5] [gb3,bb3,gb4,bb4] [db4,db5] [gb3,bb3,gb4,bb4] [db4,db5]", // Gb Db Gb Db Gb Db Gb Db
  AC: "[g3,bb3,g4,bb4] [d4,d5] [g3,bb3,g4,bb4] [d4,d5] [g3,bb3,g4,bb4] [eb4,eb5] [g3,bb3,g4,bb4] [eb4,eb5]", // Gm D Gm D Gm Eb Gm Eb
  AD: "[ab3,c4,ab4,c5] [eb4,eb5] [ab3,c4,ab4,c5] [eb4,eb5] [ab3,c4,ab4,c5] [eb4,eb5] [ab3,c4,ab4,c5] [eb4,eb5]", // Ab Eb Ab Eb Ab Eb Ab Eb
  AE: "[g3,bb3,g4,bb4] [eb4,eb5] [g3,bb3,g4,bb4] [eb4,eb5] [g3,bb3,g4,bb4] [eb4,eb5] [g3,bb3,g4,bb4] [eb4,eb5]", // Gm Eb Gm Eb Gm Eb Gm Eb
  AF: "[eb3,g3,eb4,g4] [bb3,bb4] [eb3,g3,eb4,g4] [bb3,bb4] [eb3,g3,eb4,g4] [bb3,bb4] [eb3,g3,eb4,g4] [bb3,bb4]", // Eb Bb Eb Bb Eb Bb Eb Bb
  AG: "[bb2,db3,bb3,db4] [g3,g4] [bb2,db3,bb3,db4] [g3,g4] [bb2,db3,bb3,db4] [g3,g4] [bb2,db3,bb3,db4] [g3,g4]", // Bbm G Bbm G Bbm G Bbm G
  AH: "[g3,bb3,g4,bb4] [d4,d5] [g3,bb3,g4,bb4] [d4,d5] [eb3,g3,g4,bb4] [bb3,eb5] [eb3,g3,g4,bb4] [bb3,eb5]", // Gm D Gm D Eb Eb5 Eb Eb5
  AI: "[eb3,c5] [ab3,eb5] ~ [c4,ab5] [eb4,c6] [c4,ab5] ~ [ab3,eb5] [eb3,c5] [ab3,eb5] ~ [c4,ab5] [eb4,c6] [c4,ab5] ~ [ab3,eb5]", // Cm Ab5 Fm Cm Fm Ab5 Cm Ab5 …
  AJ: "[eb3,bb4] [g3,eb5] ~ [bb3,g5] [eb4,bb5] [bb3,g5] ~ [g3,eb5] [eb3,bb4] [g3,eb5] ~ [bb3,g5] [eb4,bb5] [bb3,g5] ~ [g3,eb5]", // Eb5 Cm Eb Eb5 Eb Cm Eb5 Cm …
  AK: "[eb3,bb4] [g3,db5] ~ [bb3,g5] [eb4,bb5] [bb3,g5] ~ [g3,db5] [eb3,bb4] [g3,db5] ~ [bb3,g5] [eb4,bb5] [bb3,g5] ~ [g3,db5]", // Eb5 Gdim Eb Eb5 Eb Gdim Eb5 Gdim …
  AL: "[c3,eb3,eb5,ab5] [ab3,c6] [c3,eb3,eb5,ab5] [ab3,c6] [c3,eb3,eb5,ab5] [ab3,c6] [c3,eb3,eb5,ab5] [ab3,c6]", // Ab
  AM: "[gb3,bb3,gb4,bb4] [db4,db5] [gb3,bb3,gb4,bb4] [db4,db5] [gb3,a3,gb4,a4] [db4,db5] [gb3,a3,gb4,a4] [db4,db5]", // Gb Db Gb Db Gbm Db Gbm Db
  AN: "[f3,a3,f4,a4] [c4,c5] [f3,a3,f4,a4] [c4,c5] [f3,ab3,f4,ab4] [c4,c5] [f3,ab3,f4,ab4] [c4,c5]", // F C F C Fm C Fm C
  AO: "[e3,ab3,e4,ab4] [b3,b4] [e3,ab3,e4,ab4] [b3,b4] [e3,g3,e4,g4] [b3,b4] [e3,g3,e4,g4] [b3,b4]", // E B E B Em B Em B
  AP: "[e3,g3,e4,g4] [b3,b4] [e3,g3,e4,g4] [b3,b4] [e3,g3,e4,g4] [b3,b4] [e3,g3,e4,g4] [b3,b4]", // Em B Em B Em B Em B
  AQ: "[eb3,gb3,eb4,gb4] [bb3,bb4] [eb3,gb3,eb4,gb4] [bb3,bb4] [eb3,gb3,eb4,gb4] [bb3,bb4] [eb3,gb3,eb4,gb4] [bb3,bb4]", // Ebm Bb Ebm Bb Ebm Bb Ebm Bb
})).s("gm_piano").gain(0.3)

// other · violin
const violin = note(`<
  ~@28 A@2 B@2 A@2 B@2 A@2 C D A@2 E F A@2 B@2 A@2 B@2 A@2 C D A@2 E F G H I J K L M J K L M N G H I J K L M J K L M N
  A@2 E F O P Q R S L M J S L M N O P Q R S L M J S L M N A@2 D T ~@2 U V K L M J K L M N ~@2 U V K L M J K L M N A@2 D
  T O P Q W@2 L M X@2 L M N O P Q W@2 L M X@2 L M N Y@2 Z AA AB AC AD AE ~@3 AF AG@2 ~@5 AH AI@2 ~ AJ AK@2 ~ AJ AK@2 ~@2
  AK@2 ~@2
>`.pickRestart({
  A: "ab4 c5 ab4 c5 ab4 c5 ab4 c5", B: "ab4 b4 ab4 b4 ab4 b4 ab4 b4", C: "bb4 eb5 bb4 eb5 bb4 eb5 bb4 eb5",
  D: "bb4 db5 bb4 db5 bb4 db5 bb4 db5", E: "[bb4,db5]!4", F: "[bb4,d5]!2 [bb4,eb5]!2", G: "~ ab5", H: "g5 gb5",
  I: "f5 e5", J: "eb5 b4", K: "c5", L: "db5 d5", M: "eb5 f5", N: "g5 bb5", O: "~ c6", P: "b5 bb5", Q: "ab5 g5",
  R: "f5 db5", S: "~ c5", T: "bb4 d5 bb4 d5 bb4 eb5 bb4 eb5", U: "g5 ab5", V: "g5 f5", W: "[f5@2 db5@3 ~ c5@2]/2",
  X: "[eb5@2 b4@3 ~ c5@2]/2", Y: "eb5 ab5 eb5 ab5 eb5 ab5 eb5 ab5", Z: "bb4 db5 bb4 db5 a4 db5 a4 db5",
  AA: "a4 c5 a4 c5 ab4 c5 ab4 c5", AB: "ab4 b4 ab4 b4 g4 b4 g4 b4", AC: "g4 b4 g4 b4 g4 b4 g4 b4",
  AD: "g4 bb4 g4 bb4 g4 bb4 g4 bb4", AE: "gb4 bb4 gb4 bb4 gb4 bb4 gb4 bb4", AF: "ab4@2 gb4 e4", AG: "[eb4@3 ~]/2",
  AH: "ab4@2 bb4 b4", AI: "[c5@3 ~]/2", AJ: "~ bb4", AK: "c5/2",
})).s("gm_violin").gain(0.29).pan(0.3)

// other · viola
const viola = note(`<
  A@9 B A B C B A D A B A B C B A D ~@2 E@4 F@2 E@2 F@2 E@2 G H E@2 I J E@2 F@2 E@2 F@2 E@2 G H E@2 I J E@2 K@2 E@2 K@2
  E@2 K@2 E@2 K@2 E@2 K@2 E@2 K@2 E@2 I J E@2 K@2 E@2 K@2 E@2 K@2 E@2 K@2 E@2 K@2 E@2 K@2 E@2 L M N O P Q R S T U R S T
  V N O P Q R S T U R S T V E@2 L M ~@2 W V S X Y Z S X Y AA ~@2 W V S X Y Z S X Y AA AB@2 AC AD AE AF AG AH C AI ~@26
>`.pickRestart({
  A: "f3!4", B: "e3!4", C: "eb3!4", D: "gb3!4", E: "c4 eb4 c4 eb4 c4 eb4 c4 eb4", F: "b3 eb4 b3 eb4 b3 eb4 b3 eb4",
  G: "eb4 g4 eb4 g4 eb4 g4 eb4 g4", H: "db4 g4 db4 g4 db4 g4 db4 g4", I: "bb3!4", J: "d4!2 eb4!2",
  K: "bb3 eb4 bb3 eb4 bb3 eb4 bb3 eb4", L: "bb3 db4 bb3 db4 bb3 db4 bb3 db4", M: "bb3 d4 bb3 d4 bb3 eb4 bb3 eb4",
  N: "~ c4", O: "b3 bb3", P: "ab3 g3", Q: "f3 db3", R: "c4", S: "ab3", T: "g3 ab3", U: "g3 f3", V: "bb3 g3",
  W: "db4 c4", X: "c3", Y: "eb4", Z: "g3", AA: "db4", AB: "ab3 eb4 ab3 eb4 ab3 eb4 ab3 eb4",
  AC: "bb3 db4 bb3 db4 a3 db4 a3 db4", AD: "a3 c4 a3 c4 ab3 c4 ab3 c4", AE: "ab3 b3 ab3 b3 g3 b3 g3 b3",
  AF: "g3 b3 g3 b3 g3 b3 g3 b3", AG: "g3 bb3 g3 bb3 g3 bb3 g3 bb3", AH: "gb3 bb3 gb3 bb3 gb3 bb3 gb3 bb3",
  AI: "eb3!3 ~",
})).s("gm_viola").gain(0.27)

// other · viola · soft notes
const viola_soft = note("<~@177 [~@3 eb3] [e3!4]!2 [eb3!4]!2 [e3!4]!2 [ab3!4]!20>").s("gm_viola").gain(0.18)

// other · cello · "Violoncello"
const cello = note(`<
  ~@8 A B A B C D E C F G F G H I J H ~@4 K L M N K L M N K L O P M Q R S K L M N K L M N K L O P M Q R S T@2 U@2 T@2
  U@2 T@2 U V T@2 U@2 T@2 U@2 T@2 U V T@2 R S W@2 X@2 W@2 X@2 W@2 X@2 W@2 X@2 W@2 X@2 W@2 X@2 T@2 Y Z AA AB AC@2 AD@2
  AC@2 AD@2 AC AE AA AB AC@2 AD@2 AC@2 AD@2 AC AE W@2 Y AF ~@2 AB AG AH AI AJ AC AH AI AJ AB ~@2 AB AG AH AI AJ AC AH AI
  AJ AB AK@2 AL AM AN AO U AP ~@7 AQ AR@2 ~ AS AT@2 ~ AU AD@2 ~ AU AD@2 AV@2 AD@2 AV@2
>`.pickRestart({
  A: "~@8 c3@3 ~@5", B: "~@8 ab2@3 ~@5", C: "~@8 c2@3 ~@5", D: "~@8 d2@3 ~@5", E: "~@8 eb2@3 ~@5", F: "~@4 c3!2 ~@2",
  G: "~@4 ab2!2 ~@2", H: "~@4 c2!2 ~@2", I: "~@4 d2!2 ~@2", J: "~@4 eb2!2 ~@2", K: "~@2 c4!2", L: "b3!2 bb3!2",
  M: "~@2 ab3!2", N: "gb3!2 e3!2", O: "~@2 eb3!2", P: "f3!2 gb3!2", Q: "bb3!2 b3!2", R: "gb3!4", S: "g3!4",
  T: "eb3 ab3 eb3 ab3 eb3 ab3 eb3 ab3", U: "eb3 g3 eb3 g3 eb3 g3 eb3 g3", V: "db3 g3 db3 g3 db3 g3 db3 g3",
  W: "ab3 c4 ab3 c4 ab3 c4 ab3 c4", X: "bb3 eb4 bb3 eb4 bb3 eb4 bb3 eb4", Y: "gb3 bb3 gb3 bb3 gb3 bb3 gb3 bb3",
  Z: "g3 bb3 g3 bb3 g3 bb3 g3 bb3", AA: "~ eb3", AB: "eb3", AC: "bb2", AD: "eb3/2", AE: "eb3 bb2",
  AF: "g3 bb3 g3 bb3 eb3 g3 eb3 g3", AG: "db3", AH: "c3", AI: "eb2", AJ: "g3", AK: "c3 ab3 c3 ab3 c3 ab3 c3 ab3",
  AL: "gb3 bb3 gb3 bb3 gb3 a3 gb3 a3", AM: "f3 a3 f3 a3 f3 ab3 f3 ab3", AN: "e3 ab3 e3 ab3 e3 g3 e3 g3",
  AO: "e3 g3 e3 g3 e3 g3 e3 g3", AP: "eb3 gb3 eb3 gb3 eb3 gb3 eb3 gb3", AQ: "ab2@2 bb2 b2", AR: "[c3@3 ~]/2",
  AS: "ab3@2 gb3 e3", AT: "[eb3@3 ~]/2", AU: "~ e3", AV: "ab2/2",
})).s("gm_cello").gain(0.25).pan(0.6)

// bass · contrabass
const bass = note(`<
  ~@8 A B A B C D E C F G F G H I J H ~@4 K L M N K L M N K L O P M Q R S K L M N K L M N K L O P M Q R S T@2 U@2 T@2
  U@2 T@2 U@2 T@2 U@2 T@2 U@2 T@2 U@2 V@2 W X V@3 U V@3 U V@3 U V@3 U V@3 U V@3 U V@2 W X Y Z AA@2 AB@2 AA@2 AB@2 AA AC
  Y Z AA@2 AB@2 AA@2 AB@2 AA AC V@2 W AD ~@2 AE AF AG AH AI AJ AG AH AI AE ~@2 AE AF AG AH AI AJ AG AH AI AE T@2 W AK
  AL@2 V@2 ~@7 AM AN@2 ~@12 AO@2 ~@2 AO@2
>`.pickRestart({
  A: "~@8 c2@3 ~@5", B: "~@8 ab1@3 ~@5", C: "~@8 c1@3 ~@5", D: "~@8 d1@3 ~@5", E: "~@8 eb1@3 ~@5", F: "~@4 c2!2 ~@2",
  G: "~@4 ab1!2 ~@2", H: "~@4 c1!2 ~@2", I: "~@4 d1!2 ~@2", J: "~@4 eb1!2 ~@2", K: "~@2 c3!2", L: "b2!2 bb2!2",
  M: "~@2 ab2!2", N: "gb2!2 e2!2", O: "~@2 eb2!2", P: "f2!2 gb2!2", Q: "bb2!2 b2!2", R: "gb2!4", S: "g2!4", T: "c3!4",
  U: "bb2!4", V: "eb3!4", W: "gb3!4", X: "g3!4", Y: "~ eb3", Z: "eb3", AA: "bb2", AB: "eb3/2", AC: "eb3 bb2",
  AD: "g3!2 eb3!2", AE: "eb2", AF: "db2", AG: "c2", AH: "eb1", AI: "g2", AJ: "bb1", AK: "f3!4", AL: "e3!4",
  AM: "ab1@2 bb1 b1", AN: "[c2@3 ~]/2", AO: "ab1/2",
})).s("gm_contrabass").gain(0.24).pan(0.7)

stack(piano, violin, viola, viola_soft, cello, bass)

More by Philip Glass