Strudelify

Salvation is Created

Pavel Chesnokov

KeyF majorTempo72 bpm
0:00/0:00
// Salvation is Created — Pavel Chesnokov
// 72 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/371031; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 42 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/4)

// 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 · "Bb Trumpet"
const trumpet = note("<~@4 A B C D E F G F H@2 I J K@2 ~@7 A B C D E F G F H@2 I J L K ~@2 M>".pickRestart({
  A: "c5@2 c5 d5", B: "eb5 d5 c5@2", C: "eb5@2 d5 eb5 f5@2 eb5@2", D: "d5@2 d5 eb5", E: "c5", F: "eb5", G: "d5 eb5",
  H: "[f5@4 g5@5 ~ g5@2 f5@2 c5@2]/2", I: "f5@3 g5 f5@2 eb5@2", J: "f5 bb4", K: "bb4", L: "bb4!2", M: "g4 g4@3",
})).s("gm_trumpet").gain(0.17).pan(1)

// other · trumpet · "Bb Trumpet"
const trumpet_2 = note("<~@4 A B C D E F G H I@2 J K L M N O ~@10 F G H I@2 J K P ~@4>".pickRestart({
  A: "ab4@2 ab4 g4", B: "f4 g4 ab4@2", C: "ab4@2 f4 bb4", D: "f4 bb4", E: "ab4", F: "bb4@3 c5", G: "d5 bb4 bb4@2",
  H: "bb4@2 ab4 bb4 c5@2 bb4@2", I: "[c5@4 g4@5 ~ e5@2 f5@2 c5@2]/2", J: "c5@2 bb4!2", K: "d5 f4", L: "c4 d4", M: "g4",
  N: "f4@3 g4 f4@2 eb4@2", O: "d4", P: "ab4!2",
})).s("gm_trumpet").gain(0.19).pan(0)

// other · trumpet · "Bb Trumpet" · soft notes
const trumpet_soft = note("<~@20 A ~@4 B C D E F ~@8 G ~@2 H>".pickRestart({
  A: "c4", B: "ab4@2 ab4 g4", C: "f4 g4 ab4@2", D: "ab4@2 f4 bb4", E: "bb4 f4 bb4!2", F: "eb4", G: "g4", H: "eb4 eb4@3",
})).s("gm_trumpet").gain(0.13).pan(0)

// other · trumpet · "Bb Trumpet"
const trumpet_3 = note("<~@4 A B C D E F G H I@2 J K L E M N O ~@4 P Q R S E F G H I@2 J K L E ~@2 T>".pickRestart({
  A: "eb4@2 eb4 d4", B: "c4 d4 eb4@2", C: "c4@2 f4 eb4", D: "f4 bb4", E: "eb4", F: "g4@3 ab4", G: "g4 f4 eb4@2",
  H: "g4@2 f4 g4 ab4@2 g4@2", I: "[ab4@4 g4@5 ~ c5@2 c5@2 bb4@2]/2", J: "ab4@2 bb4!2", K: "bb4 d4", L: "c4 d4",
  M: "f4@3 g4 f4@2 eb4@2", N: "d4", O: "c4", P: "ab4@2 ab4 g4", Q: "f4 g4 ab4@2", R: "ab4@2 f4 bb4", S: "bb4 f4 bb4!2",
  T: "bb3 bb3@3",
})).s("gm_trumpet").gain(0.25)

// other · french horn · "Horn"
const french_horn = note(`<
  A B C D E F E G H I J K L@2 M N O P M Q R ~@4 A B C D R I J K L@2 M N S P M Q T
>`.pickRestart({
  A: "c4@2 c4 d4", B: "eb4 d4 c4@2", C: "eb4@2 d4 eb4 f4@2 eb4@2", D: "d4@2 d4 eb4", E: "c4@3 bb3", F: "ab3 bb3 c4@2",
  G: "bb3 g3", H: "ab3", I: "eb4@2 bb4 ab4", J: "g4 f4 eb4 bb3", K: "g4@2 f4 g4 ab4@2 g4@2",
  L: "[f4@4 g4@5 ~ g4@2 f4@2 c4@2]/2", M: "f4@3 g4 f4@2 eb4@2", N: "f4", O: "ab4", P: "g4", Q: "d4", R: "c4",
  S: "ab4!2", T: "eb4 eb4@3",
})).s("gm_french_horn").gain(0.25)

// other · trombone
const trombone = note("<A B C D E ~@4 F G F H@2 I J K L ~@3 M N O P Q ~@4 F G F H@2 I J K ~@4>".pickRestart({
  A: "c4@2 ab3 f3", B: "g3 bb3 c4 bb3", C: "ab3@2 f3 g3", D: "bb3 g3", E: "ab3@3 ~", F: "eb4@3 eb4", G: "d4 eb4",
  H: "[c4@4 b3@5 ~ e4@2 f4@2 e4@2]/2", I: "f4@3 g4 f4@2 eb4@2", J: "f4", K: "c4 d4", L: "eb4",
  M: "[g3,c4]@2 [ab3,c4] [c4,d4]", N: "[g3,eb4] [f3,d4] [g3,c4]@2",
  O: "[ab3,c4]@2 [bb3,d4] [c4,eb4] [c4,f4]@2 [bb3,eb4]@2", P: "[bb3,d4]@2 [bb3,d4] [bb3,eb4]", Q: "[ab3,c4]@3 ~",
})).s("gm_trombone").gain(0.4).pan(0)

// other · trombone · soft notes
const trombone_soft = note("<~@38 eb4 c4 [c4@2 bb3!2] [bb3 bb3@3]>").s("gm_trombone").gain(0.2).pan(0)

// other · trombone
const trombone_2 = note("<A B C D E ~@4 F G H I@2 J K L H ~@3 M N O P Q ~@4 F G H I@2 J K L ~@4>".pickRestart({
  A: "g3@2 eb3 d3", B: "c3 f3 g3 f3", C: "eb3@2 c3 eb3", D: "f3 d3", E: "eb3@3 ~", F: "g3@3 ab3", G: "bb3 ab3 g3@2",
  H: "eb3", I: "[ab3@4 g3@5 ~ bb3@2 ab3@2 g3@2]/2", J: "ab3@2 g3!2", K: "bb3", L: "f3 bb2",
  M: "[g3,c4]@2 [ab3,c4] [c4,d4]", N: "[g3,eb4] [f3,d4] [g3,c4]@2",
  O: "[ab3,c4]@2 [bb3,d4] [c4,eb4] [c4,f4]@2 [bb3,eb4]@2", P: "[bb3,d4]@2 [bb3,d4] [bb3,eb4]", Q: "[ab3,c4]@3 ~",
})).s("gm_trombone").gain(0.4).pan(1)

// other · trombone · soft notes
const trombone_soft_2 = note("<~@38 eb3!2 [ab3@3 eb3] [eb3 eb3@3]>").s("gm_trombone").gain(0.2).pan(1)

// other · tuba · "Euphonium"
const tuba = note("<A B C D E ~@4 F G H I@2 J K L H@2 M N O B C D E ~@4 F G H I@2 J K L H@2 P Q>".pickRestart({
  A: "c3@2 ab3 f3", B: "g3 bb3 c4 bb3", C: "ab3@2 f3 g3", D: "bb3 g3", E: "ab3@3 ~", F: "g3@3 ab3", G: "bb3 ab3 g3@2",
  H: "eb3", I: "[ab3@4 g3@5 ~ bb3@2 ab3@2 g3@2]/2", J: "f3@2 g3!2", K: "f3@3 g3 ab3@2 g3@2", L: "f3 bb3", M: "eb3 f3",
  N: "c3", O: "c4@2 c4 f3", P: "eb3@3 eb3", Q: "eb3 eb3@3",
})).s("gm_tuba").gain(0.25).pan(0)

// other · tuba · "Euphonium"
const tuba_2 = note("<A B C D E ~@4 F G H I@2 J K L M N O P Q R S T U ~@4 F G H I@2 J K L M V W X>".pickRestart({
  A: "g3@2 eb3 d3", B: "c3 f3 g3 f3", C: "eb3@2 c3 eb3", D: "f3 d3", E: "eb3@3 ~", F: "bb3@3 c4", G: "bb3!2",
  H: "eb3@3 bb3", I: "[c4@4 b3@5 ~ c4@2 d4@2 c4@2]/2", J: "f4@3 g4 f4@2 eb4@2", K: "d4", L: "c4 f3", M: "eb3", N: "bb3",
  O: "bb3 c4", P: "c4", Q: "c4@2 c4 f3", R: "g3 bb3 c4 bb3", S: "ab3@2 f3 g3", T: "bb3 g3", U: "ab3@3 ~", V: "ab3",
  W: "c4@2 bb3 ab3", X: "g3 g3@3",
})).s("gm_tuba").gain(0.25)

// bass · tuba · "Bb Tuba"
const bass = note("<A B C D E ~@4 F G H I@2 J K L H M N O A B C D E ~@4 F G H I@2 J K L M@2 P Q>".pickRestart({
  A: "c3@2 ab2 f2", B: "g2 bb2 c3 bb2", C: "ab2@2 f2 g2", D: "bb2 g2", E: "ab2@3 ~", F: "g2@3 ab2", G: "bb2 ab2 g2@2",
  H: "eb2", I: "[ab2@4 g2@5 ~ bb2@2 ab2@2 g2@2]/2", J: "f2@2 g2!2", K: "f2@3 g2 ab2@2 g2@2", L: "f2 bb2", M: "bb2",
  N: "bb2 c3", O: "[c2,c3]", P: "eb2@3 eb2", Q: "eb2 eb2@3",
})).s("gm_tuba").gain(0.25)

// bass · tuba · "Bb Tuba"
const bass_2 = note("<A B C D E ~@4 F G H I@2 J K L H M N O P B C D E ~@4 F G H I@2 J K L M@2 Q R>".pickRestart({
  A: "c2@2 ab1 f1", B: "g1 bb1 c2 bb1", C: "ab1@2 f1 g1", D: "bb1 g1", E: "ab1@3 ~", F: "g1@3 ab1", G: "bb1 ab1 g1@2",
  H: "eb1", I: "[ab1@4 g1@5 ~ bb1@2 ab1@2 g1@2]/2", J: "f1@2 g1!2", K: "f1@3 g1 ab1@2 g1@2", L: "f1 bb1", M: "eb2",
  N: "eb2 f2", O: "c1", P: "c1@2 ab1 f1", Q: "eb2@3 ~", R: "eb1 eb1@3",
})).s("gm_tuba").gain(0.25)

stack(
  trumpet, trumpet_2, trumpet_soft, trumpet_3, french_horn, trombone, trombone_soft, trombone_2, trombone_soft_2, tuba,
  tuba_2, bass, bass_2
)