Strudelify

hip to be square

Lexington Lab Band

KeyA majorTempo120 bpm
0:00/0:00
// hip to be square — Lexington Lab Band
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5982481; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 142 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · alto sax · "Alto Saxophone"
const alto_sax = note("<~@69 A@2 B C D E@2 F ~@65>".pickRestart({
  A: "[~@4 d#5@16 c5@2 a#4@2 g4 f4 d#4@2 c4 a#3 g3 f3]/2", B: "a#3@2 c4 d#4@3 ~ e4",
  C: "f4 g4 f4 d#4 g4@2 d#4@2 c4@2 g3@2 a#3@2 c4@2", D: "~@2 f#4 g4 f4 d#4 c4 a#3 f4 d#4 c4 a#3 c4 a#3 g3 e3",
  E: "[f3@2 b3@2 c4@2 a#3@2 d4 e4 g4@2 a4@2 a#4@6 c5@2 d#5@9 f5]/2", F: "g5@10 f5 d#5 ~@4",
})).s("gm_alto_sax").gain(0.39).pan(0.9)

// other · alto sax · "Alto Saxophone" · soft notes
const alto_sax_soft = note("<~@76 A ~@41 B C ~ D E F ~@18>".pickRestart({
  A: "~@3 c5", B: "~@3 c4 g3@2 f3 d#3", C: "f3@2 g3 ~ d#3@2 ~@2 c3@4 ~@4", D: "~@5 g4 ~ g4",
  E: "f4 d#4 f4 d#4 f4 d#4 g4 d#4", F: "c4 ~@3",
})).s("gm_alto_sax").gain(0.22).pan(0.9)

// other · alto sax · "Alto Saxophone"
const alto_sax_2 = note(`<
  ~@5 A@2 B@2 ~@12 C D E F G H I ~@13 C D E F G H I ~ G H I ~ J K L M J K N@2 O@2 P Q R S T ~ G H I ~ G H I ~@13 C D E F
  G H I ~ G H I ~@8 U V@2 B@2 A@2 W@2 ~@8 A@2 W@2 X T W@2 X T W@2 A@2 Y Z AA
>`.pickRestart({
  A: "[~ g3 a3 c4@13]/2", B: "[~ d#4 d4 c4@13]/2", C: "f3", D: "g3", E: "a#3", F: "c4 ~@3", G: "~@3 c4 ~@3 g3",
  H: "a3 g3 a3 ~@5", I: "~@3 c4 ~@4", J: "~ g4 a4 c5@3 a4 ~", K: "~ g4 a4 c5@3 d5 ~", L: "~ g4 a4 c5@3 a4 c5",
  M: "d#5 c5 d5 a4 c5@2 a4 ~", N: "[~ c4 d4 d#4@2 d#4 f4 g4@3 f4 g4 f4 d#4 c4 ~]/2",
  O: "[~@2 g4 ~@2 g4 ~@2 g4 ~@5 a3@4 c4@2 d4@2 a3@2 c4@4 d#4@2 ~@2]/2", P: "~@2 g4 ~@2 g4 ~@2 g4 ~@5 c4@2",
  Q: "f4 d#4 d4 c4 ~ a#3 ~ c4", R: "~ c3", S: "f3 a#3", T: "c4", U: "~@6 a#4 ~", V: "[c5 ~@2 c4@13]/2",
  W: "[~ d#4 d4 c4@11 ~@2]/2", X: "~ g3 a3 c4@5", Y: "~ d#4 d4 c4@5", Z: "g4 ~ g4 ~ f4 ~ f4 ~", AA: "d#4 ~@3",
})).s("gm_alto_sax").gain(0.3).pan(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@5 A@2 B@2 ~@12 C D E F G H I ~@13 C D E F G H I ~ G H I ~ J K L M J K N@2 O@2 P Q R S T ~ G H I ~ G H I ~@13 C D E F
  G H I ~ G H I ~@8 U V@2 W@2 X@2 Y@2 ~@8 X@2 Y@2 X@2 Y@2 X@2 Y@2 X@2 Z AA AB
>`.pickRestart({
  A: "[~ g3 a3 c4@13]/2", B: "[~ d#4 d4 c4@13]/2", C: "d3", D: "e3", E: "f3", F: "g3 ~@3", G: "~@3 g3 ~@3 e3",
  H: "f3 e3 f3 ~@5", I: "~@3 g3 ~@4", J: "~ g3 a3 c4@3 a3 ~", K: "~ g3 a3 c4@3 d4 ~", L: "~ g3 a3 c4@3 a3 c4",
  M: "d#4 c4 d4 a3 c4@2 a3 ~", N: "[~ c4 d4 d#4@2 d#4 f4 g4@3 f4 g4 f4 d#4 c4 ~]/2",
  O: "[~@2 a#3 ~@2 a#3 ~@2 a#3 ~@5 a3@4 c4@2 d4@2 a3@2 c4@4 d#4@2 ~@2]/2", P: "~@2 a#3 ~@2 a#3 ~@2 a#3 ~@5 c4@2",
  Q: "d4 d#4 d4 d#4 ~ d4 ~ e4", R: "~ c3", S: "c3 f3", T: "a#3", U: "~@6 f4 ~", V: "[g4 ~@2 c4@13]/2",
  W: "[~ a#3 a3 c3@13]/2", X: "[~ e4 f4 c4@13]/2", Y: "[~ d#3 d3 c3@11 ~@2]/2", Z: "~ d#3 d3 c3@5",
  AA: "d#4 ~ d#4 ~ d4 ~ d4 ~", AB: "c4 ~@3",
})).s("gm_tenor_sax").gain(0.41).pan(0.3)

// other · trumpet · "Bb Trumpet"
const trumpet = note(`<
  ~@5 A@2 B@2 ~@12 C D E F G H I ~@13 C D E F G H I ~ G H I ~ J K L M J K N@2 O@2 P Q R S T ~ G H I ~ G H I ~@13 C D E F
  G H I ~ G H I ~@8 U V@2 W@2 X@2 Y@2 ~@8 A@2 Z@2 A@2 Z@2 A@2 Z@2 A@2 AA AB F
>`.pickRestart({
  A: "[~ g4 a4 c5@13]/2", B: "[~ d#5 d5 c5@13]/2", C: "f4", D: "g4", E: "a#4", F: "c5 ~@3", G: "~@3 c5 ~@3 g4",
  H: "a4 g4 a4 ~@5", I: "~@3 c5 ~@4", J: "~ g4 a4 c5@3 a4 ~", K: "~ g4 a4 c5@3 d5 ~", L: "~ g4 a4 c5@3 a4 c5",
  M: "d#5 c5 d5 a4 c5@2 a4 ~", N: "[~ a4 a#4 c5@2 c5 d5 d#5@3 d5 d#5 d5 c5 a4 ~]/2",
  O: "[~@2 g4 ~@2 g4 ~@2 g4 ~@5 a4@4 c5@2 d5@2 a4@2 c5@4 d#5@2 ~@2]/2", P: "~@2 g4 ~@2 g4 ~@2 g4 ~@5 c5@2",
  Q: "d5 d#5 d5 d#5 ~ a#4 ~ c5", R: "~ c4", S: "f4 a#4", T: "c5", U: "~@6 a#4 ~", V: "[c5 ~@2 c4@13]/2",
  W: "[~ d#4 d4 c4@13]/2", X: "[~ g3 a3 c4@13]/2", Y: "[~ d#4 d4 c4@11 ~@2]/2", Z: "[~ d#5 d5 c5@11 ~@2]/2",
  AA: "~ d#5 d5 c5@5", AB: "d#5 ~ d#5 ~ d5 ~ d5 ~",
})).s("gm_trumpet").gain(0.3).pan(0.8)

// other · trombone
const trombone = note(`<
  ~@5 A@2 B@2 ~@12 C D E F G H I ~@13 C D E F G H I ~ G H I ~ J K L M J K N@2 O@2 P Q R S T ~ G H I ~ G H I ~@13 C D E F
  G H I ~ G H I ~@8 U V@2 W@2 X@2 Y@2 ~@8 X@2 Y@2 X@2 Y@2 X@2 Y@2 X@2 Z AA AB
>`.pickRestart({
  A: "[~ g3 a3 c4@13]/2", B: "[~ d#4 d4 c4@13]/2", C: "a3", D: "b3", E: "d4", F: "c4 ~@3", G: "~@3 e3 ~@3 b2",
  H: "c3 b2 c3 ~@5", I: "~@3 e3 ~@4", J: "~ g3 a3 c4@3 a3 ~", K: "~ g3 a3 c4@3 d4 ~", L: "~ g3 a3 c4@3 a3 c4",
  M: "d#4 c4 d4 a3 c4@2 a3 ~", N: "[~ d#3 f3 g3@2 g3 a3 a#3@3 a3 a#3 a3 g3 d#3 ~]/2",
  O: "[~@2 e3 ~@2 e3 ~@2 e3 ~@5 a3@4 c4@2 d4@2 a3@2 c4@4 d#4@2 ~@2]/2", P: "~@2 e3 ~@2 e3 ~@2 e3 ~@5 c4@2",
  Q: "f4 d#4 d4 c4 ~ f3 ~ g3", R: "~ c3", S: "c3!2", T: "g3", U: "~@6 d4 ~", V: "[e4 ~@2 c4@13]/2",
  W: "[~ g3 f3 c3@13]/2", X: "[~ c4 d4 c4@13]/2", Y: "[~ d#3 d3 c3@11 ~@2]/2", Z: "~ d#3 d3 c3@5",
  AA: "a#3 ~ a#3 ~ a3 ~ a3 ~", AB: "g3 ~@3",
})).s("gm_trombone").gain(0.3).pan(1)

// chords · electric guitar muted · "Guitar"
const electric_guitar_muted = note(`<
  ~ A B A B A B A C D E D F D E D F G H I@2 J K L M A B A C D E D F D E D F G H I@2 J K L M A B A B A B A C A@15 N A B A
  B A B A C D E D F D E D F G H I@2 J K L M A B A B A B A C A B A B A B A O A B A B A B A O A B A P A B A P A B A B A B
  A O A B A B A B A Q R
>`.pickRestart({
  A: "[g3,a#3,c4]!2 ~ [g3,a#3,c4] ~@3 g3", B: "[f3,a3,c4] g3 [f3,a3,c4] ~@5",
  C: "[f3,a3,c4] ~ [f3,a3,c4] ~ [c3,g3]@2 [c3,a#3]@2", D: "[g3,a#3,c4]!2 ~ [g3,a#3,c4] ~@4",
  E: "[f3,a3,c4]!2 ~ [f3,a3,c4] ~@4", F: "[f3,a3,c4] ~ [f3,a3,c4] ~ [d#3,g3,a#3] ~ [d#3,g3,a#3] ~",
  G: "[f3,a3,c4]@3 [f3,a3,c4]@3 ~@2", H: "[d#3,g3,a#3]@3 [d#3,g3,a#3]@3 ~@2",
  I: "[[f3,a3,c4]@4 [g3,b3,d4]@3 [c3,e3,g3]@4 ~@5]/2", J: "[d3,f3,a3]@3 [d3,f3,a3]@3 ~@2",
  K: "[e3,g3,b3]@3 [e3,g3,b3]@3 ~@2", L: "[f3,a#3,d4]@3 [f3,a#3,d4]@3 ~@2", M: "[f3,g3,c4] ~@7",
  N: "[d3,f3,c4]!2 ~ [d3,f3,c4] [d3,f3,b3]!2 ~ [d3,f3,b3]", O: "[f3,a3,c4] ~ [f3,a3,c4] ~ [c3,g3]@2 [c3,a#3] ~",
  P: "[f3,a3] ~ [f3,a3] ~ [c3,g3] ~ [c3,g3] ~", Q: "[f3,a3,c4] ~ [f3,a3,c4] ~ [c3,g3] ~ [c3,a#3] ~", R: "[g3,c4] ~@3",
})).s("gm_electric_guitar_muted").gain(0.2).pan(0.8)

// chords · overdriven guitar · "Electric Guitar"
const overdriven_guitar = note(`<
  ~ A B A B A B A C ~@8 D@2 E@2 F G H I A B A C ~@8 D@2 E@2 F G H I A B A B A B A C J K J K J K J K J K J K J K J L A B
  A B A B A C ~@8 D@2 E@2 F G H I A B A B A B A C A B A B A B A M A B A B A B A M N ~@2 O P@2 Q@2 A B A B A B A M A B A
  B A B A R S
>`.pickRestart({
  A: "[c3,e3]!3 [e3,g3] ~ [e3,g3] ~ [e3,g3]", B: "[f3,a3] [e3,g3] [f3,a3] ~@2 f3 g3 a#3",
  C: "[c3,f3] ~ [c3,f3] ~ [d3,g3]@2 [f3,a#3]@2", D: "[[c3,f3]@7 [a#2,d#3]@9]/2",
  E: "[[c3,f3]@4 [d3,g3]@3 [c3,e3]@4 ~ e3 g3 a3 c4]/2", F: "[a2,d3]!2 [a2,d3]@2 [a2,d3] ~ [a2,d3] ~",
  G: "[b2,e3]!2 [b2,e3]@2 [b2,e3] ~ [b2,e3] ~", H: "[d3,f3]!2 [d3,f3]@2 [d3,f3] ~ [d3,f3] ~", I: "[c3,g3] ~@7",
  J: "[c3,e3]@14 [c3,e3]!2", K: "[c3,e3]", L: "d3!2 e3 f3 g3!2 a#3 b3", M: "[c3,f3] ~ [c3,f3] ~ [d3,g3]@2 [f3,a#3] ~",
  N: "[g3,c4] ~@3", O: "~@2 g4@2 f4@2 d#4@2 f4@2 d#4@2 ~@2 f4 g4", P: "[f4@2 g4@2 f4@2 f#4 g4@13 ~@10 [c4,g4]@2]/2",
  Q: "[~ [c4,g4] ~ [c4,g4] ~ [c4,g4] ~ [c4,g4]@3 f4 c4 d#4 c4@3]/2", R: "[c3,f3] ~ [c3,f3] ~ [d3,g3] ~ [f3,a#3] ~",
  S: "[c3,a#3] ~@3", // C7
})).s("gm_overdriven_guitar").gain(0.3).pan(0.3)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  ~ A B A B A B A C A B A B A B A D E F G@2 H I J K A B A C A B A B A B A D E F G@2 H I J K A B A B A B A C L@15 M A B A
  B A B A C A B A B A B A D E F G@2 H I J K A B A B A B A C A B A B A B A N A B A B A B A C ~@7 O A B A B A B A N A B A
  B A B A P Q
>`.pickRestart({
  A: "c1!3 e1 ~ e1 ~ e1", B: "f1 e1 f1 ~@2 f1 g1 a#1", C: "f1 ~ f1 ~ g1@2 a#1@2", D: "f1 e1 f1 ~@2 a#1 c2 d#2",
  E: "f1!7 d#1", F: "d#1!8", G: "[f1!3 ~ g1 ~ g1 c1@4 ~ e1 g1 a1 c2]/2", H: "d1!2 d1@2 d1 ~ d1 ~",
  I: "e1!2 e1@2 e1 ~ e1 ~", J: "f1!2 f1@2 f1 ~ f1 ~", K: "[g0,g1] ~@7", L: "c1 [c1,c2] c1 [c1,c2]",
  M: "d1!2 e1 f1 g1!2 a#1 b1", N: "f1 ~ f1 ~ g1@2 a#1 ~", O: "~@4 g1@2 a#1 ~", P: "f1 ~ f1 ~ g1 ~ a#1 ~", Q: "c1 ~@3",
})).s("gm_electric_bass_finger").gain(0.45)

// bass · electric bass finger · "Electric Bass" · soft notes
const bass_soft = note("<~@117 A B A B A B A C ~@17>".pickRestart({
  A: "c1!3 e1 ~ e1 ~ e1", B: "f1 e1 f1 ~@2 f1 g1 a#1", C: "f1 ~ f1 ~@5",
})).s("gm_electric_bass_finger").gain(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@7 B A@15 C A@3 B A@15 C A@7 B A@23 B A@15 C A@7 B A@7 B A@7 B ~@8 A@7 B A@7 B D
>`.pickRestart({
  A: "x!2", B: "x ~ x!2", C: "x!2 ~@2", D: "x",
})).gain(0.5).pan(0.7)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@117 [x!2]!7 [x ~ x!2] ~@17>").gain(0.2).pan(0.7)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@141>").gain(0.45).pan(0.7)

// drums · snare
const snare = s("sd").struct(`<
  A B@15 C B@7 D B@3 E B@7 C B@7 D B@7 E B@7 C B@7 F B@7 E B@7 C B@7 D B@7 E B@7 E B@7 G B@15 G B@8 H
>`.pickRestart({
  A: "~@3 x", B: "x!4", C: "x ~@3 x ~@3 x ~@3 x ~ x!2", D: "x!2 ~@2", E: "x ~@3 x ~ x!3 ~@3 x ~@3", F: "x ~ x ~ x!4",
  G: "x!2 ~ x!3 ~ x!2 ~@3 x ~@3", H: "x",
})).gain(0.2).pan(0.7)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@19 A ~@47 A ~@47 B ~>".pickRestart({
  A: "x!2 ~@2", B: "~@3 x ~@3 x",
})).gain(0.5).pan(0.7)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~ A@7 B A@15 C A@3 B A@15 C A@7 B A@23 B A@15 C A@7 B A@7 B A@7 B ~@7 B A@7 ~@7 D B ~
>`.pickRestart({
  A: "x!8", B: "x!5 ~ x ~", C: "x!2 ~@2", D: "~@7 x",
})).gain(0.4).pan(0.7)

// drums · pedal hat · soft notes
const pedal_hat_soft = s("hh").struct("<~@117 [x!8]!7 ~@18>").gain(0.2).pan(0.7)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@15 B ~@19 B ~@47 B ~@47 C ~>".pickRestart({
  A: "~@2 x!2 ~@4", B: "x!2 ~@2", C: "~ x ~@3 x ~@2",
})).gain(0.5).pan(0.7)

// drums · open hat
const open_hat = s("oh").struct("<~@117 x ~@7 x ~@7 x ~@8>").gain(0.5).pan(0.7)

// drums · high tom
const high_tom = s("ht").struct("<A ~@7 B ~@59 C ~@47 D ~@15 D ~@9>".pickRestart({
  A: "~@3 x", B: "x!2 ~@6", C: "~@4 x!4", D: "~@2 x!2",
})).gain(0.5).pan(0.7)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@8 B ~@10 A ~@8 B ~@14 A ~@8 B ~@5 C D ~@7 A ~@8 B ~@14 A ~@7 A ~@7 A ~@15 A ~@7 E B
>`.pickRestart({
  A: "~@2 x!2", B: "x", C: "x!2", D: "x!3 ~", E: "x!4",
})).gain(0.5).pan(0.7)

// drums · ride
const ride = s("rd").struct("<~@24 A ~@19 A ~@23 B ~@23 A ~@49>".pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.5).pan(0.7)

// drums · cowbell
const cowbell = s("cb").struct("<~@117 [~ x ~ x]!8 ~@17>").gain(0.2).pan(0.7)

stack(
  alto_sax, alto_sax_soft, alto_sax_2, tenor_sax, trumpet, trombone, electric_guitar_muted, overdriven_guitar, bass,
  bass_soft, kick, kick_soft, rim, snare, low_tom, pedal_hat, pedal_hat_soft, mid_tom, open_hat, high_tom, crash, ride,
  cowbell
)