Strudelify

Kicking Bird's Gift

Barry John

KeyF majorTempo70 bpm
0:00/0:00
// Kicking Bird's Gift — Barry John
// 70 bpm, 4/4, key F 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 27 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/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@2 K L M N@2 O@8 ~@2>".pickRestart({
  A: "[c3,f3]", B: "~ [bb2,f3]@47", C: "~ d3@5, ~ bb1@23", D: "~@13 db4@35, ~ a2@23, ~@7 e3@41",
  E: "~@13 gb3@35, ~ d2@23, ~@7 a2@41", F: "~@7 db4@17, ~ a2@47, ~ e3@5", G: "~@5 gb3@11, ~ d2@15, ~@3 a2@13",
  H: "~@19 e3@5, ~ a2@15, ~@9 e3@29 ~@10, ~@5 db4@11, ~@13 a3@11", I: "~@7 gb3@17, ~ d2@15, ~ a2@5",
  J: "[~@38 e3@13 ~@13 gb3@32, ~@3 a2@48 ~ d2@44, ~@9 e3@29 ~@20 a2@38, ~@5 db4@12 ~@15, ~@27 a3@25 ~@44]/2",
  K: "~@16 c3@12 ~ f3@11 f3@8, ~ f2@13 ~@10, ~@4 c3@12 ~@13 bb2@19, ~@5 a3@24 ~@19",
  L: "~@17 c3@11 ~@12 f3@8, ~@3 f2@26 bb1@19, ~@4 c3@13 ~@31, ~@5 a3@23 ~@20",
  M: "~@16 e3@12 ~ a3@11 a3@8, ~ a2@13 ~@10, ~@3 e3@13 ~@13 d3@19, ~@5 db4@24 ~@19",
  N: "[~@17 e3@12 ~@11 a2@11 ~@36 a3@9, ~@2 a2@27 d2@23 f2@44, ~@3 e3@13 ~@42 c3@38, ~ db4@6 ~@9 a3@3 f3@5, ~@35 c4@13]/2",
  O: "[~@39 g3@13 ~@35 a3@12 ~@37 g3@13 ~@11 a3@12 ~@13 d4@13 ~@11 a3@11 ~@14 d4@12 ~@23 f3@24 ~@25 f3@24 ~@42, ~@4 eb2@48 f2@47 ~ eb2@48 ~ f2@23 ~@26 f2@23 ~@25 f2@47 ~ f2@48 ~@42, ~@9 bb2@43 ~@6 c3@42 ~@6 bb2@42 ~@6 c3@18 bb2@25 ~@7 c3@17 bb2@25 ~@6 c3@11 c3@30 ~@7 c3@12 c3@31 ~@41, ~@15 g3@12 eb3@25 ~@17 c4@30 ~@18 bb3@31 ~@110 a3@35 ~@13 a3@37 ~@41, ~@21 bb3@31 ~@12 a3@12 f3@24 ~@12 g3@11 eb3@25 ~@31 f3@19 ~@30 f3@18 ~@138]/8",
})).s("gm_piano").gain(0.2)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note("<A ~ B ~@21 C@3>".pickRestart({
  A: "f2", B: "~ [f2,c3,f3]@23", C: "[~@7 [f2,c3,f3]@111 ~@26]/3",
})).s("gm_piano").gain(0.1)

// chords · piano · "A.PIANO 1"
const piano_2 = note("<A B C D E F G@2 H I J@2 K@8 L M N@5>".pickRestart({
  A: "c4@12 d4@6 a3@6 f4@19 g4@5, a3@17 ~@31", B: "~ g4@12 ~ a4@34, ~ [bb3,d4]@47",
  C: "~@2 c4@11 d4@6 a3@6 f4@18 g4@5, ~@2 a3@17 ~@29", D: "~ g4@6 a4@17, ~ [f3,bb3,d4]@23",
  E: "~@13 [e4,a4,db5]@12 b4@18 a4@5", F: "~@2 [d4,gb4,a4]@11 gb4@12 a4@12 ~ b4@10",
  G: "[~@14 [e4,a4,db5]@12 b4@19 a4@6 [d4,gb4,a4]@12 gb4@11 ~ a4@11 b4@10]/2", // A D
  H: "~@15 [e4,db5]@11 [a4,e5]@18 e4@4, ~ e6@15", I: "~@3 [gb4,a4,e5]@11 gb5@11 ~ b4@13 a4@9",
  J: "[~@15 [e4,db5]@12 [a4,e5]@18 e4@7 [gb4,a4,e5]@12 gb5@11 b4@13 a4@8, ~@3 e6@49 ~@44]/2", // Dbm A5 Gbm7
  K: "[~@10 a4@12 ~@19 c5@6 d5@7 ~@6 a4@11 ~@17 c5@6 d5@7 ~@6 a4@11 ~@18 ab5@6 a5@6 ~@6 a4@12 ~@18 ab5@6 a5@6 ~ [a4,c5,f5,a5]@23 [c5,f5,a5,c6]@17 [c5,c6]@6 ~ [c5,eb5,g5,bb5,c6]@11 [eb4,g4,bb4,eb5]@18 d5@6 eb5@7 bb5@6 [a4,c5,f5,a5]@23 ~ [c5,f5,a5,c6]@18 [c5,c6]@6 [c5,eb5,g5,bb5,c6]@12 [eb4,g4,bb4,eb5]@17 d5@6 ~ eb5@6 bb5@2, ~@4 c4@24 ~ d4@25 c4@23 [d4,f4]@18 ~@6 e4@23 ~ gb4@23 e4@24 ~ [d4,gb4]@24 ~@187, ~@22 d5@18 ~@31 d5@17 ~@30 e5@17 ~@31 e5@18 ~@200]/8", // F C Cm7 Eb F C Cm7 Eb …
  L: "~@5 [a4,c5,f5,a5]@17 a5@6 [f4,bb4,d5,g5]@7 f5@13", // F Gm7
  M: "[bb3,bb4]@6 [a4,c5,f5,a5]@17 a5@6 [f4,bb4,d5,g5]@6 ~ f5@12", // Bb F Gm7
  N: "[[bb3,bb4]@6 [f4,a4,c5,f5]@96 ~ [a3,c4]@112 ~@25]/5", // Bb F Am
})).s("gm_piano").gain(0.25)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<A B C@2 D E F@2 G H I J K@3 L@4 M@6 ~@2>".pickRestart({
  A: "[c3,a3]", B: "~ [bb2,bb3,d4]@47", C: "[~@2 [f2,c3,a3]@47 [bb2,bb3,d4]@47, ~ f3@47]/2", D: "~ [a2,db4,e4]@47",
  E: "~ d2@21 ~@2, ~ [d4,gb4]@42 ~@5", F: "[~@2 [a3,db4,e4]@49 ~ [d2,gb4]@40 ~@4, ~@2 a2@46 ~@3 d4@40 ~@5]/2",
  G: "~@3 db4@6 e3@6 db4@8 ~@4 a3@9 ~@2 e3@10, ~ a2@14 ~, ~@3 e4@17 ~@28", H: "~@8 a2@6 gb3@33 ~, ~ d2@23",
  I: "~@9 e3@5 ~ db4@8 ~@4 a3@10 ~ e3@7 g2 ~@2, ~ a2@22 ~", J: "~@5 a2@3 gb3@16, ~ d2@11",
  K: "[~@16 c3@11 ~@13 f3@13 ~@12 c3@11 ~@11 f3@13 ~@12 e3@12 ~ d2@11 a2@8, ~@4 f2@24 bb2@25 ~ f2@22 bb2@24 ~ a2@24 ~@19]/3",
  L: "[~@4 a2@12 e3@12 ~@12 a2@12 ~@6 c3@6 a3@6 c4@6 f3@11 ~ a3@12 ~@5 bb2@6 g3@5 ~ bb3@6 eb3@11 ~ g3@13 ~@6 c3@5 a3@5 ~ c4@6 ~ f3@11 a3@9, ~@29 d2@23 f2@47 ~ eb2@48 f2@44]/4",
  M: "[~@10 bb2@5 g3@5 ~ bb3@5 ~ eb3@12 g3@12 ~@7 c3@5 ~ a3@11 ~@7 f3@5 ~@2 d4@10 ~@9 c3@5 a3@10 ~@8 f3@6 ~ d4@9 ~@9 c3@5 ~ a3@4 ~ e3@6 f3@24 ~@7 c3@5 a3@5 ~ e3@6 ~ f3@24 ~@42, ~@4 eb2@49 f2@23 bb2@25 ~ f2@23 bb2@25 f2@45 ~@3 f2@48 ~@42]/6",
})).s("gm_string_ensemble_1").gain(0.11).pan(0.4)

// chords · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note("<A B ~@2 C@2 ~ D E ~@18>".pickRestart({
  A: "[f2,f3]@47 ~", B: "~ f3@46 ~", C: "[~ a3@90 ~@5]/2", D: "~@4 a3@43 ~", E: "~ a3@3 ~@12",
})).s("gm_string_ensemble_1").gain(0.05).pan(0.4)

// chords · trombone
const trombone = note("<~@8 A B A C D@3 E F G H I J K L@5>".pickRestart({
  A: "~ [a3,db4,e4]@15", B: "~@3 [a3,d4,gb4]@40 ~@5", C: "~@4 [a3,d4,gb4]@41 ~@3",
  D: "[~@4 [f3,a3,c4]@23 ~@2 [f3,bb3,d4]@24 ~ [f3,a3,c4]@22 ~ [f3,bb3]@23 ~ [a3,e4]@23 ~ [a3,d4,gb4]@19, ~@76 d4@24 ~ db4@18 ~@25]/3", // F Bb F Bb5 A5 D
  E: "~@4 [a3,db4,e4]@23 ~@2 [d4,gb4]@19, ~@7 a3@5", F: "~@5 [f3,a3,c4]@41 ~@2", G: "~@4 [g3,bb3,eb4]@41 ~@3",
  H: "~@4 [f3,a3,c4]@43 ~", I: "~@4 [g3,bb3,eb4]@39 ~@5", J: "~@5 [f3,a3,c4]@20 ~@4 f3@19, ~@7 [bb3,d4]@5",
  K: "~@6 [f3,a3,c4]@22 ~ [f3,bb3,d4]@18 ~", L: "[~@7 f3@91 ~@5 [f2,c3,a3,c4]@112 ~@25, ~@6 [a3,c4]@91 ~@143]/5",
})).s("gm_trombone").gain(0.12).pan(0.7)

// other · oboe
const oboe = note("<~@8 A@2 B@2 ~@15>".pickRestart({
  A: "[~@15 db5@11 e5@18 e4@7 e5@11 gb5@11 ~ b4@12 a4@10]/2", B: "[~@15 db5@12 e5@18 e4@7 e5@12 gb5@11 b4@13 a4@8]/2",
})).s("gm_oboe").gain(0.17).pan(0.4)

// other · clarinet
const clarinet = note("<A B C D E F G@2 ~@19>".pickRestart({
  A: "c4@11 ~ d4@6 a3@6 f4@19 g4@5", B: "~ g4@12 ~ a4@27 ~@7", C: "~@2 c4@10 ~ d4@6 a3@6 f4@18 g4@5",
  D: "~@2 g4@12 a4@25 ~@9", E: "~@13 db5@11 ~ b4@18 a4@5", F: "~ a4@11 ~ gb4@11 ~ a4@13 b4@10",
  G: "[~@14 db5@11 ~ b4@19 a4@5 ~ a4@12 gb4@11 ~ a4@11 b4@10]/2",
})).s("gm_clarinet").gain(0.12).pan(0.4)

// other · orchestral harp · "HARP"
const orchestral_harp = note("<~@4 A B C D E F G@2 ~@15>".pickRestart({
  A: "~@13 db4@14 ~@21, ~@2 a2@27 ~@19, ~@7 e3@20 ~@21", B: "~ d2@6 a2@6 gb3@20 ~@15", C: "~ a2@6 e3@7 db4@24 ~@10",
  D: "~ d2@2 a2@2 gb3@11", E: "~@3 a2@5 ~ e3@5 db4@11 ~ a3@11 ~ e3@10", F: "~ d2@2 a2@2 gb3@8 ~@3",
  G: "[~@2 a2@6 e3@6 ~ db4@11 ~ a3@11 e3@14 ~ d2@5 a2@6 gb3@25 ~@7]/2",
})).s("gm_orchestral_harp").gain(0.17).pan(0.4)

stack(piano, piano_soft, piano_2, string_ensemble_1, string_ensemble_1_soft, trombone, oboe, clarinet, orchestral_harp)

More by Barry John