Strudelify

birdland

Bradley Herrin

KeyD majorTempo164 bpm
0:00/0:00
// birdland — Bradley Herrin
// 164 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/3856256; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 156 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(164/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.

// bass · clarinet · "Bass Clarinet"
const bass = note(`<
  A@3 B@2 C@7 D@16 E@8 F@2 G H@3 I@2 J@2 K@2 L M@3 L N@3 O P@4 Q R@4 S@3 Q S@3 Q T@2 U@2 V@2 U@2 W D@16 X@8 Y@6 G H@3
  I@2 J@2 K@2 Z@2 Q R@4 S@3 Q S@3 Q AA@3 Q R@4 S@3 Q S@3 Q AB AC
>`.pickRestart({
  A: "[~@7 f3@4 e3@3 d3@10]/3", B: "[~ c3@3 b2@3 a#2@9]/2",
  C: "[a2@3 a#2@3 c3@16 ~ a2@5 a#2@3 c3@7 ~ a2@5 a#2@2 c3 f3@7 ~ a2]/7",
  D: "[~@4 a#2@3 c3@7 ~ a2@5 a#2@2 c3 f3@7 ~ a2@5 a#2@3 c3@7 ~ a2@5 a#2@2 c3 f3@7 ~ a2]/8",
  E: "[~@4 a#2@3 c3@7 ~ a2@5 a#2@2 c3 f3@7 ~ f2@5 ~ g2 ~ g#2@6 g#2 a#2 c3@4 f2 ~ g2 ~ a#2@5 ~ a#2 f2 g#2]/8",
  F: "[~ c3 d3 f3@4 a#2@2 c3 c#3@6]/2", G: "~ f2 ~ g2 ~ g#2 ~ a2",
  H: "[~ a#2@6 f2@5 ~ a#2 c3 d#3@3 c3 ~ a#2 ~@2 a#2]/3", I: "[~@2 a#2 ~@2 a#2 c3 d#3@3 c3 ~ a#2 ~@2 a2]/2",
  J: "[~@2 a2 ~@2 a#2 c3 d#3@3 c3 ~ a#2 ~@2 a#2]/2", K: "[~@2 a#2 ~@2 a#2 c3 d#3@3 c3 ~ a#2 ~@3]/2", L: "c3@3 c3@5",
  M: "[d3@3 c3 ~@2 c3@6 ~ a#2 c3 d#3@3 c3 ~ a#2 ~@3]/3", N: "[d3@3 c3 ~@2 c3@18]/3", O: "c3",
  P: "[~ a2@2 a#2@2 b2@2 c3@2 c#3@2 d3@2 e3@2 f3@3 a2 ~ d3 ~@2 a2@2 f2 a2 f2 a#2 ~@2 g2]/4", Q: "a2 a2@2 a2 d3 d3@2 d3",
  R: "[g2 a2 ~ a#2 ~ c3 ~ f2@3 a2 ~ d3 ~@2 a#2@2 f2 a#2 g2 c3 ~ a2 a#2@2 a#2@2 a#2!2 a#2@2 a#2]/4",
  S: "[g2 a2 ~ a#2 ~ c3 ~ f3@3 e3 ~ d3 ~@2 c3@2 f2 a#2 f2 a#2 ~@2 g2]/3", T: "[g2 a2 ~ a#2 ~ c3 ~ f2@9]/2",
  U: "[a2@2 a#2 b2 c3 f3 ~ f2@9]/2", V: "[a2@2 a#2 b2 c3 ~@2 f2@9]/2", W: "a2@2 a#2 b2 c3 ~@2 a2",
  X: "[~@4 a#2@3 c3@7 ~ a2@5 a#2@2 c3 f3@7 ~ a2@5 a#2@3 c3@7 ~ a2@5 a#2@2 c3 f3@7 ~ f2]/8",
  Y: "[~@5 g2 ~ g#2@6 g#2 a#2 c3@4 f2 ~ g2 ~ a#2@5 ~ a#2 f2 g#2@2 c3 d3 f3@4 a#2@2 c3 c#3@6]/6",
  Z: "[f3@2 a2 ~ d3 ~@2 a2@2 f2 a2 f2 a#2 ~@2 g2]/2",
  AA: "[g2 a2 ~ a#2 ~ c3 ~ f3@3 a2 ~ d3 ~@2 a2@2 f2 a2 f2 a#2 ~@2 g2]/3", AB: "g2 a2 ~ a#2 ~ c3@3", AC: "f2@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  A@3 B@2 C@3 ~@11 D@4 E@4 F@4 G@7 H I@3 ~@6 J K@2 ~ L M@3 N@2 O@4 P@4 Q@4 R@4 S@2 ~ T ~ T ~ T ~@12 D@4 E@4 F@4 G@7 H
  I@3 ~@22 U V W@2 X@4 ~ Y@2 Z AA AB@2 AC AD
>`.pickRestart({
  A: "[~@7 a5@4 c6@3 f6@10]/3", B: "[~ f5@3 a5@3 d6@9]/2", C: "[~ c6@3 c6@3 c6@15 ~@2]/3",
  D: "[~@7 g#4@2 g4 g#4 g4 f4@2 d4 f4@3 d4 ~ f4 ~ g4 g#4@3 g4 ~ f4 ~ d4 c4]/4",
  E: "[~ f4@5 ~ g#4@2 g4 g#4 g4 f4@2 d4 f4@3 d4 ~ f4 ~ g4 g#4@3 g4 ~ f4 ~ d4 c4]/4",
  F: "[~ f4@5 ~ g#5@2 g5 g#5 g5 f5@2 d5 f5@3 d5 ~ f5 ~ g5 g#5@3 g5 ~ f5 ~ d5 c5]/4",
  G: "[~ f5@5 ~ g#5@3 g5!2 ~@3 g5@3 f5!2 ~@3 g5@2 g5 d#5!2 ~@3 g5@3 f5!2 ~@3 g5@2 g5 f5!2 ~@3 g#5@3 g5@6]/7",
  H: "~ f5 g5 g#5 a5@2 f5 ~", I: "[g#5 ~ g5@5 f5@17]/3", J: "a5@6 a5@8 a5!2",
  K: "[a#5@4 a5@2 c6@14 c6 [c#6,d6] d#6@2 ~@8]/2", L: "a5@3 a5@4 a5", M: "[a#5@2 a5 c6@3 d#6@18]/3", N: "f5/2",
  O: "[~@7 a4@3 c5 ~ f4 ~@2 f4@3 a4 ~ f4 ~@2 c5@9]/4",
  P: "[a#4 a4 ~ g4 ~ f4 ~ a4@3 c5 ~ f4 ~@2 g4@3 a4 ~ f4 ~@2 c5@9]/4",
  Q: "[c5 d5 ~ a4 ~ f4 ~ a4@3 c5 ~ f5 ~@2 f4@3 a4 ~ d5 ~@2 c5@9]/4",
  R: "[a#4 a4 ~ g4 ~ f4 ~ a4@3 c5 ~ f5 ~@2 f4@3 a4 ~ d5 ~@2 c5@9]/4", S: "[a#4 a4 ~ g4 ~ f4 ~ f4@9]/2",
  T: "~@2 c5 ~@3 a#4 ~@9", U: "~@6 g#5 a5 ~@2 g5@2 f5@2 d5 ~", V: "c5@2 d5 ~ a4 g4 f4 g4",
  W: "[a4@2 c5@2 c5@2 d5@2 g#4@2 g4@2 f4 ~ d4@4 f4@10 ~@4]/2",
  X: "[~@14 c6@4 d6@2 a5@2 g5@2 f5@2 d5 ~@3 c5@6 d5@2 ~@2 f5@3 g5 ~@2 a5@4 f5@2 d5@2 c5@6 d5@2 ~@2]/4",
  Y: "[~@12 f6@8 ~@4 a6@2 c7 [a#6,b6] a6@4]/2", Z: "f6@2 d6@2 c6@3 d6", AA: "g#5 g5 f5@2 ~@12",
  AB: "[~@10 c6@2 ~@2 f6@4 [d#6,e6,f6] [a5,a#5,b5,c6,c#6,d6] [f#5,g5,g#5] ~@3 c5@2 d5@2 f5@2 a5@2, ~@10 f5 ~@5]/2",
  AC: "a#5@2 a5@2 ~@2 g5@2 ~@2 f5@4 [f5,f#5,g5] [g#5,a5,a#5,b5,c6,c#6]", AD: "[d6,d#6,e6] ~@15, f6 ~@3",
})).s("gm_trumpet").gain(0.4)

// other · trombone · "Tenor Trombone"
const trombone = note(`<
  A@3 B@2 C@3 ~@7 D@4 E@12 F@7 G H@3 ~@6 I J@2 ~ I K@3 L M@2 ~@7 N O@3 P@4 Q@2 ~ R ~ R ~ R ~@8 D@4 E@12 F@7 G H@3 ~@21
  S@4 P@4 T@4 P@4 U V
>`.pickRestart({
  A: "[~@7 g3@4 g3@3 f3@10]/3", B: "[~ a3@3 a3@3 f3@9]/2", C: "[a3@3 a3@3 a#3@16 ~@2]/3",
  D: "[~@7 g#3@2 g3 g#3 g3 f3@2 d3 f3@3 d3 ~ f3 ~ g3 g#3@3 g3 ~ f3 ~ d3 c3]/4",
  E: "[~ f3@5 ~ g#3@2 g3 g#3 g3 f3@2 d3 f3@3 d3 ~ f3 ~ g3 g#3@3 g3 ~ f3 ~ d3 c3]/4",
  F: "[~ f3@5 ~ c4@3 a#3!2 ~@3 a#3@3 g#3!2 ~@3 a#3@2 a#3 g3!2 ~@3 a#3@3 g#3!2 ~@3 a#3@2 a#3 g#3!2 ~@3 c4@3 a#3@6]/7",
  G: "~ a3!2 a#3 c4@2 a3 ~", H: "[c4 ~ a#3@5 f3@17]/3", I: "f3@3 f3@5", J: "[f3@3 f3 ~@2 f3@10]/2",
  K: "[f3@3 f3 ~@2 g3@18]/3", L: "f3", M: "[~ a2@2 a#2@2 b2@2 c3@2 c#3@2 d3@2 e3@2 ~]/2", N: "c4 d4 ~ a3 ~ f3 ~ c4",
  O: "[c4@2 a3 ~ a3 ~@2 f3@3 f3 ~ a3 ~@2 g3@5 f#3@4]/3",
  P: "[f3!2 ~ f3 ~ g3 ~ f3@3 a3 ~ a3 ~@2 f3@3 f3 ~ a3 ~@2 g3@5 f#3@4]/4", Q: "[f3!2 ~ f3 ~ g3 ~ f3@9]/2",
  R: "~@2 a3 ~@3 g3 ~@9", S: "[~@7 c4@3 a3 ~ a3 ~@2 f3@3 f3 ~ a3 ~@2 g3@5 f#3@4]/4",
  T: "[f3!2 ~ f3 ~ g3 ~ c4@3 a3 ~ a3 ~@2 f3@3 f3 ~ a3 ~@2 g3@5 f#3@4]/4", U: "f3!2 ~ f3 ~ g3@3", V: "f3@3 ~@13",
})).s("gm_trombone").gain(0.3)

// chords · piano
const piano = note(`<
  A@3 B@2 C@7 D@16 E@8 F@2 G H@3 I@2 J@2 K@2 L M@3 L N@3 O@2 ~@8 P@4 Q@4 R@2 S@2 T@2 S@2 U D@16 V@7 W@5 F@2 G H@3 I@2
  J@2 K@2 ~@15 X@4 Q@8 Y Z@3 AA AB
>`.pickRestart({
  A: "[~@14 [f2,f3,c4,f4,g4,a4]@8 [e2,e3,e4,g4,c5]@6 [d2,d3,a4,c5,f5]@19 ~]/3", // F C Dm7
  B: "[~@2 [c2,c3,c4,f4]@6 [b1,b2,b3,d4,f4,a4]@6 [a#1,a#2,f4,a4,d5]@17 ~]/2", // F5 Bm7b5 A#maj7
  C: "[~@14 [f4,g4,a#4,c5]@28 ~@4 [a1,a2]@9 ~ [a#1,a#2]@6 [c2,c3]@13 ~@3 [a1,a2]@9 ~ [a#1,a#2]@4 [c2,c3]@2 [f2,f3]@13 ~@3 [a1,a2]@2, [a1,a2]@3 [a#1,a#2]@3 [c2,c3]@15 ~@35, ~ [f4,a4,c5]@3 [d4,a4,c5]@3 ~@49]/7", // Fsus4 A A# C A A# C F …
  D: "[~@8 [a#1,a#2]@6 [c2,c3]@13 ~@3 [a1,a2]@9 ~ [a#1,a#2]@4 [c2,c3]@2 [f2,f3]@13 ~@3 [a1,a2]@9 ~ [a#1,a#2]@6 [c2,c3]@13 ~@3 [a1,a2]@9 ~ [a#1,a#2]@4 [c2,c3]@2 [f2,f3]@13 ~@3 [a1,a2]@2]/8", // A# C A A# C F A A# …
  E: "[~@8 [a#1,a#2]@6 [c2,c3]@13 ~@3 [a1,a2]@9 ~ [a#1,a#2]@4 [c2,c3]@2 [f2,f3]@4 g4@2 d#4@2 c4@2 a3@2 f3@2 c3@2 [f1,f2]@9 ~@3 [g1,g2]@2 ~@2 [g#1,g#2]@11 ~ [g#1,g#2]@2 [a#1,a#2]@2 [c2,c3]@8 [f1,f2]@2 ~@2 [g1,g2]@2 ~@2 [a#1,a#2]@9 ~@3 [a#1,a#2]@2 [f1,f2]@2 [g#1,g#2]@2]/8", // A# C A A# C F G G# …
  F: "[[a1,a2]@2 [c2,c3]@2 [d2,d3]@2 [f2,f3]@8 [a#1,a#2]@4 [c2,c3]@2 [c#2,c#3]@11 ~]/2", // A C D F A# C C#
  G: "~ [f1,f2] ~ [g1,g2] ~ [g#1,g#2] ~ [a1,a2]", // F G G# A
  H: "[~@2 [a#1,a#2]@11 ~@13 a#3@2 c4@2 d#4@6 c4@2 ~@2 a#3@2 ~@4 a#3@2, ~@7 f2@16 ~]/3", // A#
  I: "[~@2 a#3 ~@2 a#3 c4 d#4@3 c4 ~ a#3 ~@2 a3]/2", J: "[~@2 a3 ~@2 a#3 c4 d#4@3 c4 ~ a#3 ~@2 a#3]/2",
  K: "[~@2 a#3 ~@2 a#3 c4 d#4@3 c4 ~ a#3 ~@3]/2", L: "[c4,f4,a4]@6 [c4,f4,a4]@9 ~",
  M: "[[d4,f4,a#4]@3 [c4,f4,a4] ~@2 [c4,f4,a4]@4 ~@3 a#3 c4 d#4@3 c4 ~ a#3 ~@3, ~@6 [f2,f3]@17 ~]/3", // A# F
  N: "[[d4,f4,a#4]@3 [c4,f4,a4] ~@2 [a1,a2,a#3,c#4,e4,g4,a4]@17 ~]/3", O: "[[f2,f3,f4,a4,c5]@15 ~]/2",
  P: "[[d4,g4,a#4,c5]@2 [e4,f4,a4,d5]@2 ~@2 [e4,g4,a4]@2 ~@2 [d4,f4]@2 ~@2 [c4,d4,f4,a4]@6 [e4,f4,g4,a4,c5]@2 ~@2 [d4,f4,a4,c5]@2 ~@4 [c4,d4,f4,a4]@6 [c4,d4,f4,a4]@2 ~@2 [c4,d4,f4,a4,c5]@2 ~@4 [e4,f4,g4,a4,c5]@9 ~ [d4,f#4,g#4,c5]@8]/4", // Gm Dm A7 Dm Dm7 Fmaj7 Dm7 Fmaj7 …
  Q: "[[d4,g4,a#4]@2 [c4,f4,a4]@2 ~@2 [c4,e4,g4]@2 ~@2 [d4,f4]@2 ~@2 [c4,d4,f4,a4]@6 [e4,f4,g4,a4,c5]@2 ~@2 [d4,f4,a4,c5]@2 ~@4 [c4,d4,f4,a4]@6 [c4,d4,f4,a4]@2 ~@2 [c4,d4,f4,a4,c5]@2 ~@4 [e4,f4,g4,a4,c5]@9 ~ [d4,f#4,g#4,c5]@8]/4", // Gm F C Dm Dm7 Fmaj7 Dm7 Fmaj7 …
  R: "[[d4,g4,a#4]@2 [c4,f4,a4]@2 ~@2 [c4,e4,g4]@2 ~@2 [d4,f4]@2 ~@2 [a3,c4,f4,a4]@17 ~]/2", // Gm F C Dm F
  S: "[a3@4 a#3@2 b3@2 c4@2 f4@2 ~@2 f3@17 ~]/2", T: "[a3@4 a#3@2 b3@2 c4@2 ~@4 f3@17 ~]/2",
  U: "a3@2 a#3 b3 c4 ~@2 [a1,a2]", // A
  V: "[~@8 [a#1,a#2]@6 [c2,c3]@13 ~@3 [a1,a2]@9 ~ [a#1,a#2]@4 [c2,c3]@2 [f2,f3]@13 ~@3 [a1,a2]@9 ~ [a#1,a#2]@6 [c2,c3]@13 ~@3 [a1,a2]@9 ~ [a#1,a#2]@4 [c2,c3]@2 [f2,f3]@2]/7", // A# C A A# C F A A# …
  W: "[~@2 g4@2 d#4@2 c4@2 a3@2 f3@2 c3@2 [f1,f2]@9 ~@3 [g1,g2]@2 ~@2 [g#1,g#2]@11 ~ [g#1,g#2]@2 [a#1,a#2]@2 [c2,c3]@8 [f1,f2]@2 ~@2 [g1,g2]@2 ~@2 [a#1,a#2]@9 ~@3 [a#1,a#2]@2 [f1,f2]@2 [g#1,g#2]@2]/5", // F G G# A# C F G A# …
  X: "[~@14 [c4,d4,f4,a4]@6 [e4,f4,g4,a4,c5]@2 ~@2 [d4,f4,a4,c5]@2 ~@4 [c4,d4,f4,a4]@6 [c4,d4,f4,a4]@2 ~@2 [c4,d4,f4,a4,c5]@2 ~@4 [e4,f4,g4,a4,c5]@9 ~ [d4,f#4,g#4,c5]@8]/4", // Dm7 Fmaj7 Dm7 Fmaj7 D7
  Y: "[d4,g4,a#4] [c4,f4,a4] ~ [c4,e4,g4] ~ [d4,f4] ~ [c4,d4,f4,a4]", // Gm F C Dm Dm7
  Z: "[[c4,d4,f4,a4]@4 [e4,f4,g4,a4,c5]@2 ~@2 [d4,f4,a4,c5]@2 ~@4 [c4,d4,f4,a4]@6 [e4,f4,g4,a4,c5]@2 ~@2 [d4,f4,a4,c5]@2 ~@4 [e4,f4,g4,a4,c5]@9 ~ [d4,f#4,g#4,c5]@8]/3", // Dm7 Fmaj7 Dm7 Fmaj7 Dm7 Fmaj7 D7
  AA: "[d4,g4,a#4] [c4,f4,a4] ~ [c4,e4,g4] ~ [d4,f4]@3", AB: "[c4,d4,f4,a4]@3 ~@13",
})).s("gm_piano").gain(0.3)

// bass · electric bass pick · "Bass Guitar"
const bass_2 = note(`<
  A@3 B@2 C@7 D@16 E@8 F@2 G H@8 ~ I J K L@2 M@3 I N@4 O P@4 Q@3 O Q@3 O R@2 S@2 T@2 S@2 U D@16 V@7 W@7 G H@8 ~ X@2 O
  P@4 Q@3 O Q@3 O Y@3 O P@4 Q@3 O Q@3 O Z AA
>`.pickRestart({
  A: "[~@7 f2@4 e2@3 d2@10]/3", B: "[~ c2@3 b1@3 a#1@9]/2",
  C: "[a1@3 a#1@3 c2@16 ~ a1@5 a#1@3 c2@7 ~ a1@5 a#1@2 c2 f2@7 ~ a1]/7",
  D: "[~@4 a#1@3 c2@7 ~ a1@5 a#1@2 c2 f2@7 ~ a1@5 a#1@3 c2@7 ~ a1@5 a#1@2 c2 f2@7 ~ a1]/8",
  E: "[~@4 a#1@3 c2@7 ~ a1@5 a#1@2 c2 f2@2 g3 d#3 c3 a2 f2 c2 f1@5 ~ g1 ~ g#1@6 g#1 a#1 c2@4 f1 ~ g1 ~ a#1@5 ~ a#1 f1 g#1]/8",
  F: "[~ c2 d2 f2@3 ~ a#1@2 c2 c#2@6]/2", G: "~ f1 ~ g1 ~ g#1 ~ a1",
  H: "[~ a#1@6 f1@29 f1!2 ~@2 f2@15 a#1@9, ~@39 f1@16 ~@9]/8", I: "f1", J: "f1@2 f1 f1@3 f1@2", K: "f1!8",
  L: "[f1!5 f1@2 f1@9]/2", M: "[f1 c2 f1 c2 f1 c2 c2@18]/3",
  N: "[~ a1@2 a#1@2 b1@2 c2@2 c#2@2 d2@2 e2@2 f2@3 a1 ~ d2 ~@2 a1@2 f1 a1 f1 a#1 ~@2 g1]/4", O: "a1 a1@2 a1 d2 d2@2 d2",
  P: "[g1 a1 ~ a#1 ~ c2 ~ f1@3 a1 ~ d2 ~@2 a#1@2 f1 a#1 g1 c2 ~ a1 a#1@2 a#1@2 a#1!2 a#1@2 a#1]/4",
  Q: "[g1 a1 ~ a#1 ~ c2 ~ f2@3 e2 ~ d2 ~@2 c2@2 f1 a#1 f1 a#1 ~@2 g1]/3", R: "[g1 a1 ~ a#1 ~ c2 ~ f1@9]/2",
  S: "[a1@2 a#1 b1 c2 f2 ~ f1@9]/2", T: "[a1@2 a#1 b1 c2 ~@2 f1@9]/2", U: "a1@2 a#1 b1 c2 ~@2 a1",
  V: "[~@4 a#1@3 c2@7 ~ a1@5 a#1@2 c2 f2@7 ~ a1@5 a#1@3 c2@7 ~ a1@5 a#1@2 c2 f2]/7",
  W: "[~ g3 d#3 c3 a2 f2 c2 f1@5 ~ g1 ~ g#1@6 g#1 a#1 c2@4 f1 ~ g1 ~ a#1@5 ~ a#1 f1 g#1@2 c2 d2 f2@3 ~ a#1@2 c2 c#2@6]/7",
  X: "[f2@2 a1 ~ d2 ~@2 a1@2 f1 a1 f1 a#1 ~@2 g1]/2",
  Y: "[g1 a1 ~ a#1 ~ c2 ~ f2@3 a1 ~ d2 ~@2 a1@2 f1 a1 f1 a#1 ~@2 g1]/3", Z: "g1 a1 ~ a#1 ~ c2@3", AA: "f1@3 ~@13",
})).s("gm_electric_bass_pick").gain(0.3)

stack(bass, trumpet, trombone, piano, bass_2)

More by Bradley Herrin