Strudelify

Sideshow

Major Harris

KeyE♭ majorTempo61 bpm
0:00/0:00
// Sideshow — Major Harris
// 61 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 42, 4/4 at bar 43) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 4 "String Section" synth strings 1 (copy of ch 9 "Jazz Guitar" electric guitar jazz)
// note: Full arrangement: all 87 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(61/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.

// other · music box
const music_box = note(`<
  ~ A B C D E B C D F@2 ~@8 G H I ~@8 G J I ~@2 K L ~@2 K L ~@9 M N ~@9 M O ~@3 P ~@3 P Q R S T ~@3 P ~@3 P ~@4
>`.pickRestart({
  A: "~@4 e5 g5 c6 g5", B: "e5@3 ~ d5 f5 bb5 f5", C: "d5@5 ~@3 c5@2 eb5@2 ab5@4", D: "db5@4 f5@3 ~ bb4@4 c5@4",
  E: "eb5@3 ~ e5 g5 c6 g5", F: "[eb5@3 ~ eb5@8 ~@4]/2", G: "~@5 eb5 c5 g4", H: "~ c5 a4 f4 ~ c5 d5 eb5, ~@2 ab4 ~",
  I: "f5 ~@3", J: "~ c5 a4 f4 ab4 c5 d5 eb5", K: "~@2 c5 eb5", L: "g5 f5 ~@2",
  M: "~@2 eb5@2 c5@2 g4@3 ~ c5@2 a4@2 f4@2", N: "~ c5 d5 eb5 f5@2 ~@2, ab4 ~@3", O: "ab4 c5 d5 eb5 f5@2 ~@2",
  P: "c5 eb5 g5 f5", Q: "~@2 bb5@2 g5 f5@2 eb5@2 f5 eb5 d5@2 c5 bb4@2",
  R: "c5@2 eb5@2 f5@2 g5@2 bb5 g5@2 f5 eb5 f5 eb5 d5", S: "c5@2 d5 eb5@3 f5@2 g5@2 bb5 d6@2 c6 bb5@2",
  T: "ab5@2 bb5@2 c6@2 eb6@2 f6@2 g6 f6 eb6 d6 c6 bb5, c5 eb5 g5 f5",
})).s("gm_music_box").gain(0.3).pan(0.2)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~ A@3 B A@3 B C@2 D E F G D E H I J K L D E F G D E H I J K M N O@2 P N O@2 Q R S T U R S T V W X Y R S T U R S T V W
  X Z W AA@2 AB W AA@2 AB W AA@2 AB W AA@2 AB W AA@2 AB W AA AC ~
>`.pickRestart({
  A: "[~@4 c2@7 ~ bb1@6 ~@2 ab2@4]/3", B: "db2@5 ~@3 bb1@8", C: "[~@8 bb1@16 g2@7 ~]/2", D: "c2@4 f2@3 f2",
  E: "bb1@6 bb1 ~ eb2@8", F: "g2@4 c3@4 ab2@7 ~", G: "ab2@4 d2@3 ~ g2@7 ~", H: "g2@4 c3@4 bb1@7 ~", I: "eb2@3 ~ ab2@4",
  J: "g2 c3", K: "f2 bb1", L: "~@4 d2@3 ~ g2@7 ~", M: "~@2 bb1 ~ bb1 ~ bb1 ~ ab2@8", N: "g2 ab2", O: "g2@3 ~ ab2@4",
  P: "c3@4 bb2@3 ~ ab2@8", Q: "c3@4 bb2@3 ~ bb2@4 d2@3 ~", R: "g2@7 ~ c2@8", S: "f2@6 f2@2 bb1@6 bb1 ~",
  T: "eb2@2 g2 c3", U: "ab2@7 ~ ab2@4 d2@3 ~", V: "bb1@7 ~ eb2@6 ~@2", W: "ab2 g2", X: "c3 f2", Y: "bb1@9 ~@3 d2@3 ~",
  Z: "bb1@9 ~ bb1 ~ bb1 ~ bb1 ~", AA: "ab2@4 g2@3 ~", AB: "ab2@8 c3@4 bb2@3 ~", AC: "ab2 ~",
})).s("gm_acoustic_bass").gain(0.21).pan(0.4)

// chords · electric guitar jazz · "Jazz Guitar"
const electric_guitar_jazz = note(`<
  ~ A@3 B@4 C@3 D E@3 D F@3 G H@2 D E@3 D F@3 G I@2 J@2 K L J@2 K M G N O@2 G N P@2 Q R S G N O@2 G N P@2 Q R T Q@2 U V
  Q@2 U V Q@2 U V Q@2 U V Q@2 ~@6
>`.pickRestart({
  A: "[~ [g4,c5,e5]@2 [f4,bb4,d5]@2 [eb4,ab4,c5]]/3", // C Bb Ab
  B: "[[ab4,db5,f5] [eb4,g4,bb4,c5]@2 [g4,c5,e5]@2 [f4,bb4,d5]@2 [eb4,ab4,c5]]/4", // Db Cm7 C Bb Ab
  C: "[[ab4,db5,f5] [eb4,g4,bb4,c5]@2 [eb4,g4,bb4,c5]@2 [g4,bb4,d5]]/3", D: "[g4,c5,eb5] [f4,ab4,c5]",
  E: "[[f4,ab4,bb4,d5]@2 eb4@2 d5 ~ ab4@3 [gb4,d5] [g4,bb4,d5]@2, ~ g4@2 ~@3, ~@2 bb4@3 c5@5 ~@2, ~@5 eb5@4 ~@3]/3", // Bb7 D Gm
  F: "[[f4,ab4,bb4,d5]@2 eb4@2 d5 ~ [eb4,g4,bb4]@2 [g4,bb4,db5]@2 [ab4,c5,eb5]@2, ~ g4@2 ~@3, ~@2 bb4@3 c5@5 ~@2, ~@5 eb5@4 ~@3]/3", // Bb7 Eb Gdim Ab
  G: "[g4,bb4,d5] [g4,c5,eb5]", H: "[[f4,a4,c5,eb5]@2 [f4,bb4,d5]@3 [gb4,c5,d5] [g4,bb4,d5]@2]/2",
  I: "[[f4,a4,c5,eb5] [f4,bb4,d5]@2 [ab4,c5,eb5]]/2", J: "[g4,bb4,d5] [ab4,c5,eb5]", K: "[g4,bb4,eb5] [ab4,c5,eb5]",
  L: "[g4,c5,eb5] [f4,bb4,d5] [ab4,c5,eb5]@2", M: "[g4,c5,eb5] [bb4,d5]@2 [a4,c5,d5], ~ f4@3",
  N: "[f4,ab4,c5] [f4,ab4,bb4,d5]", O: "[eb4@2 d5 ~ ab4@3 [gb4,d5], g4 ~, bb4@3 c5@5, ~@3 eb5@4 ~]/2",
  P: "[eb4@2 d5 ~ [eb4,g4,bb4]@2 [g4,bb4,db5]@2, g4 ~, bb4@3 c5@5, ~@3 eb5@4 ~]/2", Q: "[ab4,c5,eb5] [g4,bb4,d5]",
  R: "[g4,c5,eb5] [f4,a4,c5,eb5]", S: "[f4,bb4,d5]@3 [gb4,c5,d5]", T: "[f4,bb4,d5]", U: "[ab4,c5,eb5] [g4,bb4,eb5]",
  V: "[ab4,c5,eb5]@2 [g4,c5,eb5] [f4,bb4,d5]", // Ab Cm Bb
})).s("gm_electric_guitar_jazz").gain(0.17)

// chords · electric guitar jazz · "Jazz Guitar" · soft notes · Ab Eb Ab Cm Bb Ab Gm Ab …
const electric_guitar_jazz_2 = note(`<
  ~@81
  [[ab4,c5,eb5] [g4,bb4,eb5]]
  [[ab4,c5,eb5]@2 [g4,c5,eb5] [f4,bb4,d5]]
  [[ab4,c5,eb5] [g4,bb4,d5]]!2
  [[ab4,c5,eb5] [g4,bb4,eb5]]
  [[ab4,c5,eb5] ~]
>`).s("gm_electric_guitar_jazz").gain(0.07)

// other · piano
const piano = note(`<
  ~@9 A@2 B C ~ D B C E@2 ~@2 D B C ~ D B C E@2 ~@2 F G H I F G H I J K L ~@2 K L ~ M N ~@2 K L ~@2 K L ~ M N ~@2 O@2 P
  ~ O@2 P ~ O@2 P ~ O@2 P ~ O Q ~@6
>`.pickRestart({
  A: "[~@12 [g4,bb4,c5,eb5]@7 ~ [d4,gb4,a4,c5]@3 ~ [d4,g4,bb4]@5 ~@3]/2", B: "~@6 f5 g5 [c5,f5]@6 eb5@2",
  C: "[bb4,d5]@3 ~@5", D: "~@8 [d4,g4,bb4]@5 ~@3", E: "[~@8 eb4@6 g4@6 bb4 c5 bb4@2 [eb4,ab4]@8]/2",
  F: "~@5 ab4 c5 eb5", G: "~ bb4 d5 g5 ~ ab4 c5 eb5", H: "~ bb4 d5 g5 ~ c5 eb5 ab5", I: "~ bb4 eb5 g5 ~@4",
  J: "~@12 [d4,gb4]@3 ~", K: "[d4,g4,bb4]@5 ~@9 f5 g5", L: "[c5,f5]@3 eb5 [bb4,d5]@3 ~", M: "eb4@6 g4@6 bb4 c5 bb4@2",
  N: "[eb4,ab4] ~", O: "~ ab4 c5 eb5 ~ bb4 d5 g5", P: "~ c5 eb5 ab5 ~ bb4 eb5 g5", Q: "~ ab4 c5 eb5 ~ bb4 ~@2",
})).s("gm_piano").gain(0.32)

// other · piano · soft notes
const piano_soft = note(`<
  [~@9 c-1 ~@6]
  ~@79
  [~@6 d5 g5]
  [~ c5 eb5 ab5 ~ bb4 eb5 g5]
  ~
  [~ ab4 c5 eb5 ~ bb4 d5 g5]!2
  [~ c5 eb5 ab5 ~ bb4 ~@2]
  ~
>`).s("gm_piano").gain(0.09)

// other · brass section · "Brass"
const brass_section = note("<~@10 A ~@3 B ~@6 A ~@3 A ~@14 C D ~@2 C D ~@5 C D ~@2 C D ~@30>".pickRestart({
  A: "~@4 d5@2 c5@2 bb4@3 ~@5", B: "~@2 d5 c5 bb4 ~@3", C: "~@6 d5 c5", D: "bb4@3 ~@13",
})).s("gm_brass_section").gain(0.37).pan(0.4)

// other · clarinet
const clarinet = note(`<
  ~@12 A B@2 ~ A C ~ D E@2 ~ A B@2 ~ A C ~ D E@2 ~ F G H ~ F G I ~@2 J K ~@2 L ~@2 M N ~@2 L O ~@2 L ~@2 M N ~@2 P Q ~@2
  P Q ~@2 P Q ~@2 P Q ~@8
>`.pickRestart({
  A: "~@8 g5 ab5 bb5@2 g5@4", B: "[g5 ab5 bb5@2 g5@4 g5 ab5 bb5@2 eb5@6 ~@14]/2", C: "g5 ab5 bb5@2 g5@4 ~@8",
  D: "~ eb5", E: "[f5 eb5 d5 c5 bb4@7 ~@5]/2", F: "~@4 c5 eb5 eb5@2", G: "bb4 eb5 eb5@2 c5 eb5 eb5@2",
  H: "g5 f5 f5@2 ~@4", I: "g5 f5 f5@4 ~@2", J: "~ ab5 bb5@2 g5@4 g5 ab5 bb5@2 g5@4, g5 ~@7",
  K: "g5 ab5 bb5@2 eb5@6 ~@6", L: "g5 ab5 bb5@2 g5@4 g5 ab5 bb5@2 g5@4", M: "eb5@4 f5 eb5 d5 c5", N: "bb4@7 ~",
  O: "g5 ab5 bb5@2 eb5@5 ~@7", P: "c5 eb5 eb5@2 bb4 eb5 eb5@2", Q: "c5 eb5 eb5@2 g5 f5 f5@2",
})).s("gm_clarinet").gain(0.25)

// other · clarinet · soft notes
const clarinet_soft = note("<~@40 [~@3 gb5] ~@40 [c5 eb5 eb5@2 bb4 eb5 eb5@2] [c5 eb5 eb5@2 g5 f5 f5@2] ~@4>")
  .s("gm_clarinet").gain(0.11)

// drums · kick
const kick = s("bd").struct(`<
  ~
  [~@8 x ~ x ~@4 x]
  [x ~ x ~@5 x ~ x ~@4 x]!38
  [x!2 ~@2 x ~@3]
  [x ~ x ~@4 x!2 ~ x ~@5]!39
  [x!2 ~@2 x!2 ~@2]
  x
  ~@5
>`).gain(0.31)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@80 [~@7 x ~@8] [~@2 x ~@4 x!2 ~ x ~@5] [x ~ x ~@4 x!2 ~ x ~@5]!4 [x!2 ~@6]>")
  .gain(0.1)

// drums · snare
const snare = s("sd").struct("<~@10 A B@25 C B@3 D B@25 E B@3 E B@3 E B@3 E B@2 ~@6>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x!4 ~@4 x ~@3", D: "~@2 x ~@3 x!2", E: "~@4 x ~@7 x!4",
})).gain(0.31)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@81 [~ x ~ x] [~@4 x ~@7 x!4] [~ x ~ x]!3 ~>").gain(0.1)

// drums · low tom
const low_tom = s("lt").struct("<~@36 A ~@29 B ~@3 B ~@3 B ~@3 B ~@3 B ~@4>".pickRestart({
  A: "~ x ~@6", B: "~@5 x ~@2",
})).gain(0.31)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@10 [~@4 x!4] [x!8]!29 [x!4 ~@4] [x!8]!40 [x!4] ~@5>").gain(0.31)

// drums · pedal hat · soft notes
const pedal_hat_soft = s("hh").struct("<~@81 [~ x ~ x ~ x ~ x] [x!8]!4 [x!3 ~@5]>").gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct("<~@10 A ~@10 A ~@10 A ~@18 B ~@10 B ~@24>".pickRestart({
  A: "~@2 x!2 ~@4", B: "~@6 x!2",
})).gain(0.31)

// drums · shaker
const shaker = s("sh").struct("<~ [~@3 x] [~ x ~ x]!8 [~ x ~@2] ~@76>").gain(0.15)

stack(
  music_box, bass, electric_guitar_jazz, electric_guitar_jazz_2, piano, piano_soft, brass_section, clarinet,
  clarinet_soft, kick, kick_soft, snare, snare_soft, low_tom, pedal_hat, pedal_hat_soft, mid_tom, shaker
)