Strudelify

fanfare for the common man

AARON COPLAND

KeyB♭ majorTempo52 bpm
0:00/0:00
// fanfare for the common man — AARON COPLAND
// 52 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 16, 4/4 at bar 17, 3/4 at bar 19, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 7 "B♭ Trumpet" named as a brass, played on trumpet (its piano patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/3064261; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 45 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(52/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 · french horn · "Horn"
const french_horn = note("<~@12 A B C@2 D@5 ~@3 E F@2 G H ~ I J@2 K@2 L@2 M@2 N O P Q@3>".pickRestart({
  A: "bb3 f4 bb4@14", B: "f4 bb4 g4@10 bb4@4", C: "[g4 eb4 bb3@3 bb4 g4 c5]/2",
  D: "[f4@4 a4@4 f4@4 bb3@16 g3 bb3 eb4@6 eb4 g4 bb4@6 g3 bb3 eb4@4 eb4 g4 bb4@4 f4@2 bb3@2 d3@8 ~@12]/5",
  E: "bb3 f4 bb4@6 f4 bb4 g4@6", F: "[bb4 g4 eb4 bb3@3 bb4 eb5]/2", G: "eb5 d5 a4 f4", H: "bb3@3 ~",
  I: "~@2 [ab3,ab4] [bb3,g4]", J: "[[c4,f4]@2 [g3,eb4]@2 [a3,f4]@2 [g3,eb4] [g3,eb4]@6 ~@3]/2",
  K: "[bb3 f4 bb4@6 f4 bb4 g4@10 ~@4 [eb4,g4,bb4]@4 [c4,f4,a4]@4]/2", // Eb F
  L: "[[eb4,g4]@2 [a3,d4,f4]@2 [c4,eb4]@2 [f3,d4] [f3,d4]@5 [eb4,g4,bb4]@2 [c4,f4,a4]@2]/2", // Eb Dm Cm Dm Eb F
  M: "[[eb4,g4]@2 [a3,d4,f4]@2 [c4,eb4]@2 [f3,d4] [f3,d4]@6 ~@3]/2", N: "~@4 [bb3,d4,f4,bb4] ~@3",
  O: "~@2 [db4,f4,ab4,eb5] [c4,f4,a4,c5]", P: "[c4,f4,a4,c5]@6 [e3,a3,e4] [a3,e4,a4]",
  Q: "[[a3,e4,a4,db5]@4 [c4,f4,a4]@2 [d4,a4,d5]@4 [d4,a4,d5]@11 ~@3]/3", // A F D5
})).s("gm_french_horn").gain(0.72)

// other · trumpet · "Bb Trumpet"
const trumpet = note("<~@5 A B C D@4 A B E@2 F@5 ~@3 G H@2 I J K@2 L@2 M@2 N@2 O@2 P Q R S@3>".pickRestart({
  A: "f4 bb4 f5@14", B: "bb4 f5 eb5@10 g5@4", C: "eb5 bb4 f4@2",
  D: "[eb4 g4 bb4@10 bb4 d5 f5@10 eb4 g4 bb4@10 d5 f4 bb3@22 ~@4]/4", E: "[eb5 bb4 f4@3 g5 bb5!2]/2",
  F: "[a5@4 f5@4 d5@4 f4@16 eb4 g4 bb4@6 bb4 d5 f5@6 eb4 g4 bb4@4 bb4 d5 f5@4 d5@2 f4@2 bb3@8 ~@12]/5",
  G: "f4 bb4 f5@6 bb4 f5 eb5@6", H: "[g5 eb5 bb4 f4@3 g5 bb5]/2", I: "bb5 a5 f5 d5", J: "f4@3 [ab4,eb5,ab5]",
  K: "[[g4,d5,g5]@2 [f4,c5,f5]@2 [eb4,bb4,eb5]@2 [f4,bb4,f5] [f4,bb4,f5]@5 [ab4,eb5,ab5]@2 [g4,d5,g5]@2]/2", // G5 F5 Eb5 Bb5 Ab5 G5
  L: "[[f4,c5,f5]@2 [eb4,g4,bb4]@2 [d4,f4,a4]@2 [eb4,g4,bb4] [eb4,g4,bb4]@6 ~@3]/2", // F5 Eb Dm Eb
  M: "[f4 bb4 f5@6 bb4 f5 eb5@10 ~@4 [eb5,g5,bb5]@4 [c5,f5,a5]@4]/2", // Eb F
  N: "[[bb4,eb5,g5]@2 [a4,d5,f5]@2 [g4,c5,eb5]@2 [bb3,f4,bb4] [bb3,f4,bb4]@5 [eb5,g5,bb5]@2 [c5,f5,a5]@2]/2", // Eb Dm Cm Bb5 Eb F
  O: "[[bb4,eb5,g5]@2 [a4,d5,f5]@2 [g4,c5,eb5]@2 [bb3,f4,bb4] [bb3,f4,bb4]@6 ~ [ab3,eb4,ab4] [eb4,ab4,eb5]]/2", // Eb Dm Cm Bb5 Ab5
  P: "[ab4,eb5,ab5]@4 [bb4,d5,f5] ~ [ab3,eb4,ab4] [eb4,ab4,eb5]", Q: "[ab4,eb5,ab5]@2 [ab4,eb5,f5] [c5,f5,a5]",
  R: "[c5,f5,a5]@3 ~", S: "[[db5,e5]@4 [a4,c5]@2 [d5,gb5,a5]@4 [d5,gb5,a5]@11 ~@3]/3",
})).s("gm_trumpet").gain(0.72)

// chords · trombone
const trombone = note("<~@22 A@2 B C@2 D E F@2 G@3 H ~ I J@2 K L M N@3>".pickRestart({
  A: "[~@12 [bb2,f3] [f3,bb3] [bb3,f4]@10 ~@4 [bb2,f3] [f3,bb3] [bb3,f4]@2]/2", // Bb5
  B: "f3 ~ f4@6 ~ f4 c4@6, ~ bb3@7 bb3@2 ~@6", C: "[eb4 c4 g3 d3@3 eb4 g4]/2", D: "g4 f4 d4 bb3",
  E: "d3@3 [f2,ab2,ab3]", // Fm
  F: "[[g2,bb2,bb3]@2 [bb2,bb3,c4]@2 [c3,g3,eb4]@2 [f3,bb3,d4] [f3,bb3,d4]@5 [f2,ab2,ab3]@2 [g2,bb2,bb3]@2]/2", // Gm Bbsus2 Cm Bb Fm Gm
  G: "[[bb2,bb3,c4]@8 [c3,g3,eb4]@8 [d3,f3,d4]@8 [eb3,g3,eb4]@4 [eb3,g3,eb4]@24 ~@4 [f2,bb2,f3] ~ [bb2,f3,bb3] ~ [f3,bb3,f4]@24 ~@12]/3", // Bbsus2 Cm Dm Eb Bb5
  H: "[g2,bb2,eb3] ~ [bb2,f3,bb3] ~ [g3,bb3,eb4]@20 ~@8", I: "~@2 [eb4,g4,bb4] [c4,f4,a4]",
  J: "[[eb4,g4]@2 [a3,d4,f4]@2 [c4,eb4]@2 [f3,bb3,d4] [f3,bb3,d4]@6 ~ [ab2,eb3,ab3] [eb3,ab3,eb4]]/2", // Eb Dm Cm Bb Ab5
  K: "[ab3,db4,ab4]@4 [bb3,d4,f4] ~ [ab2,eb3,ab3] [eb3,ab3,eb4]", L: "[ab3,db4,ab4]@2 [db4,eb4,f4] [c4,f4,a4]",
  M: "[c4,f4,a4]@6 [a2,e3,a3] [e3,a3,e4]", N: "[[a3,e4,a4]@4 [c4,f4]@2 [d4,a4]@4 [d4,a4]@11 ~@3]/3",
})).s("gm_trombone").gain(0.26)

// bass · tuba · "Bb Tuba"
const bass = note("<~@22 A@3 ~@5 B C@3 D ~@6 E F ~@2>".pickRestart({
  A: "[~@12 f2 bb2 f3@10 ~@4 f2 bb2 f3@12 ~@6]/3", B: "~@2 f2 g2",
  C: "[bb2@8 c3@8 d3@8 eb3@4 eb3@12 ~@16 bb1 ~ f2 ~ bb2@24 ~@12]/3", D: "bb1 ~ g2 ~ bb2@20 ~@8", E: "~@6 e2 a2",
  F: "e3@2 f3 d3",
})).s("gm_tuba").gain(0.5)

// other · timpani
const timpani = note("<A B C D ~@7 A ~@5 E ~@2 F G C H ~@2 I ~ J ~ E ~ E ~@3 K ~ K ~@4 L M>".pickRestart({
  A: "[f2,bb2]@2 ~@2 [f2,bb2]!2 ~@2", B: "~ [f2,bb2] ~@2", C: "[f2,bb2]!2 ~@6", D: "[f2,bb2]@2 ~@4 [f2,bb2]!2",
  E: "~@2 [f2,bb2]!2 ~@4", F: "~@2 [f2,bb2]@2 ~@2 [f2,bb2]!2", G: "~@2 [f2,bb2] ~", H: "~@8 f2 bb2 f3@2 ~@4",
  I: "~@4 f2 bb2 f3@2 ~@8", J: "~@3 f2 bb2 f3 ~@2", K: "~ [f2,bb2]!3 ~@4", L: "~@16 d3!16", M: "d3!16 d3@4 ~@12",
})).s("gm_timpani").gain(0.8)

// drums · kick
const kick = s("bd").struct("<A B C D ~@7 A ~@5 E ~@2 F G C ~@7 E ~ E ~@3 H ~ H ~@2 G ~ I J>".pickRestart({
  A: "x ~@3 x!2 ~@2", B: "~ x ~@2", C: "x!2 ~@6", D: "x ~@5 x!2", E: "~@2 x!2 ~@4", F: "~@2 x ~@3 x!2", G: "~ x",
  H: "~ x!3 ~@4", I: "~@16 x ~@14 x", J: "x!17 ~@15",
})).gain(0.64)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@43 [~@24 x!7 ~] ~>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@44 [~ x]>").gain(0.8)

stack(french_horn, trumpet, trombone, bass, timpani, kick, kick_soft, crash)