Strudelify

Adventure Through the Light

Kevin Perkin

KeyB♭ majorTempo87 bpm
0:00/0:00
// Adventure Through the Light — Kevin Perkin
// 87 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 1 "Clarinette en Si♭" named as a reed, played on clarinet (its pizzicato strings patch is not one); ch 2 "Piano" named as a piano, played on piano (its tremolo strings patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5620680; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 53 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(87/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 · clarinet · "Clarinette en Si♭"
const clarinet = note("<~@10 A B C D ~@5 E@2 F@4 ~@5 G H I J K L@2 M ~@4 G H I J K L@2 M ~@3>".pickRestart({
  A: "~@8 ab4@3 bb4@3 c5@2", B: "~ f5@6 c5@12 g4@12 ~", C: "~@22 c5@5 eb5@5", D: "~ bb4@12 ~@19",
  E: "[~@6 ab5@12 g5@6 ab5@6 f5@23 eb5@11]/2",
  F: "[eb5@6 db5@6 c5@6 eb5@6 bb4@11 ab4@6 bb4@6 c5@6 f5@5 eb5@23 ~ db5@11 eb5@6 db5@6 c5@6 eb5@5 bb4@12]/4",
  G: "e5@2 e5 d5 e5 d5 c5 d5", H: "g5@2 g5 d5@5", I: "c5 d5!2 c5 d5 c5 b4 c5", J: "e5@4 e5@2 b4@6 a4 b4 c5 d5",
  K: "e5@2 e5 d5 e5 a5 b5 c6", L: "[d6@2 c6 e6@3 c6 d6@6 c6 a5 c6]/2", M: "b5 a5 g5@2",
})).s("gm_clarinet").gain(0.3)

// chords · clarinet · "Clarinette en Si♭" · soft notes
const clarinet_soft = note("<~@19 A@2 B@3 C D@5 E@2 F G H I J E K L K L E@2 M G H I J E N@3>".pickRestart({
  A: "[~@6 f3@4 ~ c4@4 f3@3 c4@4 f3@4 ~ c4@3 eb3@4 bb3@4 eb3@3 bb3@12 db3@4 ab3@4 ~ db3@2]/2",
  B: "[ab3@4 ~ db3@4 ab3@3 ab3@4 eb4@4 ~ ab3@3 g3@11 f3@4 ~ c4@4 f3@3 c4@4 f3@4 ~ c4@2 eb3@4 ~ c4@4 eb3@3 c4@12 db3@4 ab3@4 db3@3 ab3@3]/3",
  C: "~@2 eb4@4 ab3@3 ab2@4 eb3@4 ~ ab3@2 eb3@12", D: "c3/5", E: "c3", F: "a2 d3", G: "g2", H: "e3", I: "c3 d3",
  J: "d3", K: "c3@3 ~ c3@3 ~", L: "c3@3 ~@5", M: "g2 d3", N: "c3/3",
})).s("gm_clarinet").gain(0.2)

// chords · piano
const piano = note("<~ A@4 B@3 ~@5 C@4 D@3 ~@6 E F G H I J K L M N@2 O E F G H I J K L M N@2 P Q@3>".pickRestart({
  A: "[~@26 ab5@11 g5@5 ~ ab5@5 ~ f5@22 ~ eb5@11 ~ eb5@5 db5@5 ~ c5@11 ~ bb4@11 c5@10]/4",
  B: "[~@2 bb4@5 ~ c5@5 ~ g4@22 ~ f4@11 f4@5 ~ ab4@5 ~ [ab3,eb4]@11 ~ [g3,eb4]@11 ~@13]/3", // Ab5 Cm
  C: "[~@13 [ab2,c3,f3,ab3]@22 ~ [g2,bb2,eb3,g3,bb3]@22 ~ db4@11 ~ f4@5 ~ eb4@5 [c3,eb3,ab3,c4]@11 ~ eb4@5 ~ db4@5 ~ [f2,ab2,c3,f3]@22, ~@59 [db3,f3,ab3]@22 ~@13 [bb2,eb3,g3]@11 ~@23]/4", // Fm Eb Ab Fm Db Eb
  D: "[~ [eb2,g2,c3,eb3]@22 ~ [db2,f2,ab2,db3]@22 ~ [ab1,eb2,ab2,c3]@22 ~ [f2,c3,f3]@22 ~@4]/3", // Cm Db Ab F5
  E: "f2@4 c3@4 a3@4 b3@4 e4@15 ~", F: "f2 c3 a3 b3 e4@3 [e4,e5]",
  G: "f2 c3 a3 b3 ~@3 [e5,e6], e5@27 ~@5, e4@16 e4@15 ~", H: "f2@4 c3@4 a3@4 b3@4 e4@15 ~, [e5,e6]@15 ~",
  I: "f2 c3 [g3,e4] d4 e4 d4 c4 d4, e4@8 ~@4 a3@19 ~", J: "e2@4 c3@4 [g3,g4]@4 d4@19 ~, g4 ~@3",
  K: "[d2,c4] [a2,d4] [f3,d4] [a3,c4] [g2,d4] [d3,c4] [g3,b3] [b3,c4]", // D7 D5 Dm Am G5 D7 G Cmaj7
  L: "c2@2 g2@2 [c3,e4]@2 e3@2 ~@4 a3 b3 c4 d4, e4@8 ~@4 b3@11 ~@9, ~@16 g3@15 ~", // C
  M: "a2 e3 [a3,e4] [c4,d4] e4 a4 b4 c5, e4 ~@3", // A5 Csus2
  N: "[f2 c3 [f3,c5] a3 gb2 d3 [gb3,c5] a3 g2 d3 g3 ~@2 c5 a4 c5, d5@8 ~@4 e5@11 ~@5 d5@23 ~@13, ~@44 b3@19 ~]/2", // F5 Gbdim
  O: "f2@4 c3@4 f3@4 ~@4 g4@15 ~, b4 a4 ~@2, ~@12 a3@19 ~", P: "e2@4 b2@4 e3@4 ~@4 g4@15 ~, b4 a4 ~@2, ~@12 g3@19 ~",
  Q: "[[f2,c3,a3,b3,e4]@91 ~@5]/3", // Fmaj7
})).s("gm_piano").gain(0.3)

// other · cello · "Harpe"
const cello = note(`<
  ~ A@4 B@3 C D E F G H I J K L M N ~@6 O@4 P Q R S T U V W X@4 Y Z AA AB AC AD AE AF AG AH@2
>`.pickRestart({
  A: "[~@26 c5@11 bb4@6 c5@6 ab4@23 ab4@12 ab4@5 ab4@6 ab4@12 g4@11 f4@10]/4",
  B: "[~@2 f4@6 f4@6 eb4@23 db4@11 db4@6 db4@6 c4@12 bb3@11 ab2 ~@2 ab2 ~@2 ab2 ~@2 ab2 ~@2 ab2]/3",
  C: "~@2 ab2 ~@2 ab2 ~@2 ab2 ~ bb2 ~@2 bb2 ~@2 bb2 ~@2 bb2 ~@2 bb2 ~@2 bb2 ~@2 bb2 ~@2 bb2",
  D: "~@2 db2 ~@2 db2 ~ db2 ~@2 db2 ~@2 db2 ~@2 db2 ~@2 db2 ~@2 db2 ~@2 ab2 ~@2 ab2 ~@2 ab2",
  E: "~@2 ab2 ~ g2 ~@2 g2 ~@2 g2 ~@2 g2 ~@2 f2 ~@2 f2 ~@2 f2 ~@2 f2 ~@2 f2 ~@2 f2",
  F: "~ f2 ~@2 f2 ~@2 c3 ~@2 c3 ~@2 c3 ~@2 c3 ~@2 c3 ~@2 c3 ~@2 c3 ~@2 c3 ~ db2 ~",
  G: "~ db2 ~@2 db2 ~@2 db2 ~@2 db2 ~@2 db2 ~@2 db2 ~@2 db2 ~@2 ab2 ~@2 ab2 ~ ab2 ~@2 ab2 ~",
  H: "~ g2 ~@2 g2 ~@2 g2 ~@2 g2 ~@2 f2 ~@2 f2 ~@2 f2 ~@2 f2 ~ f2 ~@2 f2 ~@2 f2 ~",
  I: "~ f2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~@2 c2 ~ c2 ~@2 c2 ~@2 db2 ~@2 db2 ~",
  J: "~ db2 ~@2 db2 ~@2 db2 ~@2 db2 ~@2 db2 ~@2 db2 ~ ab2 ~@2 ab2 ~@2 ab2 ~@2 ab2 ~@2 eb2 ~",
  K: "~ eb2 ~@2 eb2 ~@2 eb2 ~@2 f2 ~@2 f2 ~ f2 ~@2 f2 ~@2 f2 ~@2 f2 ~@2 f2 ~@2 f2 ~",
  L: "~ eb2 ~@2 eb2 ~@2 eb2 ~@2 eb2 ~ eb2 ~@2 eb2 ~@2 eb2 ~@2 eb2 ~@2 db2 ~@2 db2 ~@2 db2 ~",
  M: "~ db2 ~@2 db2 ~@2 db2 ~ db2 ~@2 db2 ~@2 ab2 ~@2 ab2 ~@2 ab2 ~@2 ab2 ~@2 eb2 ~@2 eb2 ~", N: "~ eb2 ~@2 eb2 ~@27",
  O: "f2 c3 a3 b3 e4@4", P: "~ c3 g3 a3@5, f2", Q: "~ c3 g3 d4@5, e2", R: "~ a2 f3 a3 ~ d3 g3 b3, d2 g2",
  S: "~ g2 c3 e3 b3@4, c2", T: "~ e3 a3 c4 e4 ~@3, a2", U: "~ c3 f3 a3 ~ d3 gb3 a3, f2 gb2", V: "~ d3 g3 b3@5, g2",
  W: "~ c3 f3 a3@5, f2", X: "f3 [c3,c4] [a3,a4] [b3,b4] [e4,e5]@4, f2@3 ~@5",
  Y: "f3 [c3,c4] [a3,a4] [b3,b4]@2 [a3,a4]@3, f2", Z: "e3 [c3,c4] [g3,g4] [d4,d5]@5, e2",
  AA: "d3 [a2,a3] [f3,f4] [a3,a4] g3 [d3,d4] [g3,g4] [b3,b4], d2 g2", // A F A D G B
  AB: "c3 [c3,c4] [e3,e4] [g3,g4] [b3,b4] [g3,g4] [b2,b3] [g3,g4], c2", // C E G B G B G
  AC: "a3 [e3,e4] [a3,a4] [e4,e5]@2 [b3,c4,b4,c5] [a3,a4] [e3,e4], a2", // E A E Cmaj7 A E
  AD: "f3 [c3,c4] [f3,f4] [a3,a4] gb3 [d3,d4] [gb3,gb4] [a3,a4], f2 gb2", AE: "g3 [d3,d4] [g3,g4] [b3,b4]@5, g2",
  AF: "[e2,e3] [b2,b3] [e3,e4] [g3,g4]@5", AG: "f3 [c3,c4] [a3,a4] [b3,b4] [e4,e5]@4, f2",
  AH: "[f2,f3] [c3,c4] [a3,a4] [b3,b4] [e4,e5]@4", // F C A B E
})).s("gm_cello").gain(0.3)

// other · cello · "Harpe" · soft notes
const cello_soft = note("<~@19 A@2 B@3 C D ~@12 E ~ E ~@8 D ~@3>".pickRestart({
  A: "[~@6 f3@4 ~ c4@4 f3@3 c4@4 f3@4 ~ c4@3 eb3@4 bb3@4 eb3@3 bb3@12 db3@4 ab3@4 ~ db3@2]/2",
  B: "[ab3@4 ~ db3@4 ab3@3 ab3@4 eb4@4 ~ ab3@3 g3@11 f3@4 ~ c4@4 f3@3 c4@4 f3@4 ~ c4@2 eb3@4 ~ c4@4 eb3@3 c4@12 db3@4 ab3@4 db3@3 ab3@3]/3",
  C: "~@2 eb4@4 ab3@3 ab2@4 eb3@4 ~ ab3@2 eb3@12", D: "f2", E: "~@4 f2@3 ~",
})).s("gm_cello").gain(0.2)

// other · violin · "Violon 1"
const violin = note("<A B C D E F G H ~@2 I J@2 K ~@39>".pickRestart({
  A: "~@11 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2",
  B: "ab4 ~ ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~ ab4",
  C: "~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~ ab4 ~@2 ab4",
  D: "~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 ab4 ~ ab4 ~@2 ab4 ~@2 ab4",
  E: "~@2 ab4 ~@2 ab4 ~@2 ab4 ~@2 bb4 ~@2 bb4 ~@2 bb4 ~@2 bb4 ~ c5 ~@2 c5 ~@2 c5 ~@2 c5",
  F: "~@2 c5 ~@2 c5 ~@2 c5 ~@2 c5 ~@2 c5 ~@2 c5 ~ c5 ~@2 c5 ~@2 c5 ~@2 c5 ~@2 c5",
  G: "~@2 c5 ~@2 c5 ~@2 c5 ~@2 c5 ~@2 c5 ~ c5 ~@2 c5 ~@2 c5 ~@2 c5 ~@2 c5 ~@2 c5",
  H: "~@2 c5 ~@2 c5 ~@2 bb4 ~@2 bb4 ~ bb4 ~@2 bb4 ~@15", I: "~@8 ab4@3 bb4@3 c5@2",
  J: "[~ f5@6 g5@12 eb5@11 db5@12 eb5@6 db5@6 c5@5 eb5@5]/2", K: "~ bb4@12 ~@19",
})).s("gm_violin").gain(0.25)

// other · violin · "Violon 1" · soft notes
const violin_soft = note("<~@25 A@5 B C D E B F@2 G H I H I B C D E B F@2 J K@3>".pickRestart({
  A: "e4/5", B: "e4", C: "g4", D: "c4 d4", E: "b3", F: "d4/2", G: "a3", H: "e4@3 ~ e4@3 ~", I: "e4@3 ~@5", J: "g3",
  K: "e4/3",
})).s("gm_violin").gain(0.15)

// other · viola · "Alto"
const viola = note("<~@4 A B C D E F G H I J K@3 ~@36>".pickRestart({
  A: "~@22 f3 ~@2 f3 ~ g3 ab3 ~@2 ab3", B: "~ bb3 c4 ~@11 c3 ~@2 c3 db3 eb3 ~@2 eb3 ~ f3 g3 ~@6",
  C: "~@5 db3 ~@2 db3 eb3 ~ f3 ~@2 f3 g3 ab3 ~@11 ab3 ~@2 ab3",
  D: "~@2 c4 ~@2 eb4 ~@2 bb3 ~@2 bb3 ~ eb4 ~@2 g4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 c4",
  E: "~@2 c4 ~@2 c4 ~@2 c4 ~ bb3 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~@2 bb3",
  F: "~@2 ab3 ~@2 ab3 ~ ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 c4 ~@2 c4 ~@2 c4",
  G: "~@2 c4 ~ bb3 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3",
  H: "~ ab3 ~@2 ab3 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~ f3 ~",
  I: "~ f3 ~@2 f3 ~@2 f3 ~@2 f3 ~@2 f3 ~@2 f3 ~@2 f3 ~@2 c4 ~@2 c4 ~ c4 ~@2 c4 ~",
  J: "~ bb3 ~@2 bb3 ~@2 bb3 ~@2 bb3 ~@21", K: "[~@27 ab3@12 db4@6 c4@5 c4@12 ab3@6 g3@6 ~@22]/3",
})).s("gm_viola").gain(0.25)

// other · viola · "Alto" · soft notes
const viola_soft = note("<~@25 A@5 B C D E B F C G H I H I B C D E B F C@2 J@3>".pickRestart({
  A: "a3/5", B: "a3", C: "g3", D: "f3 g3", E: "e3", F: "f3 gb3", G: "f3", H: "a3@3 ~ a3@3 ~", I: "a3@3 ~@5", J: "a3/3",
})).s("gm_viola").gain(0.15)

// other · cello
const cello_2 = note("<~@7 A B C D E F G H I J K L M ~@33>".pickRestart({
  A: "~@19 eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3",
  B: "~@2 eb3 ~@2 eb3 ~@2 eb3 ~ eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3",
  C: "~@2 f3 ~@2 f3 ~ f3 ~@2 f3 ~@2 f3 ~@2 f3 ~@2 f3 ~@2 f3 ~@2 eb3 ~@2 eb3 ~@2 eb3",
  D: "~@2 eb3 ~ eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~@2 c3 ~@2 c3 ~@2 c3 ~@2 c3 ~@2 c3 ~@2 c3",
  E: "~ c3 ~@2 c3 ~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~ ab2 ~",
  F: "~ ab2 ~@2 ab2 ~@2 ab2 ~@2 ab2 ~@2 ab2 ~@2 ab2 ~@2 ab2 ~@2 eb3 ~@2 eb3 ~ eb3 ~@2 eb3 ~",
  G: "~ eb3 ~@2 eb3 ~@2 eb3 ~@2 eb3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~ ab3 ~@2 ab3 ~@2 ab3 ~",
  H: "~ ab3 ~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~@2 g3 ~ g3 ~@2 g3 ~@2 ab3 ~@2 ab3 ~",
  I: "~ ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~ c4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 bb3 ~",
  J: "~ bb3 ~@2 bb3 ~@2 bb3 ~@2 ab3 ~@2 ab3 ~ ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~",
  K: "~ g3 ~@2 g3 ~@2 g3 ~@2 g3 ~ g3 ~@2 g3 ~@2 g3 ~@2 g3 ~@2 ab3 ~@2 ab3 ~@2 ab3 ~",
  L: "~ ab3 ~@2 ab3 ~@2 ab3 ~ ab3 ~@2 ab3 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 c4 ~@2 bb3 ~@2 bb3 ~", M: "~ bb3 ~@2 bb3 ~@27",
})).s("gm_cello").gain(0.3)

stack(clarinet, clarinet_soft, piano, cello, cello_soft, violin, violin_soft, viola, viola_soft, cello_2)