Strudelify

Leader Of The Band

Dan Fogelberg

KeyF minorTempo120 bpm
0:00/0:00
// Leader Of The Band — Dan Fogelberg
// 120 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 143 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · clarinet
const clarinet = note(`<
  A B C D E F G H@2 I J K@2 L@2 M@2 N O K@2 P@2 Q R S T H I U K@2 L@2 M@2 N O K@2 P@2 Q R S T V W X@2 Y Z@2 AA AB@2 AC@2
  AD@2 AE T H I AF K@2 L@2 M@2 N O K@2 P@2 Q R S T H I U ~@11 K@2 L@2 M@2 N O K@2 P@2 Q R S T H I U V W X@2 Y Z@2 AA
  AB@2 AC@2 AD@2 AG AH T H I AI ~@9
>`.pickRestart({
  A: "eb4@6 ~ f4, [gb3,c4]", B: "~ eb4@2 db4@2 ~@2 db4, g3, c4@5 c4@3", C: "~@2 ab4 ~@2 eb4 f4@2, db4@3 db4@5",
  D: "eb4@2 f4@2 eb4@2 db4@3 ~ c4@4 bb3@2", E: "bb3 db4@2 f4!2 db4@2 ~", F: "c4@2 db4@2 c4@2 ab3@3 ~ c4@4 ab3@2",
  G: "~ [bb3,eb4]@3, g4@3 ~", H: "~@2 c4 db4!2 ab4@3", I: "~@2 c4 db4!2 ~@2 db4, ~@5 ab4@3", J: "c4@3 ab3!2 c4@2 ab3",
  K: "[~@2 ab4@2 c5@2 eb5@2 f5@4 eb5@2 [eb4,c5,eb5]@4 eb5@4 c5 bb4 ab4@4 ~@2 eb4@2, c4@4 [f4,db5]@3 ~@4 c4 c4@4]/2", // Cm Db
  L: "[c5@2 bb4 [eb4,ab4]@2 ab4@2 ~ [db4,f4]@3 db4!2 f4@2 db4, eb4@3 ~@4 ab4@4 ~@5]/2", // Ab5 Db
  M: "[~ f4 db5 [db4,db5] db5@2 db5 [ab4,c5]@2 [g4,bb4]@2 [f4,ab4]@3 f4 ab4, db4@3 ~ db4@3 ~@9]/2", // Db Ab Gm Fm
  N: "[db4,bb4]@3 [db4,c5] bb4@2 ab4!2, ~ db4", O: "[ab3,db4,f4]@2 [g3,bb3,eb4] ~",
  P: "[eb4@3 [eb4,bb4] bb4 ab4@2 ~ f4@3 db4 ~@2 eb4!2, c5 ~ eb4@2 ~@2 db4@2, ~@7 ab4@4 ~@5]/2", // Eb5
  Q: "db5@2 db5 [db4,db5] db5@2 db5 [ab4,c5], db4@3 ~ db4@3 ~", // Db Ab
  R: "~ [f4,ab4] [g4,bb4] ab4@3 ab4!2, ~@3 f4@4 ~, ~@3 bb4", S: "[db4,bb4]@3 [f4,c5] [g4,db5]@2 [eb4,g4]@2",
  T: "c4@2 c4 db4!2 ab4@3, ab4 ~", U: "c4@3 eb4!2 c4@2 bb3",
  V: "~ ab4 f5 [db5,f5,ab5] ab5@2 ab5 [c5,eb5,g5], f4@2 ~@2 [db5,f5]@3 ~", // Db Cm Db
  W: "~@2 ab5@4 [g4,c5,eb5]@6 c5 bb4 ab4@2, ~@3 eb4", // Cm
  X: "[db5@2 eb5 [ab4,db5,f5]@3 c5 [eb4,c5,eb5]@4 ~ db4@2 eb4!2, [f4,ab4]@3 ~@13]/2", // Db Cm Fm
  Y: "db5@2 db5@2 db5 ~ db5 ~, db4@3 ~ db4@4",
  Z: "[eb5@2 ab4 ab4@2 ~ f4!2 [db4,db5]@3 [db4,c5] bb4@2 ab4@2, f4@3 eb4@6 ~@3 db4@4]/2", // Db Dbmaj7
  AA: "~@2 c4@2 gb4@2 ~ c5 g4@8, c5@3 g4 bb4@2 ~@2",
  AB: "[~@2 ab4@2 ab5@2 [db5,f5,ab5]@2 [db5,f5,ab5]@3 ~ ab5@2 g5@4 ab5@4 [c5,eb5]@8 ~@2, ~@7 [c5,eb5]@3 ~ g5@3 ~@2]/2", // Db Cm
  AC: "[~ ab4 db5 [f4,eb5] f5 ~ eb5 [eb4,c5]@3 c4@2 db4@2 [eb4,eb5]@2, f4@3 ~ f4@3 eb5@4 ~@5]/2", // F7 Cm Eb
  AD: "[bb4@2 bb4 [f4,db5] db5 db5@2 f4@3 ~ [f4,ab4]@2 ~ f4 ab4, db4@3 ~ f4@3 eb5@2 ~ bb4@2 ~@4]/2", // Db Fm
  AE: "[db4,bb4]@3 [db4,ab4] bb4 ab4@2 f4, ~ db4", AF: "c4", AG: "[db4,f4,bb4] [db4,f4,c5]",
  AH: "bb4 ab4@3 ~@3 bb4, [db4,f4] [g3,bb3]", AI: "[ab3,c4]",
})).s("gm_clarinet").gain(0.26)

// chords · blown bottle
const blown_bottle = note("<~@84 A@2 B C D E F G H I J ~@39 A@2 B C K H I L@2>".pickRestart({
  A: "[[gb4,c5,eb5]@6 [gb4,c5,eb5] f5 ~ eb5@2 [eb4,gb4,db5] db5 c5@3, ~@7 [gb4,c5]@3 ~@2 [eb4,gb4]@4]/2", // Cdim Ebm7 Gbdim Ebm
  B: "f4@3 f4 ~@2 db5!2, [ab4,db5]@3 ~, ~ f4", C: "[ab4,eb5] f5 eb5 [f4,db5] db5 c5@3, ~ f4",
  D: "f4 ab4 ~@2 db5@4, [db5,f5] ~, ~ bb4@3", E: "f4 g4 ~@2 c5@4, [c5,eb5] ~, ~ ab4@2 ~",
  F: "[eb4,g4,db5] [db4,g4,bb4]", G: "[eb4,ab4]@2 c4 db4!2 ab4@3, c5", H: "~@2 c4 db4!2 ab4@3",
  I: "~@2 c4 db4!2 ~@2 db4, ~@5 ab4@3", J: "[ab3,c4]@3 ~", K: "c4@2 c4 db4!2 ab4@3, ab4 ~", L: "[[eb4,ab4,c5]@3 ~]/2",
})).s("gm_blown_bottle").gain(0.51)

// other · orchestra hit
const orchestra_hit = note("<~@84 A@2 B@2 C D E F@2 G H ~@39 A@2 B@2 F@3 I@2>".pickRestart({
  A: "ab2 eb3 ab2 eb3", B: "db3 f3 db3 f3", C: "bb2 f3 bb2 f3", D: "f2 f3 f2 f3", E: "eb2 eb3 eb2 eb3",
  F: "~@2 eb3 f3 [ab2,f3]@4, ab2 ~", G: "ab2 [ab2,f3]", H: "[ab2,eb3]@6 eb3 ab3", I: "[ab2 eb3 ab3@4 ~@2]/2",
})).s("gm_orchestra_hit").gain(0.51)

// other · melodic tom
const melodic_tom = note("<[f2 ~@3]!84 ~@11 [f2 ~@3]!39 ~@9>").s("gm_melodic_tom").gain(0.36)

// drums · ride
const ride = s("rd").struct("<[~ x ~@2]!84 [x ~@3 x!2 ~@2]!11 [x ~ x ~ x!2 ~@2] [~ x ~@2]!38 ~@9>").gain(0.15)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~@2 x ~@2 x!3]!84 ~@11 [~@2 x ~@2 x!3]!39 ~@9>").gain(0.78)

stack(clarinet, blown_bottle, orchestra_hit, melodic_tom, ride, cabasa)

More by Dan Fogelberg