Strudelify

Rescue of Dances With Wolves

Barry John

KeyE♭ majorTempo90 bpm
0:00/0:00
// Rescue of Dances With Wolves — Barry John
// 90 bpm, 4/4, key D# major. 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. Source detail keeps the original performance.
setcpm(90/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 · piano · "A.PIANO 1"
const piano = note(`<
  ~ A ~ B C D E F G H I J K L M N K L O P Q R S T U V W X Y Z M AA AB AC AD AE AF AG AH@4
>`.pickRestart({
  A: "~@31 gb4@17, ~@7 eb4@18 ~@23, ~@19 f4@29", B: "~@19 f5@12 gb5@17, ~@7 eb5@24 ~@17",
  C: "~ eb2@13 eb2@12 eb2@11 eb2@11, ~ [bb2,eb3,g3,bb3]@47", D: "~ c2@12 c2@12 c2@12 c2@11, ~ [g2,c3]@47",
  E: "~ ab2@11 ab2@12 ~ ab2@11 ab2@12, ~ [eb3,ab3]@47", F: "~ bb1@12 bb1@12 bb1@12 ~ bb1@10, ~ bb2@47",
  G: "~@2 eb2@13 eb2@12 eb2@11 eb2@10, ~ bb2@47, ~ [eb3,g3,bb3]@23", H: "~@2 c2@12 c2@12 c2@11 c2@11, ~ [g2,c3]@23",
  I: "~@2 ab2@11 ab2@12 ab2@11 ~ ab2@11, ~ [eb3,ab3]@23", J: "~ bb2@13 bb2@12 bb2@12 bb2@10, ~ [f3,bb3]@47",
  K: "~@2 f2@12 f2@9 ~@3 f2@12 f2@10, ~ c3@23, ~@23 c2@25", L: "~@2 b2@12 b2@9 ~@3 b2@12 b2@10, ~ gb3@23, ~@23 gb2@25",
  M: "~@2 gb2@12 gb2@9 ~@3 gb2@12 gb2@10, ~ db3@23, ~@23 db2@25",
  N: "~ bb2@12 ~ bb2@10 ~@3 bb2@11 bb2@10, ~ f3@47, ~ f2", O: "~@2 gb2@12 ~ gb2@9 db2@3 gb2@11 gb2@10, ~ db3@23",
  P: "~@2 bb2@12 ~ bb2@9 ~@2 bb2@12 bb2@10, ~ f3@23, ~ f2", Q: "~ eb2@6 eb2@6 eb2@6 eb2@5, ~ [bb2,eb3,g3,bb3]@23",
  R: "~@2 c2@11 c2@12 c2@11 c2@12, ~ [g2,c3]@23", S: "ab2@12 ~ ab2@11 ab2@12 ab2@12, [eb3,ab3]", T: "bb1!4, bb2",
  U: "~ eb2@12 eb2@12 eb2@11 eb2@12, ~ [bb2,eb3,g3,bb3]@47", V: "~ c2@12 c2@12 c2@11 c2@12, ~ [g2,c3]@47",
  W: "~ ab2@12 ab2@12 ab2@12 ab2@11, ~ [eb3,ab3]@47", X: "~ bb2@12 bb2@12 bb2@12 bb2@11, ~ [f3,bb3]@47",
  Y: "~ f2@12 f2@9 ~@3 f2@12 f2@11, ~ c3@47, ~@11 c2@13", Z: "~@2 b2@12 b2@10 ~@3 b2@12 b2@9, ~ gb3@23, ~ gb2",
  AA: "~ bb2@12 ~ bb2@9 ~@3 bb2@11 bb2@11, ~ f3@47, ~@23 f2@25",
  AB: "~ f2@13 f2@8 ~@3 f2@12 f2@11, ~ c3@47, ~@11 c2@13", AC: "~ b2@12 b2@9 ~@3 b2@12 b2@11, ~ gb3@47, ~@11 gb2@13",
  AD: "~@2 gb2@13 gb2@8 db2@2 ~ gb2@11 gb2@11, ~ db3@23", AE: "~@2 bb2@12 bb2@9 ~@2 bb2@13 bb2@10, ~ f3@23, ~@23 f2@25",
  AF: "~ eb2@12 ~ eb2@11 eb2@11 eb2@11 ~, ~ [bb2,eb3,g3,bb3]@46 ~", AG: "c2@12 c2@11 ~ c2@12 c2@12, [g2,c3]",
  AH: "[~ eb2@13 eb2@12 eb2@12 eb2@11 ~ eb2@52 eb2@62 ~@28, ~ [bb2,eb3]@163 ~@28]/4", // Eb5
})).s("gm_piano").gain(0.35)

// chords · piano · "A.PIANO 1"
const piano_2 = note(`<
  A B C D E F G H I J K L M N O@2 P Q R@2 S T U V W X Y L Z N AA@2 AB AC AD@2 AE AF AG@4
>`.pickRestart({
  A: "[gb4,bb4]@2 [ab4,c5]@2 [gb4,bb4]@3 [ab4,c5]", B: "~ [gb4,bb4]@47",
  C: "~ [gb5,bb5]@12 [ab5,c6]@12 [gb5,bb5]@17 [ab5,c6]@6", D: "~ [gb5,bb5]@47", E: "~@8 bb3@12 eb3@6 d4@17 f4@5",
  F: "~ [g3,c4,e4]@6 c4@12 g3@29", G: "~@9 eb4@3 f4@6 ab4@12 g4@12 ~ f4@5, ~ b3@7", H: "~ [f3,bb3,d4]@23, ~ f4@47",
  I: "~@8 [bb3,bb4]@7 ~@5 [eb3,eb4]@6 ~ [d4,d5]@17 [f4,f5]@4", J: "~ [e4,g4,c5,e5]@3 [c4,c5]@6 [g3,g4]@14",
  K: "~@8 [b3,b4]@2 ~ [eb4,eb5]@2 [f4,f5]@6 [ab4,ab5]@12 [g4,g5]@12 [f4,f5]@5", L: "~ [bb4,d5,f5,bb5]@47",
  M: "~@7 f4@3 ~@4 bb4@34, ~ [ab3,c4]@23", N: "~@8 bb4@3 ~@3 ab4@34, ~ [b3,eb4]@23",
  O: "[~@8 gb4@3 ~@3 eb5@41 ~ d5@3 ~@3 [d5,f5,bb5]@34, ~@2 [bb3,db4]@47 ~@47]/2", // Bb Bbm
  P: "~@8 [ab4,c5,f5]@3 ~@3 [c5,f5,bb5]@34", Q: "~@8 [b4,eb5,bb5]@2 ~@5 [b4,eb5]@33, ~@7 ab5@17",
  R: "[~@8 [bb4,db5,gb5]@3 ~@4 [eb5,bb5,eb6]@41 [f5,bb5,d6]@3 ~@4 [bb5,d6,f6,bb6]@33, ~@15 gb5@46 ~@35]/2", // Gb Eb5 Bb
  S: "~@4 bb3@6 eb3@3 d4@9 f4@2", T: "~@2 [g3,c4,e4]@5 c4@12 g3@29", U: "~@10 eb4@3 f4@5 ab4@12 g4@12 f4@6, ~ b3@7",
  V: "[f3,bb3,d4,f4]", W: "~@7 [bb3,bb4]@6 ~@6 [eb3,eb4]@6 [d4,d5]@17 [f4,f5]@6",
  X: "~ [e4,g4,c5,e5]@6 [c4,c5]@12 [g3,g4]@29", // C G
  Y: "~@7 [b3,b4]@2 ~ [eb4,eb5]@2 ~ [f4,f5]@6 [ab4,ab5]@12 [g4,g5]@12 [f4,f5]@5", // B Eb F Ab G F
  Z: "~@7 f4@3 ~@3 bb4@35, ~ [ab3,c4]@47", AA: "[~@8 gb4@3 ~@3 eb5@41 d5@3 ~@4 [d5,f5,bb5]@34, ~ [bb3,db4]@24 ~@23]/2",
  AB: "~@7 [ab4,c5,f5]@3 ~@4 [c5,f5,bb5]@34", AC: "~@7 [b4,eb5,bb5]@2 ~@4 [b4,eb5,ab5]@35",
  AD: "[~@8 [bb4,db5,gb5]@3 ~@4 [eb5,bb5,eb6]@41 [f5,bb5,d6]@3 ~@3 [bb5,d6,f6,bb6]@34, ~@5 gb5@15 ~@12]/2", // Gb Eb5 Bb
  AE: "~@8 bb3@11 eb3@6 d4@17 f4@6", AF: "[g3,c4,e4] c4@2 ~@2 [g4,g5]@2 [a4,a5], ~@3 g3@5",
  AG: "[~ [bb4,eb5,g5,bb5]@162 ~@29]/4", // Eb
})).s("gm_piano").gain(0.4)

// other · french horn · "FR.HORN"
const french_horn = note(`<
  ~@4
  [~@7 bb3@12 eb3@7 d4@16 f4@5 ~]
  [e4@7 c4@12 g3@27 ~@2]
  [~@6 b3@2 eb4@2 ~ f4@7 ab4@12 g4@12 f4@6]
  [~ f4@38 ~@9]
  [~@8 bb3@12 eb3@7 d4@9 ~@12]
  ~@33
>`).s("gm_french_horn").gain(0.36)

// chords · brass section · "BRASS 1"
const brass_section = note("<~@4 A B C D E F G H ~@8 I J K L M N O P ~@8 Q R@5>".pickRestart({
  A: "~ [eb2,eb3,g3,bb3]@47", B: "~ [c2,c4]@21 ~@2, ~ [e3,g3]@42 ~@5", C: "~ [ab2,ab3,b3]@47",
  D: "~ [bb2,f3,bb3,d4]@21 ~@2", E: "~ [eb2,eb3,g3]@23, ~ bb3@47", F: "~ e3@15, ~ [c2,g3,c4]@23",
  G: "~ [ab2,ab3,b3,eb4]@22 ~", H: "~ [bb2,f3,d4]@22 ~, ~ bb3@44 ~@3", I: "~ [eb2,eb3,g3,bb3]@23",
  J: "~ [c2,e3,g3,c4]@21 ~@2", K: "~ [ab2,ab3,b3]@42 ~@5, eb4@7 ~", L: "~ [bb2,f3]@37 ~@10, [bb3,d4]@19 ~@5",
  M: "~ [eb2,eb3,g3,bb3]@43 ~@4", N: "~ [c2,e3,g3,c4]@42 ~@5", O: "~ [ab2,ab3,b3,eb4]@41 ~@6",
  P: "~ [bb2,f3,bb3,d4]@45 ~@2", Q: "~ [eb2,eb3]@21 ~@2, ~ [g3,bb3]@43 ~@4",
  R: "[~ c2@47 ~ [eb2,eb3,bb3]@161 ~@30, g3@7 ~, [e3,c4]@47 ~@193]/5", // Eb5 C
})).s("gm_brass_section").gain(0.35).pan(0.7)

// chords · trombone
const trombone = note("<~@12 A B C D A E F G ~@8 H I J K H L J M ~@6>".pickRestart({
  A: "~ [f3,ab3,c4]@23", B: "~ [gb3,b3,eb4]@21 ~@2", C: "~@2 [gb3,bb3,db4]@45 ~", D: "~@2 [f3,d4]@39 ~@7, ~ bb3@39 ~@8",
  E: "~ [gb3,b3,eb4]@20 ~@3", F: "~ [gb3,db4]@15, ~ bb3@23", G: "~@3 f3@41 ~@4, ~@2 [bb3,d4]@41 ~@5",
  H: "~ [f2,c3,f3,ab3,c4]@47", I: "~ [b2,gb3,b3,eb4]@23", J: "~ [gb2,db3,gb3,bb3,db4]@23",
  K: "~ [bb2,f3,bb3]@23, ~ d4@44 ~@3", L: "~ b2@23, ~ [gb3,b3,eb4]@47", M: "~@2 [bb2,f3,bb3,d4]@43 ~@3",
})).s("gm_trombone").gain(0.27).pan(0.4)

// other · trumpet
const trumpet = note("<~@12 A B C D ~@12 E B F G ~@10>".pickRestart({
  A: "~@7 f4@2 ~@5 bb4@34", B: "~@8 bb4@3 ~@4 ab4@30 ~@3", C: "~@9 gb4@2 ~@4 eb5@31 ~@2", D: "~@7 d5@2 ~@5 bb5@31 ~@3",
  E: "~@7 f4@2 ~@4 bb4@35", F: "~@4 gb4 ~@2 eb5@17", G: "~@7 d5@2 ~@4 bb5@33 ~@2",
})).s("gm_trumpet").gain(0.45).pan(0.4)

// other · flute
const flute = note("<~ A ~ B ~@6 C D ~@14 E F ~@14>".pickRestart({
  A: "~@7 eb4@12 f4@12 gb4@13 ~@4", B: "~@7 eb5@11 ~ f5@12 gb5@13 ~@4",
  C: "~@8 b4@2 eb5@3 ~ e5 ~@4 ab5@11 ~ g5@11 f5@6, ~@13 f5@6 ~@29", D: "~ bb5@41 ~@6",
  E: "~@7 b4@2 eb5@4 f5@6 ab5@11 ~ g5@12 f5@5", F: "~ bb5@42 ~@5",
})).s("gm_flute").gain(0.32).pan(0.6)

// other · clarinet
const clarinet = note("<~@8 A B C D ~@4 E F G H ~@4 I J K L ~@14>".pickRestart({
  A: "~@8 bb4@12 eb4@7 d5@16 f5@5", B: "~ e5@6 ~ c5@11 ~ g4@23 ~@5", C: "~@7 b3@2 ~ eb4@3 f4@6 ab4@11 ~ g4@11 f4@6",
  D: "~ bb4@38 ~@9", E: "~@4 f4 ~@2 bb4@17", F: "~@8 bb4@6 ~ ab4@30 ~@3", G: "~@8 gb4@2 ~@5 eb5@33",
  H: "~@9 d5@2 ~@4 bb5@32 ~", I: "~@8 bb4@11 eb4@6 d5@17 ~ f5@5", J: "e5@7 c5@12 g4@25 ~@4",
  K: "~@6 b3@2 ~ eb4@3 f4@7 ab4@11 ~ g4@12 f4@5", L: "~ bb4@40 ~@7",
})).s("gm_clarinet").gain(0.19).pan(0.7)

// bass · pizzicato strings · "PIZZICATO"
const bass = note("<~@4 A B C D E F G H I J K L ~@12 M N O P Q R S T U V W X ~@2>".pickRestart({
  A: "~ eb2@11 ~@25 eb2@4 ~@7", B: "~ c2@8 ~@39", C: "ab1@7 ~@29 ab1@4 ~@8", D: "~ bb1@6 ~@41",
  E: "~ eb2@8 ~@29 eb2@4 ~@6", F: "~ c2@3 ~@20", G: "~ ab1@7 ~@29 ab1@4 ~@7", H: "~ bb1@11 ~@36",
  I: "~@2 f2@2 ~@10 f2@3 ~@6 c2@2 f2@5 ~@18", J: "~@2 b2@3 ~@9 b2@4 ~@5 gb2@2 ~ b2@5 ~@17",
  K: "~@2 gb2@3 ~@9 gb2@4 ~@5 db2@2 gb2@8 ~@15", L: "~ bb2@5 ~@8 bb2@4 ~@6 f2@2 bb2@5 ~@17",
  M: "~ f2@3 ~@10 f2@4 ~@5 c2@2 f2@5 ~@18", N: "~ b2@3 ~@10 b2@5 ~@5 gb2@2 b2@5 ~@17",
  O: "~ gb2@4 ~@9 gb2@4 ~@5 db2@2 ~ gb2@7 ~@15", P: "~@2 bb2@5 ~@7 bb2@5 ~@4 f2@2 bb2@6 ~@17",
  Q: "~ f2@5 ~@7 f2@4 ~@5 c2@2 ~ f2@6 ~@17", R: "~@2 b2@4 ~@7 b2@4 ~@5 gb2@2 ~ b2@5 ~@18",
  S: "~@2 gb2@6 ~@7 gb2@3 ~@6 db2@2 gb2@7 ~@15", T: "~ bb2@5 ~@8 bb2@4 ~@4 f2@2 ~ bb2@6 ~@17", U: "eb2@2 ~@7 eb2 ~@2",
  V: "c2 ~@7", W: "~ eb2@7 ~@29 eb2@4 ~@7", X: "~ eb2@2 ~@21",
})).s("gm_pizzicato_strings").gain(0.45).pan(0.4)

stack(piano, piano_2, french_horn, brass_section, trombone, trumpet, flute, clarinet, bass)

More by Barry John