Strudelify

The Death of Cisco

Barry John

KeyF minorTempo80 bpm
0:00/0:00
// The Death of Cisco — Barry John
// 80 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 42 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@3 A B C@2 D E F G H I J K L@2 M@2 N@2 O@2 ~@3 P Q@2 R S T@2 U@6 V@3>".pickRestart({
  A: "~ [eb4,g4]@24 [f4,ab4]@23", B: "~ [eb4,g4]@23 [ab4,c5]@22 ~@2",
  C: "[~ [ab4,c5]@22 [bb4,db5]@24 [ab4,c5]@24 [db5,f5]@22 ~@3]/2", D: "[eb4,g4]@25 [f4,ab4]@23",
  E: "[eb4,g4]@8 [ab4,c5]@7 ~", F: "~ [ab4,c5]@22 ~ [bb4,db5]@24", G: "~ ab4@24 [db5,f5]@23, c5 ~",
  H: "~ [eb5,g5]@23 [f5,ab5]@24", I: "[eb5,g5]@24 [ab5,c6]@19 ~@5", J: "~ [eb5,g5]@22 ~ [f5,ab5]@24",
  K: "[eb5,g5]@25 [ab5,c6]@16 ~@7", L: "[~@7 c4@5 c5@78 ~@6]/2", M: "[~@7 bb4@6 bb5@76 ~@7]/2",
  N: "[~@7 c5@6 c6@72 ~@11]/2", O: "[~@7 bb5@5 ~ bb6@76 ~@7]/2", P: "~@43 c4@3 ~@2",
  Q: "[~ c4@26 bb3@62 ~@3 bb3@3 ~]/2", R: "~@2 bb3@24 c4@17 ~ db4@4", S: "~ db4@12 ab4@9 [c4,c5]@2",
  T: "[~@2 [c4,c5]@26 [bb3,bb4]@64 ~ [bb3,bb4]@3]/2", // C Bb
  U: "[~@4 [bb3,bb4]@24 [c4,c5]@18 [db4,db5]@4 ~@2 [db4,db5]@24 [ab4,ab5]@18 ab3@4 ~@2 ab3@29 bb3@11 ~ ab3@7 db4@18 eb4@24 ab3@5 ~@2 ab3@28 bb3@11 ~ ab3@6 db4@17 ~ eb4@24 ab4@3]/6", // Bb C Db Ab
  V: "[~@3 ab4@113 ~@28]/3",
})).s("gm_string_ensemble_1").gain(0.27).pan(0.3)

// chords · piano · "A.PIANO 1"
const piano = note("<A@3 B C D@2 E@2 F@2 G@2 H@2 I@2 J@2 K@2 L@4 M@3 N O@2 P Q R@4 ~@5>".pickRestart({
  A: "[f2@12 g2@12 ~ eb3@6 d3@6 c3@97 ~@10]/3", B: "~ g4@23 ~ [f4,ab4]@23", C: "~ g4@23 [f1,f2]@24",
  D: "[~ [ab4,c5]@23 [bb4,db5]@23 c5@24 [bb1,bb2]@25]/2", E: "[~@6 c4@24 ~ bb3@23 ab3@24 g3@18]/2",
  F: "[~@7 f3@23 eb3@24 db3@25 ~@17]/2", G: "[~@7 c4@23 bb3@24 ab3@26 ~@16]/2", H: "[~@7 c4@23 bb3@24 ab3@25 ~@17]/2",
  I: "[f2@6 f2@3 f2@3 f2@18 f2@61 ~@5, [c3,f3]@91 ~@5]/2", J: "[~ bb1@6 bb1@3 bb1@3 bb1@19 bb1@59 ~@5, ~ bb2@90 ~@5]/2",
  K: "[~@2 f2@6 f2@2 f2@3 ~ f2@18 f2@60 ~@4, ~ [c3,f3]@45 ~@2]/2", // F5
  L: "[~ bb1@6 ~ bb1@3 bb1@2 bb1@18 ~ bb1@60 ~@11 f2@6 f2@6 f2@3 f2@3 f2@24 f2@6 f2@6 f2@6 f2@3 f2@3 f2@23, ~ bb2@90 ~@4 f2@8 ~@89, ~ c3, ~@49 ab3@47]/4",
  M: "[~@2 f2@95 ~ bb1@12 bb1@34, ~@97 bb2@47]/3", N: "~ gb2@6 gb2@17, ~ db3@23", O: "~ eb2@6 eb2@17, ~ bb2@23",
  P: "~ bb1@4 bb1@11, ~ bb2@15", Q: "~ gb2@4 gb2@11, ~ [db3,gb3]@15",
  R: "[~@4 eb2@12 eb2@36 eb2@12 eb2@36 [c2,c3]@22 ~ db3@25 ~@44, ~ [bb2,eb3]@12 [bb2,eb3]@12 ~@23]/4", // C Eb5
})).s("gm_piano").gain(0.25)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note("<~@3 A@2 B@2 ~@3 C ~ D@2 E ~@20 F@3 G H@3>".pickRestart({
  A: "~ eb4@23 ~@24", B: "[~@47 ab4@24 ~@25]/2", C: "~@31 c3@17", D: "[~@15 g3@11 ~@22]/2", E: "~@30 g3@17 ~",
  F: "[~@27 db2@25 [bb1,bb2]@48 ~ [c2,c3]@22 [db2,db3]@21]/3", G: "~@2 [bb1,bb2]@21 ~", H: "[~@4 [ab1,ab2]@113 ~@27]/3",
})).s("gm_piano").gain(0.15)

// chords · piano · "A.PIANO 1"
const piano_2 = note("<~@3 A B C@2 D E F G H I J K L M N O P Q R S T@3 U V@2 W X@8 Y Z@3>".pickRestart({
  A: "~@7 ab4@6 ~@6 ab4@5 ~@7 ab4@12 ab4@5, ~ eb5@23 ~ f5@23, ~@13 g4@11 ~@24", B: "~ ab4@2 ab4 ab5@4, ~ eb5@23 ~@24",
  C: "[~@18 db5@6 ~@6 db5@11 ~@12 db5@12 db5@6 [db5,f5,db6]@24 ~, ~@12 c5@11 ~ bb5@23 ab5@24 ~@25]/2", // Db
  D: "~@18 ab4@6 ~ ab4@2 ~@15 ab4@5 ~, eb5@24 ~ f5@23, g4@12 ~ g4@11 ~@13 g4@11, ~@6 ab4@12 ~@13 ab4@11 ~@6",
  E: "g4@6 ~@12 ab4@5 ~ [ab4,c5,ab5]@24, [eb4,eb5]@23 ~@25, ~ ab4@2 ~@5, ~@12 g4@11 ~@25", // Ab Eb
  F: "~ c5@5 ~@7 c5@11 db5 ~@17 db5@6, ~ [ab4,ab5]@23 [bb4,bb5]@24, ~@7 db5@12 ~@11 db5@12 ~@6, ~@3 c5", // Ab Bb
  G: "c5@6 ~@13 db5@6 [db5,f5,db6]@23, ab5 ~, ~ db5@2 ~@5, ~@13 c5@12 ~@23", // Db
  H: "~@18 ab4@5 ~@7 ab4@12 ab4@5 ~, ~ [eb5,g5]@23 [f5,ab5]@23 ~, ~@7 ab4@11 ~@30, ~@13 g4@11 ~@24", // Eb Fm
  I: "~@3 ab4 [ab5,c6]@4, [eb5,g5] ~, ~ ab4@2 ~@5, ~ g4 ~@2", // Ab Eb
  J: "~@18 ab4@5 ~@7 ab4@12 ab4@5 ~, ~ [eb5,g5]@22 ~ ab5@24, ~@7 ab4@11 ~@30, ~@12 g4@11 ~@25", // Eb
  K: "~@18 ab4@6 ~@18 c4@5 ~, [eb5,g5]@24 [ab5,c6]@23 ~, ~ ab4@2 ~@5, ~ g4 ~@2", // Eb Ab
  L: "~ [ab3,c4,f4], g4, [ab3,c4] ~, ~ c5@7, ~ c6@3", M: "~@26 d4@17 c4@4 ~, ~ [ab3,c4]@42 ~@5",
  N: "~@25 [bb3,db4,f4]@23, ~ g4@47, ~ [bb3,db4]@24 ~@23, ~@7 bb4@41, ~@13 bb5@35", // Bbm
  O: "~@26 c5@17 ~ [c4,c5] ~@3, ~ [db4,f4,bb4]@21 ~@2", // C Bbm
  P: "~@2 c5@5 c6@6 ~ [c6,c7]@11 ~ [ab4,c5]@22, ~ [g4,g5]@12 ~@11, ~@7 c5@18 [f4,f5]@23", // C Ab G F
  Q: "~@26 [d4,d5]@17 [c4,c5] ~@4, ~ [c4,f4,ab4,c5]@21 ~@2", // D C Fm
  R: "~ bb4@6 ~ bb5@5 [bb5,bb6]@12 ~ [f4,bb4,db5,f5]@22, ~ [g4,db5,g5]@24 ~@23, ~@4 bb4@9 ~@11", // Bb Bbm Gdim
  S: "~@26 [c5,c6]@18 [c5,c6] ~@3, ~ [bb4,db5,f5,bb5]@21 ~@2", T: "[~ [c5,f5,ab5,c6]@48 ~@23]/3", U: "~@43 c4@2 ~@3",
  V: "[~@23 bb3, ~ [db3,f3,c4]@24 gb3@23, ~@27 bb3@65 ~@4]/2", W: "~@43 db4@5, ~ [gb3,bb3]@23, ~@13 c4@11",
  X: "[~@44 [c4,c5]@7 [c4,f4,bb4,c5]@25 [bb3,db4,f4]@23 bb3@42 [bb3,bb4]@6 ~@42 [db4,db5]@6 ~@43 ab3@6 eb3@22 ~@19 ab3@7 ~@42 ab3@6 ~@29 bb3@12 ab3@3, ~@2 [gb3,bb3,db4]@48 ~@49 [db4,gb4]@48 ~ [bb3,eb4,gb4,bb4]@48 ~@24 [ab4,ab5]@24 ~@23 e3@25 [e3,db4]@48 ~@23 e3@21, ~@26 ab4@24 ~@26 bb4@65 ~@31 [c4,c5]@24 [db4,gb4,bb4,db5]@48 ab3@41 ~@7 ab3@42 ~@7 ab3@40 ~@3, ~@273 bb3@19 ~@18 eb4@31 ~@43]/8", // C Fsus4 Bbm Bb Db Gb Gb5 Ebm …
  Y: "~@21 eb4@24 ab4@2 ~, ~@2 [e3,ab3,db4]@21 ~", Z: "[~@4 [eb4,ab4]@113 ~@27]/3",
})).s("gm_piano").gain(0.25)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft_2 = note("<~@3 A B C D E ~ F G H ~ I ~@23 J ~ K@3>".pickRestart({
  A: "~@37 g4@11", B: "~ g4 [ab4,c5]@2", C: "~@6 db5@11 ~@24 db5@6 ~, ~ ab5@23 ~@11 c5@12 ~", D: "~@11 c5@12 ~@25",
  E: "eb4@24 ~ f4@23", F: "~@19 db5@5 ~@24", G: "ab4 ~", H: "~@36 g4@11 ~", I: "~@36 g4@11 ~, ~ f5",
  J: "~@5 eb3@23 ~@20", K: "[~@4 [ab3,c4]@113 ~@27]/3",
})).s("gm_piano").gain(0.15)

// other · french horn · "FR.HORN"
const french_horn = note("<~@14 A B C D E F G H I J@2 ~@17>".pickRestart({
  A: "~@21 c4 ~@2", B: "g4 f4", C: "~ c4@23 ~ d4@13 ~@5 c4@2 ~@3", D: "~ g4@24 f4@23", E: "~ bb4@12 c5@5 ~@4 c4 ~",
  F: "~@2 g4@23 f4@23", G: "~@2 c4@24 d4@11 ~@7 c4@2 ~@2", H: "~ g4@12 f4@11", I: "~ bb4@24 ~ c5@15 ~@3 c5@2 ~@2",
  J: "[~@2 c5@83 ~@11]/2",
})).s("gm_french_horn").gain(0.21).pan(0.8)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note("<A@3 ~@4 B@2 C@2 D@2 E@2 F@2 G@2 H@4 I@2 J@2 ~@8 K@2 L@2 M@3>".pickRestart({
  A: "[f2@11 ~ g2@12 eb3@6 ~ d3@7 c3@96 ~@10]/3", B: "[~@6 c4@24 ~ bb3@23 ab3@24 g3@18]/2",
  C: "[~@7 f3@23 eb3@24 db3@24 ~ c3@16 ~]/2", D: "[~@7 c4@23 bb3@23 ab3@24 ~ g3@13 ~@5]/2",
  E: "[~@7 c4@23 bb3@23 ~ ab3@24 g3@10 ~@8]/2", F: "[~ f2@95, [c3,ab3,c4]]/2", G: "[~ [bb1,bb3,db4]@95, ~ f3@89 ~@6]/2",
  H: "[~ [f2,ab3,c4]@96 [bb1,f3,bb3,db4]@95]/4", I: "[~@2 [f2,c3,ab3,c4]@89 ~@5]/2", J: "[~ f2@41 ~@6]/2",
  K: "[~@4 c2@22 ~ db2@25 bb1@40 ~@4]/2", L: "[~@5 c2@22 db2@25 bb1@39 ~@5]/2", M: "[~@4 ab1@113 ~@27]/3",
})).s("gm_string_ensemble_1").gain(0.18).pan(0.7)

// other · trumpet
const trumpet = note("<~@18 A B C D E F@2 ~@17>".pickRestart({
  A: "~@43 c5@2 ~@3", B: "~ g5@25 f5@22", C: "~@2 c5@24 d5@14 ~@4 c5 ~@3", D: "~ g5@12 f5@11",
  E: "~@2 bb5@24 c6@13 ~@5 c6@2 ~@2", F: "[~@2 c6@85 ~@9]/2",
})).s("gm_trumpet").gain(0.29).pan(0.3)

// other · timpani
const timpani = note("<A ~@3 B ~ C ~ D ~ E ~ F ~ B G H I J K L M N O P Q ~ R S T U V W X Y ~@7>".pickRestart({
  A: "~@24 eb3@3 ~@10 c3@11", B: "~@12 f2@19 ~@17", C: "~@11 f2@19 ~@18", D: "~@12 f2@25 ~@11", E: "~@12 f2@35 ~",
  F: "~@3 f2@5 ~@4", G: "f2@3 ~@3 f2 ~@2 f2 ~@2 f2@13 ~@5 f2@5 ~@13", H: "~ f2@2 ~@4 f2 ~@2 f2 ~@2 f2@16 ~@2 f2@14 ~@3",
  I: "~ f2@3 ~@3 f2 ~@2 f2 ~@2 f2@15 ~@3 f2@14 ~@3", J: "~@2 f2@2 ~@4 f2 ~@2 f2 ~ f2@15 ~@4 f2@14 ~@2",
  K: "~@2 f2@2 ~@7 f2 ~ f2@15 ~@4 f2@14 ~@2", L: "~@2 f2@2 ~@4 f2 ~@2 f2 ~ f2@16 ~@3 f2@14 ~@2",
  M: "~ f2@4 ~@5 f2 ~@2 f2@15 ~@3 f2@14 ~@3", N: "~@2 f2@2 ~@3 f2 ~@3 f2 ~ f2@14 ~@5 f2@2 ~@14",
  O: "~@2 f2@6 ~@5 f2@7 ~@5 f2@3 ~@20", P: "~ f2@6 ~@6 f2@6 ~@6 f2@5 ~@18", Q: "~ f2 ~@22", R: "~@14 bb2@7 ~@27",
  S: "~@14 bb2@9 ~@25", T: "~@14 bb2@11 ~@23", U: "~@13 bb2@11 ~@24", V: "~@15 bb2@7 ~@26", W: "~@5 bb2@3 ~@8",
  X: "~@16 bb2@11 ~@21", Y: "~@8 bb2@5 ~@11",
})).s("gm_timpani").gain(0.2).pan(0.3)

// chords · trombone
const trombone = note("<~@27 A B C@2 D B E@2 F G H I J@3>".pickRestart({
  A: "~ [bb2,f3,bb3,db4]@47", B: "~ [gb2,db3,gb3,bb3,db4]@15", C: "~ [eb2,bb2,gb3,bb3,eb4]@23",
  D: "~ [bb2,f3,bb3,db4]@15", E: "~ [eb2,bb2,gb3,bb3,eb4]@11", F: "~@4 [eb3,ab3,c4]@22 ~ [e3,db4]@21, ~@13 ab3@11",
  G: "~@2 [e3,ab3,db4]@21 ~", H: "~@5 [eb3,ab3,c4]@22 [e3,ab3,db4]@21", I: "~@2 [e3,ab3]@19 ~@3, ~@3 db4@38 ~@7",
  J: "[~@4 eb3@113 ~@27, ~@3 [ab3,c4]@113 ~@28]/3", // Ab
})).s("gm_trombone").gain(0.18).pan(0.7)

// drums · snare
const snare = s("sd").struct(`<
  ~@22
  [~@47 x]
  [x ~ x ~@4 x ~@5 x ~@5 x ~@2 x ~@3 x ~@20 x]
  [x!2 ~@5 x ~@5 x ~@5 x ~@2 x ~@2 x ~@21 x]
  [~ x!2 ~@45]
  ~@16
>`).gain(0.35)

stack(
  string_ensemble_1, piano, piano_soft, piano_2, piano_soft_2, french_horn, string_ensemble_1_2, trumpet, timpani,
  trombone, snare
)

More by Barry John