Strudelify

Adventure Through the Light

Kevin Penkin

KeyB♭ majorTempo124 bpm
0:00/0:00
// Adventure Through the Light — Kevin Penkin
// 124 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// 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/5620678; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 34 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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("<~@14 A B ~ C ~@8 D E F G H I J K>".pickRestart({
  A: "ab4 bb4 c5 f5", B: "c5 g4", C: "c5 eb5 bb4@2",
  D: "f3@3 c4@3 f3@2 [c4,g5]@3 ~@3 c4@2, ab5@8 ~@3 f3@3 ~@2, ~@3 ab5", E: "eb3@3 bb3@3 eb3@2 bb3@8, f5",
  F: "db3@3 ab3@3 db3@2 [ab3,eb5]@3 ~@3 ab3@2, eb5@8 ~@3 db3@3 ~@2, ~@3 db5", // Ab5
  G: "[ab3,c5]@3 ~@3 ab3@2 [g3,bb4]@8, ~@3 eb4@3 ~@10, ~ eb5 ~@2", // Ab Gm
  H: "[f3,ab4]@3 ~@3 f3@2 [c4,c5]@3 ~@3 c4@2, ~@3 c4@3 ~@5 f3@3 ~@2, ~ bb4 ~ f5", I: "eb3@3 c4@3 eb3@2 c4@8, eb5",
  J: "db3@3 ab3@3 db3@2 [ab3,eb5]@3 ~@3 ab3@2, db5@8 ~@3 eb4@3 ~@2, ~@3 db5", // Ab5
  K: "[ab2,c5]@3 ~@3 ab3@2 [eb3,bb4]@8, ~@3 eb3@3 ~@10, ~ eb5 ~@2", // Ab Eb5
})).s("gm_clarinet").gain(0.2)

// chords · piano
const piano = note("<~@2 A B C D E F G H ~@8 I J K L M N O P Q ~@7>".pickRestart({
  A: "ab5@2 g5 ab5", B: "f5@15 ~", C: "eb5@2 eb5 db5", D: "c5 bb4", E: "c5@2 bb4 c5", F: "g4@15 ~", G: "f4@2 f4 ab4",
  H: "[ab3,eb4] [g3,eb4]", I: "[ab2,c3,f3,ab3]@15 ~", J: "[g2,bb2,eb3,g3,bb3]@15 ~",
  K: "db4@2 f4 eb4, [db3,f3,ab3]@15 ~", L: "[c3,eb3,ab3,c4]@2 eb4 db4, ~ [bb2,eb3,g3]", M: "[f2,ab2,c3,f3]@15 ~",
  N: "[eb2,g2,c3,eb3]@15 ~", O: "[db2,f2,ab2,db3]@15 ~", P: "[ab1,eb2,ab2,c3]@15 ~", Q: "[f2,c3,f3]@15 ~",
})).s("gm_piano").gain(0.3)

// other · cello · "Harpe"
const cello = note("<~@2 A B C D E F G H I J K L M N K L M O K P M Q K P ~@8>".pickRestart({
  A: "c5@2 bb4 c5", B: "ab4", C: "ab4@2 ab4!2", D: "ab4 g4", E: "f4@2 f4!2", F: "eb4", G: "db4@2 db4!2", H: "c4 bb3",
  I: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", J: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~",
  K: "db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~ db2 ~", L: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ g2 ~ g2 ~ g2 ~ g2 ~",
  M: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~", N: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~",
  O: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", P: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~",
  Q: "eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~",
})).s("gm_cello").gain(0.3)

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

// other · violin · "Violon"
const violin = note("<A@5 B C@3 D ~@4 E F G H ~@16>".pickRestart({
  A: "ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~ ab4 ~", B: "ab4 ~ ab4 ~ ab4 ~ ab4 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~",
  C: "c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~", D: "c5 ~ c5 ~ c5 ~ c5 ~ bb4 ~ bb4 ~ bb4 ~ bb4 ~", E: "ab4 bb4 c5 f5",
  F: "g5 eb5", G: "db5@2 eb5 db5", H: "c5 eb5 bb4@2",
})).s("gm_violin").gain(0.25)

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

// other · cello
const cello_2 = note("<~@10 A@2 B A C D E A F D F G F D F G ~@8>".pickRestart({
  A: "eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~ eb3 ~", B: "f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~ f3 ~",
  C: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", D: "g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~",
  E: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", F: "ab3 ~ ab3 ~ ab3 ~ ab3 ~ ab3 ~ ab3 ~ ab3 ~ ab3 ~",
  G: "c4 ~ c4 ~ c4 ~ c4 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~",
})).s("gm_cello").gain(0.3)

stack(clarinet, piano, cello, cello_soft, violin, viola, cello_2)