Strudelify
KeyA♭ majorTempo100 bpm
0:00/0:00
// farewell — Apocalyptica - Perttu Kivilaakso
// 100 bpm, 4/4, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/723806; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · cello · "Violoncello"
const cello = note(`<
  ~@4 A B C D@2 ~@16 E@2 F G E@2 F G H@2 I J K@2 L@2 H@2 I J K@2 M@2 ~@8 N@2 F G N@2 F G H@2 I J O@2 P@2 H@2 I J O@2 Q@2
  R S R T R U V@2 R S R T R U W@2 X@2 Y Z AA@2 AB@4 Y Z AC@4 AD@4 AE@2 AF AG AH@4 AI@2 AJ@2 ~ AK AL@2
>`.pickRestart({
  A: "g3@6 g3!2", B: "c4@6 c4!2", C: "eb4@3 eb4", D: "g4/2", E: "[~ ab4!2 ab4@2 g4 ab4 g4@2 c4@2 bb3@2 c4@3]/2",
  F: "e4", G: "eb4", H: "[~@2 ab4 g4@2 ab4@2 db4@3 ab4 ab4@2 bb4@2 c5]/2", I: "c5@3 eb4@3 c5@2",
  J: "bb4 c5@2 ab4 ab4@2 g4@2", K: "[ab4 g4 f4@3 ab4 bb4 c5@4 eb4 eb4@2 c5@2]/2", L: "[bb4@12 bb4 ab4 g4 ab4]/2",
  M: "[bb4@3 ~]/2", N: "[~ ab4!2 ab4@2 g4 f4 eb4@2 c4@2 bb3@2 c4@3]/2",
  O: "[ab4 g4 f4@3 ab4 bb4 c5@4 eb4 eb4@2 eb5@2]/2", P: "[eb5@12 bb4 ab4 g4 ab4]/2", Q: "[eb5@11 g5@4 g5]/2",
  R: "~@2 g4 f4@2 g4@3", S: "~ g4!2 f4@2 g4 f4 eb4", T: "~ g4!2 f4@2 g4 ab4 g4", U: "~ g4!2 f4@2 g4@3",
  V: "[~@2 g4 f4@2 g4@2 ab4@2 g4@2 f4@2 g4 g4@2]/2", W: "[~@2 g4 f4@2 g4@2 bb4@9]/2",
  X: "[~@2 eb5 d5@2 eb5@2 ab4@3 eb5 eb5@2 f5@2 g5]/2", Y: "g5@3 bb4@3 g5@2", Z: "f5 g5@2 eb5@3 d5@2",
  AA: "[eb5 d5 c5@3 eb5 f5 g5@4 bb4@3 g5@2]/2", AB: "[f5@12 f5 eb5 d5 eb5@3 eb5 d5@2 eb5@2 ab4@3 eb5 eb5@2 f5@2 g5]/4",
  AC: "[eb5 d5 c5@3 eb5 f5 g5@4 bb4@3 bb5@13 d6@5]/4", AD: "eb6/2", AE: "[eb6@6 d6 c6]/2", AF: "d6", AG: "f6 bb6",
  AH: "c7/2", AI: "[bb6@7 bb6]/2", AJ: "bb6/2", AK: "c4", AL: "c4/2",
})).s("gm_cello").gain(0.45)

// chords · cello · "Cello2"
const cello_2 = note(`<
  ~@9 A@2 B C A@2 B D A@2 B D A@2 B C E F G F E F G H I J K L J K M@2 I J K L J K M N A@2 B C A@2 B O P Q R Q S@2 G T I
  J K L J K M@2 I J K L J K M U V W X Y Z AA AB AC V W X Y Z AA AB AC AD K M AE K M AF@2 AD K M AE K M AF AG V W X Y Z
  AA AB AH V W X Y Z AA AB AH ~ F AI@2
>`.pickRestart({
  A: "c3!8", B: "e3!8", C: "eb3!8", D: "eb3@2 eb3@2 eb3@2 eb3@2 eb3!2 eb3@2 eb3!2 eb3@2", E: "[ab3,eb4]", F: "[c3,g3]",
  G: "[db3,ab3]", H: "[c3,g3]@5 [c3,g3]!3", I: "[f3,c4]!8", J: "[db3,ab3]!8", K: "[ab3,eb4]!8",
  L: "[gb3,db4]!3 [f3,c4]!5", M: "[eb3,bb3]!8", N: "[eb3,bb3]!6 [eb3,bb3]@2", O: "eb3!5 [eb3,bb3]!3",
  P: "[ab3,eb4]@4 [ab3,eb4] [g3,d4] [f3,c4] [eb3,bb3]", Q: "[c3,g3]@4 [c3,g3]!4", R: "[db3,ab3]@2 ~ [db3,ab3]",
  S: "[[f3,c4]@4 [f3,c4]!3 [c3,g3]@7 [c3,g3]@2]/2", T: "[c3,g3]@3 [c3,g3] [c3,g3]@2 [c3,g3]@2",
  U: "[eb3,bb3]!3 [g3,d4]!5", V: "c3!2 eb4 c3 d4 c3 eb4 g3", W: "g3!2 eb4 c3 d4 c3 eb4 ab3",
  X: "ab3!2 eb4 ab3 d4 ab3 eb4 ab3", Y: "ab3!2 eb4 ab3 d4 ab3 eb4 eb3", Z: "eb3!2 eb4 eb3 d4 eb3 eb4 eb3",
  AA: "eb3!2 eb4 eb3 d4 eb3 eb4 bb3", AB: "bb3!2 eb4 bb3 d4 bb3 eb4 bb3", AC: "bb3!2 eb4 bb3 d4 bb3 eb4 c3",
  AD: "[c3,g3]!8", AE: "[db3,ab3]!4 [c3,g3]!4", AF: "[bb3,f4]!8", AG: "[bb3,f4]!5 g4!3",
  AH: "bb3!2 eb4 bb3 d4 eb4 d4 bb3", AI: "[c3,g3]/2",
})).s("gm_cello").gain(0.45)

// other · cello · "Cello3"
const cello_3 = note(`<
  ~@33 A B A C B A D E A B A C B A F@2 G@2 H I G@2 H I J K L M N@2 L O A B A C B A D E A B A C B A P@2 Q@4 R@2 S@2 T@2
  U@2 V@2 W@2 K X Y Z X Y AA@2 K X Y Z X Y AB AC AD@2 AE@2 AF@2 AG@2 AD@2 AE@2 AF@2 AG@2 ~ AH AD@2
>`.pickRestart({
  A: "c4", B: "ab3", C: "db4@3 c4@5", D: "bb3", E: "g3", F: "[bb3@3 ~]/2", G: "c3/2", H: "e3", I: "eb3",
  J: "ab2@5 g2 f2 eb2", K: "c2", L: "db2@5 db2!3", M: "c2@5 c2!3", N: "[f2@5 f2!2 c2@7 c2@2]/2",
  O: "c2!2 ~ c2 c2@2 c2@2", P: "[bb3@11 g3@5]/2", Q: "c4/2", R: "bb3/2", S: "d4/2", T: "c2!8", U: "ab2!8", V: "eb2!8",
  W: "bb2!8", X: "ab2", Y: "eb2", Z: "db2 c2", AA: "bb2/2", AB: "bb2", AC: "bb2@5 [bb2,f3]!3", AD: "[c2,g2]/2",
  AE: "[ab2,eb3]/2", AF: "[eb2,bb2]/2", AG: "[bb2,f3]/2", AH: "[c2,g2]",
})).s("gm_cello").gain(0.45)

stack(cello, cello_2, cello_3)