Strudelify

Gute Nacht

Franz Schubert

KeyG minorTempo100 bpm
0:00/0:00
// Gute Nacht — Franz Schubert
// 100 bpm, 2/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "Horn in Es" french horn (copy of ch 8 "Horn in F" french horn); ch 2 "Posaune in B" trombone (copy of ch 9 "Posaune" trombone)
// note: Transcription provider: pdmx. https://musescore.com/score/6184720; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 274 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · trumpet · "Trompete in B"
const trumpet = note(`<
  ~@13 A B C D E F G H A B C D E F G H I J@2 K L M N O P Q@2 R S T R U ~@4 V W E F X Y Z AA V W E F X Y@2 H ~@12 A B C D
  E F G H A B C D E F G H I J@2 K L M N O P Q@2 R S T R U ~@4 V W E F X Y Z AA V W E F X Y@2 H ~@12 A B C AB AC AD Z AA
  A B C AB AC AD Z AA AE J@2 K L M N O P Q@2 R S T R U ~@4 V W E F AF AG AH AA V W E F AF AI AH AA ~@12 AJ B AK AL AM AN
  AO H AJ B AK AL AM AN AO H AP AQ AR AS AT AU AV AW AX AY AZ BA BB BC BD BE ~@4 V BF E BG AF AG BH AA V BF E BG AF BI
  AH AA AX AI AH AA ~@13
>`.pickRestart({
  A: "~ bb4", B: "a4 g4", C: "d4 bb3", D: "a3@3 bb3", E: "a3 g4", F: "d4@3 bb3", G: "d4 bb3 a3 bb3", H: "g3", I: "~ f3",
  J: "bb3!2", K: "c4@3 d4", L: "c4 d4", M: "f4 eb4 d4@2", N: "c4@2 d4 eb4", O: "d4", P: "~ bb3", Q: "eb4!2",
  R: "f4@3 g4", S: "f4 g4", T: "bb4 ab4 g4@2", U: "eb4", V: "~ g4", W: "eb4@3 c4", X: "g3@2 bb3 c4", Y: "d4!2",
  Z: "d4@2 e4 gb4", AA: "g4", AB: "a3@3 c4", AC: "eb4 g4", AD: "d4@2 bb3 c4", AE: "~ a3", AF: "g3 d4", AG: "d4 g4",
  AH: "a4 gb4", AI: "d4 bb4", AJ: "~ b4", AK: "d4 b3", AL: "a3@3 b3", AM: "a3 e4", AN: "g4@3 b3", AO: "d4 b3 a3 b3",
  AP: "~ g3", AQ: "c4!2", AR: "c4@2 b3 c4", AS: "d4@3 e4", AT: "d4 e4", AU: "g4 f4 e4@2", AV: "d4@2 e4 f4", AW: "e4",
  AX: "~ d4", AY: "g4!2", AZ: "g4@2 gb4 g4", BA: "a4@3 b4", BB: "a4 b4", BC: "gb4 g4", BD: "d4@3 c4", BE: "b3",
  BF: "e4@3 db4", BG: "d4@3 b3", BH: "a4@3 gb4", BI: "d4 b4",
})).s("gm_trumpet").gain(0.2)

// other · tenor sax · "Tenorsaxophon"
const tenor_sax = note(`<
  ~ A B C D E D F G H I J K L@5 M N L@6 O P Q R S T U@4 V W X Y Z@3 AA AB AC AD AE AF AG AD AE AF AH AI AJ AK M AD AE AF
  AH AL AM AN A B C D E D F G H AO AP K L@5 M N L@6 O P Q R S T U@4 V W X Y Z@3 AA AB AC AD AE AF AG AD AE AF AH AI AJ
  AK M AD AE AF AH AL AM AN A B C D E D F G H AO AP K L@5 M N L@6 O P Q R S T U@4 V W X Y Z@3 AA AB AC AD AE AF AG AD AE
  AF AH@4 M AD AE AF AH@3 AG A B C D E D F G H AQ ~ AR AC@5 AS AT AU AC@5 AS AT AU AV AW AX AC@4 AY AX AZ BA AH@2 BB
  AH@2 BC BD AE BE AG BD AE BE BF BG BH AK AS BD AE BE BF BG BH AC BI AH@2 AI AB BJ BK AH@6 BL BM BN@2
>`.pickRestart({
  A: "~ bb4", B: "a4 g4", C: "d4@4 bb3@3 a3", D: "g3", E: "~ a3", F: "~ [g3,g4]", G: "[d3,d4]",
  H: "c4@4 bb3@4 a3 bb3 a3@2 g3@4", I: "g3!2", J: "gb3!2", K: "g3@2 g4 ~", L: "g4 ~ g4 ~", M: "g4 bb4", N: "g4 gb4",
  O: "[bb3,g4] ~ bb4 ~", P: "[bb3,g4] ~ [c4,gb4] ~", Q: "[bb3,g4] ~ g4@2", R: "f4 eb4", S: "d4@2 bb3 c4", T: "d4 e4",
  U: "f4!2", V: "f4 d4", W: "eb4 f4", X: "g4@2 eb4 f4", Y: "g4 a4", Z: "bb4!2", AA: "[f4,bb4] [d4,bb4]", AB: "bb4 g4",
  AC: "g4!2", AD: "a4@3 bb4", AE: "a4 ~", AF: "d4@3 eb4", AG: "d4 ~", AH: "d4!2", AI: "d4 bb4", AJ: "a4 d4",
  AK: "g4 d4", AL: "d4 [d4,bb4]", AM: "a4 gb4", AN: "g4", AO: "g3@2 g3 ~", AP: "gb3 ~ gb3 ~", AQ: "g3 ~", AR: "~ g4",
  AS: "g4 b4", AT: "[b3,g4] [c4,gb4]", AU: "[b3,g4] g4", AV: "g4 f4", AW: "e4@2 c4 d4", AX: "e4 gb4", AY: "g4@2 c4 d4",
  AZ: "g4@2 g4 a4", BA: "b3 db4", BB: "d4 c4 d4@2", BC: "[b3,g4] [d4,b4]", BD: "a4@3 b4", BE: "d4@3 e4", BF: "d4 b4",
  BG: "b4 g4", BH: "gb4 a4", BI: "b3 d4", BJ: "g4 eb4", BK: "eb4 d4", BL: "d4 bb3", BM: "bb3 g3", BN: "g3/2",
})).s("gm_tenor_sax").gain(0.15)

// other · french horn · "Horn in F"
const french_horn = note(`<
  ~@3 A B A B C D E@2 F G H@3 I@2 J@2 H@4 I@2 K@2 L M N@3 O@2 P Q R N S@2 T@2 U V S W X Y Z W X Y Q AA AB AC AD W X Y Q
  N AE AF ~@2 A B A B C D E@2 F G H@3 I@2 J@2 H@4 I@2 K@2 L M N@3 O@2 P Q R N S@2 T@2 U V S W X Y Z W X Y Q AA AB AC AD
  W X Y Q N AE AF ~@2 A B A B C D E@2 F G H@3 I@2 J@2 H@4 I@2 K@2 L M N@3 O@2 P Q R N S@2 T@2 U V S W X Y Z W X Y J@3 Q
  AD W X Y J@3 Z ~@2 A B A B C D E@2 F AG AH@3 AI O AJ J AK AH@3 AI O AJ J AK AL P@3 AM@2 J AN P AO AP@2 AQ@2 AR AS AK
  AT X AU Z AT X AU J@3 AK J AT X AU J@4 AV AW AX AY AZ BA BB AW AX BC BD BE BF AY BC B BG
>`.pickRestart({
  A: "~ gb3", B: "g3", C: "~ eb4", D: "[g3,bb3]", E: "[g3@6 g3 ~]/2", F: "gb3 ~ gb3 ~", G: "g3@2 bb3 ~",
  H: "bb3 ~ bb3 ~", I: "c4 ~ c4 ~", J: "d4!2", K: "d4 ~ d4 ~", L: "d4 ~ bb3@2", M: "c4 a3", N: "bb3!2", O: "a3 bb3",
  P: "c4!2", Q: "d4 bb3", R: "a3 ab3", S: "eb4!2", T: "d4 eb4", U: "eb4 f4", V: "[eb4,g4] eb4", W: "a3@3 bb3",
  X: "a3 ~", Y: "d4@3 eb4", Z: "d4 ~", AA: "bb3 [bb3,d4]", AB: "[c4,d4] c4", AC: "[bb3,d4] bb3", AD: "[bb3,d4]!2",
  AE: "[c4,d4]!2", AF: "d4", AG: "~ b3", AH: "b3!2", AI: "a3!2", AJ: "b3 d4", AK: "d4 b3", AL: "c4 d4", AM: "b3 c4",
  AN: "e4 ~", AO: "b3 ~", AP: "g4!2", AQ: "gb4 g4", AR: "a4 gb4", AS: "b4 b3", AT: "a3@3 b3", AU: "d4@3 e4",
  AV: "g3 bb3", AW: "bb3 g3", AX: "gb3 a3", AY: "g3!2", AZ: "g3 eb4", BA: "eb4 c4", BB: "c4 bb3", BC: "g3 d3",
  BD: "d3!2", BE: "d3 bb3", BF: "a3 gb3", BG: "d3",
})).s("gm_french_horn").gain(0.15)

// chords · trombone · "Posaune"
const trombone = note(`<
  A@3 B C@2 D@2 A E F@2 G F@3 H@2 I J K F@3 H@2 F@2 L M N O P Q ~ R S T U V W X ~ Y Z AA AB@2 AC@2 AB@2 AC AD AE@2 AF AG
  AB@2 AC AD AE@2 AH@3 AI C@2 D@2 A E F@2 G F@3 H@2 I J K F@3 H@2 F@2 L M N O P Q ~ R S T U V W X ~ Y Z AA AB@2 AC@2
  AB@2 AC AD AE@2 AF AG AB@2 AC AD AE@2 AH@3 AI C@2 D@2 A E F@2 G F@3 H@2 I J K F@3 H@2 F@2 L M N O P Q ~ R S T U V W X
  ~ Y Z AA AB@2 AC@2 AB@2 AC AJ AE@2 AK AG AB@2 AC AD AE@2 AL AH@2 AI C@2 D@2 A E F@2 AE@4 AM@2 AE@6 AM@2 AE@3 AN AO AP
  AE AQ ~ AR AS AP AT AU AV AW AX AY AA@2 AZ BA BB@2 AZ BA BB BC BD BE ~@13 BF ~ BG ~@4 BH AE@2 BI BJ BK
>`.pickRestart({
  A: "bb2 ~ bb2 ~", B: "bb2 ~ eb3@2", C: "[d3@3 eb3]/2", D: "[d3@3 c3]/2", E: "c3 ~ c3 ~", F: "d3 ~ d3 ~",
  G: "bb2@2 d3 ~", H: "[eb3,a3] ~ [eb3,a3] ~", I: "[d3,bb3] d3", J: "[d3,bb3] [d3,c4]", K: "[d3,d4] ~ d3 ~",
  L: "d3 ~ d3@2", M: "c3 f3", N: "f3 d3", O: "d3 c3", P: "c3!2", Q: "c3 ~", R: "bb3 a3", S: "bb3 ~", T: "c3 [d3,bb3]",
  U: "[eb3,g3] g3", V: "g3 f3", W: "f3!2", X: "f3 ~", Y: "~ bb2", Z: "bb2 g3", AA: "g3!2", AB: "[eb3,g3]!2",
  AC: "[bb2,g3]!2", AD: "g3 d3", AE: "d3!2", AF: "d3 [d3,g3]", AG: "[d3,g3]!2", AH: "bb3 ~ bb3 ~", AI: "bb3 ~ eb3@2",
  AJ: "[bb2,g3] d3", AK: "[bb2,d3] [d3,g3]", AL: "[bb2,d3]@2 bb3 ~", AM: "[db3,e3]!2", AN: "c3 g3", AO: "g3 e3",
  AP: "e3 d3", AQ: "d3 ~", AR: "c4 b3", AS: "c4 e3", AT: "d3 b3", AU: "b3 a3", AV: "a3!2", AW: "a3 ~", AX: "gb3 b3",
  AY: "g3 a3", AZ: "[db3,g3]!2", BA: "[db3,g3] [a2,g3]", BB: "[b2,g3]!2", BC: "g3 [d3,b3]", BD: "[d3,b3] [b2,g3]",
  BE: "[c3,gb3] ~", BF: "~ [eb3,c4]", BG: "~ [g2,d3]", BH: "~ d3", BI: "d3 bb2", BJ: "g3", BK: "[g2,bb2]",
})).s("gm_trombone").gain(0.15)

// chords · trombone · "Posaune" · soft notes
const trombone_soft = note("<~@247 A B C D E F B G H F I J@3 K L M N O P ~@7>".pickRestart({
  A: "~ [c3,a3]", B: "[b2,g3] [d3,b3]", C: "[d3,b3]!2", D: "[db3,g3]!2", E: "[db3,g3] [a2,g3]", F: "[b2,g3]!2",
  G: "[d3,b3] [b2,g3]", H: "[c3,gb3] [c3,a3]", I: "[d3,b3] [d3,d4]", J: "[d3,d4]!2", K: "[d3,d4] ~",
  L: "[eb3,c4] [c3,g3]", M: "[eb3,g3] ~", N: "d3 [bb2,d3]", O: "[a2,d3] [c3,d3]", P: "[bb2,d3] ~",
})).s("gm_trombone").gain(0.1)

// bass · tuba
const bass = note(`<
  A@7 B C D C@2 E@4 F@2 G@2 H E@3 F@2 G@2 I ~@15 J K L ~@17 A@7 B C D C@2 E@4 F@2 G@2 H E@3 F@2 G@2 I ~@15 J K L ~@17
  A@7 B C D C@2 E@4 F@2 G@2 H E@3 F@2 G@2 I ~@15 J K L ~@6 M G@2 N ~@4 M G@2 O A@6 B C D C@2 N ~@31 E@9 P G Q ~@9 M G@2
  R E S ~@2 T P T G U P V W@2
>`.pickRestart({
  A: "g2 ~ g2 ~", B: "g2 ~ c2@2", C: "d2 ~ d2 ~", D: "eb2 ~ eb2 ~", E: "g2!2", F: "c2!2", G: "d2!2", H: "g1 g2",
  I: "g1", J: "bb2 g2", K: "bb2 eb2", L: "c3 ~", M: "~ d2", N: "g2 ~", O: "g2@2 g2 ~", P: "g2 d2", Q: "d2 ~",
  R: "d2 g2", S: "g2", T: "d2", U: "d2 a2", V: "d2 g1", W: "g1/2",
})).s("gm_tuba").gain(0.2)

// bass · tuba · soft notes
const bass_soft = note("<~@247 [~ d2] [g2!2]!5 [g2 d2] [d2!2]!2 [d2 g2] [g2 ~] ~@16>").s("gm_tuba").gain(0.1)

stack(trumpet, tenor_sax, french_horn, trombone, trombone_soft, bass, bass_soft)

More by Franz Schubert