Strudelify

friday

Rewindedness

KeyD♭ majorTempo113 bpm
0:00/0:00
// friday — Rewindedness
// 113 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 2 "B♭ Trumpet" trumpet (copy of ch 1 "Alto Saxophone" alto sax)
// note: Transcription provider: pdmx. https://musescore.com/score/4064206; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(113/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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 · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@8 A B C D E F G H@2 I J K L M N ~ M@2 N ~ O P@2 M Q R S T U V W T U X Y Z AA AB AC@2 AD AE ~ AF AG AH AI AJ AK AL AM
  M AN ~ AO M AP ~ AQ@2 P M Q M AR ~ AS M AT@2 AU AV P M AW AX ~
>`.pickRestart({
  A: "gb3 eb3 b2 db3", B: "eb3 b2 db3@2", C: "b2 db3@3", D: "db3", E: "~@2 gb3 eb3", F: "b2 db3 eb3@2 b2 db3 eb3@2",
  G: "b2@4 ~@2 b2!2 b2@2 b2@2 b2@4", H: "[db3@4 ~ e3 gb3@5 ~ b3@2 gb3@2]/2", I: "b2@2 b3 gb3", J: "~@2 gb3!2",
  K: "gb3@2 gb3@2 b3@3 db4", L: "eb4@3 ~", M: "b3!4", N: "~@3 b3 b3@2 db4 b3", O: "~ b3 ~ b3",
  P: "b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ gb4@4", Q: "eb4 db4!2 b3!2 bb3 bb3@2", R: "b3@8 gb3!4 gb3@2 gb3@2",
  S: "ab3@2 ~ ab3 ab3@2 ab3@2", T: "e3@2 ~ e3 e3@2 e3@2", U: "gb3@2 ~ gb3 gb3@2 gb3@2", V: "~@2 b4 gb4",
  W: "e4 eb4@3 ~@4", X: "gb3@3 ~ b3@2 gb3@2", Y: "b2@3 b3 b3@2 gb3 ab3", Z: "gb3 eb3 e3 gb3",
  AA: "gb3@2 gb3@2 b3@3 gb4", AB: "gb4@3 ~", AC: "[b3@2 ~@5 ab3@2 gb3@6 ~]/2", AD: "~@8 gb3 ~ gb3 ~ b3@2 db4@2",
  AE: "b3 eb4@6 ~", AF: "~@8 b3 ~ b3 ~ db4@2 b3@2", AG: "eb4", AH: "eb4 db4 b3 bb3", AI: "~ b3@7", AJ: "~ b3@3 ~ b3@3",
  AK: "gb3 e3@5 ~@2", AL: "gb4@4 eb4@2 db4 eb4", AM: "b3@3 ~", AN: "b4 eb5@3", AO: "~ db5 b4@6", AP: "~@3 b3 b3@2 b3@2",
  AQ: "[eb5 db5@2 eb5@3 ~ gb4]/2", AR: "~@2 gb3!2 ~@2 gb3!2", AS: "~@2 db5!2 b4@2 db5@2 ab4@4 gb4@4",
  AT: "[ab4@2 ~@8 e3!3 ab3 gb3@10 ~@8, ~ gb4@15]/2", AU: "~@5 b3!2 ab3", AV: "b3 ab3 b3@2 ~@2 gb4@2",
  AW: "eb4 db4!2 b3!2 bb3!2 ~", AX: "b2",
})).s("gm_tenor_sax").gain(0.3)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  ~@17 A B C@2 D E F G D E H D I@2 J K L M N O P Q R S T@2 U V W X@4 Y Z AA AB AC AD AE AF W D E F G D AG H D I@2 J AH@2
  E F G D AG H D I@2 J AI AJ ~
>`.pickRestart({
  A: "~@5 e3 ab2 db3", B: "e2 b2 e2 e3 e2 eb3 e2 gb3", C: "[gb2 bb2 gb2 b2 gb2 eb3 gb2 gb3@7 ~@2]/2",
  D: "eb3 db3 eb3 db3", E: "eb3!2 eb3@2 eb3@2 db3@2 eb3@4 db3@2 b2@2", F: "~@2 b2!2 b2@2 b2@2 b2!2 b2@2 b2@2 b2!2",
  G: "gb2 db3 gb2 db3", H: "~@2 b2!2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2", I: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b3@4", J: "b2!4",
  K: "eb3 db3!2 b2!2 bb2 bb2@2", L: "b2!4 b2@2 b2@2 b2!4 b2@2 b2@2", M: "b2@2 b2@2 b2@2 b2@2 b2@2 b2!2 b2@4",
  N: "b2@4 b2@4 b2@2 b2!2 b2@4", O: "gb2@2 b2@2 eb3 db3 b2 bb2", P: "~ gb3 b2!6", Q: "b2!4 b2@2 eb3 db3",
  R: "~ gb3 b2!4 b2@2", S: "gb2 db3 eb3 db3", T: "b2!4 gb3@2 b2@2", U: "~@2 b2!2 b2@2 b2@2 b2@4 b2@4",
  V: "e3 eb3 ~ b2@2 b2@2 e3", W: "gb3@3 gb3", X: "[eb3@2 b2@2 gb2@2 b2 db3@2 b2@2 db3@2 b2@2 ~]/2",
  Y: "gb3@2 b2@2 b2@2 b2!2", Z: "b2@2 ab2@2 ~ gb3!2 b2", AA: "b2@2 ab2@2 ~ b2!3", AB: "eb3 db3 db3@2 b2@2 bb2@2",
  AC: "~ b2!7", AD: "~ b2!3 ~ b2!3", AE: "gb2 ab2@5 ~@2", AF: "gb3!4 eb3!2 db3 eb3",
  AG: "eb3!2 eb3@2 eb3@2 db3@2 eb3@4 db3@4", AH: "[~@2 eb4 gb3 eb3 db3 eb3 db3, ~@3 db4@4 ~]/2",
  AI: "eb3 db3!2 b2!2 bb2!2 ~", AJ: "b2",
})).s("gm_baritone_sax").gain(0.48)

// other · baritone sax · "Baritone Saxophone" · soft notes
const baritone_sax_soft = note("<A B C D A B C D A B C D A B C D E F ~@67>".pickRestart({
  A: "b2 gb3 b2 eb3 b2 gb3 b2 eb3", B: "ab2 e3 ab2 db3 ab2 e3 ab2 db3", C: "e2 b2 e2 e3 e2 eb3 e2 gb3",
  D: "gb2 bb2 gb2 b2 gb2 eb3 gb2 db3", E: "ab3 e4 ab3 db4 ab3 e4 ab3 db4", F: "ab2 e3 ab2 db3 ab2 ~@3",
})).s("gm_baritone_sax").gain(0.24)

// other · trombone
const trombone = note(`<
  A B C D A B C D A B C D A B C D B@2 C E@2 A B C D A B C D A B C D A B C D A B C D A B C E@2 F G H I F G H I F G H I J
  A B C D A B C D A B C D A B C D A B C D A B C K L ~
>`.pickRestart({
  A: "b2 gb3 b2 eb3 b2 gb3 b2 eb3", B: "ab2 e3 ab2 db3 ab2 e3 ab2 db3", C: "e2 b2 e2 e3 e2 eb3 e2 gb3",
  D: "gb2 bb2 gb2 b2 gb2 eb3 gb2 db3", E: "[gb2 bb2 gb2 b2 gb2 eb3 gb2 gb3@7 ~@2]/2", F: "~ b2 ~ b2 ~ b2 ~ b2",
  G: "~ ab2 ~ ab2 ~ ab2 ~ ab2", H: "~ e2 ~ e2 ~ e2 ~ e2", I: "~ gb2 ~ gb2 ~ gb2 ~ gb2", J: "gb2@3 ~",
  K: "gb2 bb2 gb2 b2 gb2 eb3 gb2 ~", L: "gb2",
})).s("gm_trombone").gain(0.24)

// bass · tuba · "B♭ Tuba"
const bass = note(`<
  A B C D A B C D E F G H E F G H I J G H K L M N O L M N P Q R S N T U V W T U V W X Y V W K Z AA AB AC Z AA AB AC AD
  AE AF AG AH L M N AI L M N P Q R S N L M N O L M N P Q R S AJ AK ~
>`.pickRestart({
  A: "b2 gb3 b2 eb3 b2 gb3 b2 eb3", B: "ab2 e3 ab2 db3 ab2 e3 ab2 db3", C: "e2 b2 e2 e3 e2 eb3 e2 gb3",
  D: "gb2 bb2 gb2 b2 gb2 eb3 gb2 db3", E: "b2", F: "ab2", G: "e2", H: "gb2", I: "~@5 eb3 db3 eb3, b2",
  J: "~@5 eb3 db3 eb3, ab2", K: "b1@3 ~", L: "~ b2 ~ b2 ~ b2 ~ b2", M: "~ ab2 ~ ab2 ~ ab2 ~ ab2",
  N: "~ e2 ~ e2 ~ e2 ~ e2", O: "~ gb2 ~ gb2 ~ gb2 ~ gb2", P: "gb2!4", Q: "b2@3 b2@3 b2@2", R: "ab2@3 ab2@3 ab2@2",
  S: "e2!4", T: "b1", U: "ab1", V: "e1", W: "gb1", X: "~@5 eb2 db2 eb2, b1", Y: "~@5 eb2 db2 eb2, ab1",
  Z: "b2!3 ~ b2!3 ~", AA: "ab2!3 ~ ab2!3 ~", AB: "e2!3 ~ e2!3 ~", AC: "gb2!3 ~ gb2!3 ~", AD: "b2 ~ b2 ~ b2 ~ b2 ~",
  AE: "ab2 ~ ab2 ~ ab2 ~ ab2 ~", AF: "e2 ~ e2 ~ e2 ~ e2 ~", AG: "gb2 ~ gb2 ~ gb2 ~ gb2 ~", AH: "db3@3 ~",
  AI: "~@7 eb3 b2!2 b2@2 b2@2 db3@2", AJ: "~ e2 ~ e2 ~ e2 ~@2", AK: "eb2",
})).s("gm_tuba").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@4 [x!2 ~ x ~@4]!42 ~@4 [x!2 ~ x ~@4]!35>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@4 A B A B A@8 C@2 A@4 B A B A B A B A B A B A@8 C@2 A@3 ~@4 A@35>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~", C: "~ x ~@2",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@4 A B A B ~@13 A B A B A B A B A B A B ~@52>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<A B ~@6 C@8 D@2 C@23 D@2 C@3 ~@11 C@28>".pickRestart({
  A: "x!3 ~ x ~ x ~ x!3 ~ x ~ x ~", B: "x!3 ~ x ~ x ~@9", C: "x!4", D: "x!2 ~@2",
})).gain(0.4)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~ [~@8 x!3 ~ x ~ x ~] [x!3 ~ x ~ x ~ x!3 ~ x ~ x ~]!2 ~@81>").gain(0.2)

stack(tenor_sax, baritone_sax, baritone_sax_soft, trombone, bass, kick, snare, clap, open_hat, open_hat_soft)