Strudelify

The Only Way Is Up

Yazz & plastic population

KeyC majorTempo124 bpm
0:00/0:00
// The Only Way Is Up — Yazz & plastic population
// 124 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "A.PIANO 1" piano (copy of ch 1 "E.PIANO 1" epiano1); ch 6 "FLUTE" flute (copy of ch 4 "CLARINET" clarinet); ch 9 "E.GUITAR" acoustic guitar steel (copy of ch 8 "A.GUITAR" acoustic guitar nylon)
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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 · epiano1 · "E.PIANO 1"
const epiano1 = note("<A@3 B C D E ~ F@2 G H I@2 J K L@2 G M N O P@2 Q R S T U V W X U V Y Z AA ~@64>".pickRestart({
  A: "[c5@13 a4 g4@4 ~@6]/3", B: "~@4 c4 g3 c4 d4", C: "e4@2 d4 c4@5", D: "~@6 d4 a3", E: "c4@2 d4 c4@5",
  F: "[g4@2 g4 ~@2 e4 d4 e4@5 ~@4]/2", G: "d4@2 d4 e4 c4@4", H: "~@6 e4!2", I: "[g4 e4 ~ e4 a4 g4@5 ~@4 d4 ~]/2",
  J: "d4@2 d4 a3 c4@4", K: "~@6 e4 g4", L: "[a4 g4@3 d5@2 ~ c5@2 a4 g4@4 ~@2]/2", M: "~ g4", N: "g3 g3@3 g4 g4@3",
  O: "g#3 g#3@3 g#4 ~ b4@2", P: "[~@4 a4@6 g4 a4 ~ d4 c4@2]/2", Q: "~ g3@3 g4 g4@3", R: "g#3 g#3@3 d5@4",
  S: "c5@6 c5 ~", T: "c5@2 ~ g4 c5 g4 c5 d5", U: "e5 ~@3", V: "d5@2 d5@2 ~@3 a4", W: "e5@2 d5 ~ d5 c5@3",
  X: "~@3 g4 c5 g4 c5 d5", Y: "~@2 d5!3 c5@3", Z: "~@3 a#4", AA: "c5 a4 g4@2 ~@4",
})).s("gm_epiano1").gain(0.32)

// other · epiano1 · "E.PIANO 1" · soft notes
const epiano1_soft = note("<~@8 A ~@3 B C ~@2 D ~@4 E ~ F G ~ H ~@3 I ~@3 J ~@66>".pickRestart({
  A: "~@3 e4 g4 ~@3", B: "~@2 g4 ~@5", C: "~@7 e4", D: "~@6 d5 ~", E: "~@5 b4 ~@2", F: "~@4 e4 ~@3", G: "g3 ~@7",
  H: "~@7 a4", I: "~@3 d5 ~@4", J: "e5 ~@3",
})).s("gm_epiano1").gain(0.24)

// bass · acoustic bass · "BASS 1"
const bass = note(`<
  A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D B E C D B E C D B E C D B E C@3 B A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D B E
  C D B E C D B E C D B E C@4 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 C D B E C D B E ~
>`.pickRestart({
  A: "c3!4", B: "f2!4", C: "c2!4", D: "e2!4", E: "g2!4",
})).s("gm_acoustic_bass").gain(0.31)

// bass · electric bass finger · "BASS 2"
const bass_2 = note(`<
  A B C D E B F D G H C D A B I D G H F J A K C L G K C M A N C O G N C L G P A D E B F D G H C D A B I D G H F J A K C
  L G K C M A N C O G N C L G P A P A H C D G H I D A Q C J E Q C R E K I L G N F M ~
>`.pickRestart({
  A: "c3!2 ~ c3 ~ c3 a2 ~ g2@2 ~@4 g2 a2", B: "c3!2 ~ c3 ~ c3 a2 ~ g2@2 ~@2 c3@2 ~@2",
  C: "f3!2 ~ f3 ~ f3 d3 ~ c3@2 ~@4 c3 d3", D: "f3!2 ~ f3 ~ f3 d3 ~ c3@2 ~@2 d3@2 ~@2",
  E: "c3!2 ~ c3 ~ c3!2 ~ c3@3 ~@3 g2 a2", F: "f3!2 ~ f3 ~ f3!2 ~ f3@3 ~@3 c3 d3",
  G: "c3!2 ~ c3 ~ c3 a2 ~ c3@2 ~@4 g2 a2", H: "c3!2 ~ c3 ~ c3 d3 ~ e3 ~ d3 ~ c3@2 ~@2",
  I: "f3!2 ~ f3 ~ f3 d3 ~ f3@2 ~@4 c3 d3", J: "f3!2 ~ f3 ~ f3 d3 ~ c3@2 ~@2 f3@2 ~@2",
  K: "e3!2 ~ e3 ~ e3 d3 ~ b2@2 ~@2 d3@2 ~@2", L: "g3!2 ~ g3 ~ g3 f3 ~ d3@2 ~@2 g3@2 ~@2",
  M: "g3!2 ~ g3 ~ g3 f3 ~ d3@2 ~@2 f3@2 ~@2", N: "e3!2 ~ e3 ~ e3 d3 ~ b2@2 ~@2 e3@2 ~@2",
  O: "g3!2 ~ g3 ~ g3 a3 ~ b3 ~ a3 ~ g3@2 ~@2", P: "c3!2 ~ c3 ~ c3 a2 ~ g2@2 ~@2 a2@2 g2 a2",
  Q: "c3!2 ~ c3 ~ c3 a2 ~ g2@2 ~@2 a2@2 ~@2", R: "f3!2 ~ f3 ~ f3 g3 ~ a3 ~ g3 ~ f3@2 ~@2",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · piano · "HONKY-TONK"
const piano = note(`<
  A B C D A B C D B E F D A B F C A@2 D C A G D H A I F J A G F H B G D K E B@2 D A B C D B E F D A B F C A@2 D C A G D
  H A I F J A G F H B G D K E B@4 E D F B E F C B A C F B A C D A L F H B L C H ~
>`.pickRestart({
  A: "[g4,c5,e5]@2 ~ [g4,c5,e5] ~@8 [g4,c5,e5]@2 ~@2", B: "[g4,c5,e5]@2 ~ [g4,c5,e5] ~@12", C: "[a4,c5,f5]@7 ~@9",
  D: "[a4,c5,f5]@2 ~ [a4,c5,f5] ~@12", E: "[g4,c5,e5]@7 ~@9", F: "[a4,c5,f5]@2 ~ [a4,c5,f5] ~@8 [a4,c5,f5]@2 ~@2",
  G: "[b4,d5,e5,g#5]@2 ~ [b4,d5,e5,g#5] ~@8 [b4,d5,e5,g#5]@2 ~@2", // E7
  H: "[b4,d5,f5,g5]@2 ~ [b4,d5,f5,g5] ~@8 [b4,d5,f5,g5]@2 ~@2", I: "[b4,d5,e5,g#5]@7 ~@9",
  J: "[b4,d5,f5,g5]@2 ~ [b4,d5,f5,g5] ~@12", K: "[b4,d5,f5,g5]@7 ~@9", L: "[b4,d5,e5,g#5]@2 ~ [b4,d5,e5,g#5] ~@12",
})).s("gm_piano").gain(0.57)

// other · acoustic guitar nylon · "A.GUITAR"
const acoustic_guitar_nylon = note("<~@75 A B C D ~ E@2 F G H@2 I J K@2 F L M N O@2 M P ~@3>".pickRestart({
  A: "~@4 c4 g3 c4 d4", B: "e4@2 d4 c4@5", C: "~@6 d4 a3", D: "c4@2 d4 c4@5", E: "[g4@2 g4 e4 g4 e4 d4 e4@5 ~@4]/2",
  F: "d4@2 d4 e4 c4@4", G: "~@6 e4!2", H: "[g4 e4 g4 e4 a4 g4@5 ~@4 d4 e4]/2", I: "d4@2 d4 a3 c4@4", J: "~@6 e4 g4",
  K: "[a4 g4@3 d5@2 d5 c5@2 a4 g4@4 ~@2]/2", L: "~ g4", M: "g3 g3@3 g4 g4@3", N: "g#3 g#3@3 g#4 b4 b4@2",
  O: "[~@4 a4@6 g4 a4 e4 d4 c4@2]/2", P: "g#3 g#3@3 d5@4",
})).s("gm_acoustic_guitar_nylon").gain(0.39)

// other · acoustic guitar nylon · "A.GUITAR" · soft notes
const acoustic_guitar_nylon_2 = note("<~@98 [c5@6 c5 a4] [c5@2 ~ g4 c5 g4 c5 d5] ~>")
  .s("gm_acoustic_guitar_nylon").gain(0.16)

// drums · kick
const kick = s("bd").struct("<[x ~@6 x!2 ~ x ~@3 x ~]!100 ~>").gain(0.57)

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  A@3 B C D E F A B A B D A G A H@2 A H A H D H@2 C A G I G A H A@2 H@2 D A@2 B C D E F A B A B D A G A H@2 A H A H D
  H@2 C A G I G A H A@2 H@2 D A@3 H@2 E H@2 G D A B H A H@7 D A J H D K ~
>`.pickRestart({
  A: "x!15 ~", B: "x!7 ~ x!7 ~", C: "x!3 ~ x!11 ~", D: "x!11 ~ x!3 ~", E: "x!7 ~ x!8", F: "x!11 ~ x!4", G: "x!13 ~ x!2",
  H: "x!16", I: "x!3 ~ x!3 ~ x!8", J: "x!13 ~ x ~", K: "x!8 ~ x!7",
})).gain(0.57)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@3 B C D E F A B A B D A G A ~@2 A ~ A ~ D ~@2 C A G H G A ~ A@2 ~@2 D A@2 B C D E F A B A B D A G A ~@2 A ~ A ~ D
  ~@2 C A G H G A ~ A@2 ~@2 D A@3 ~@2 E ~@2 G D A B ~ A ~@7 D A I ~ D ~@2
>`.pickRestart({
  A: "~@15 x", B: "~@7 x ~@7 x", C: "~@3 x ~@11 x", D: "~@11 x ~@3 x", E: "~@7 x ~@8", F: "~@11 x ~@4", G: "~@13 x ~@2",
  H: "~@3 x ~@3 x ~@8", I: "~@13 x ~ x",
})).gain(0.57)

// drums · high tom
const high_tom = s("ht").struct(`<
  A@2 ~@10 A@2 ~@2 A ~@2 A ~ A ~@4 A@2 ~@2 A ~ A ~@2 A@2 ~ A ~@9 A@2 ~@2 A ~@2 A ~ A ~@4 A@2 ~@2 A ~ A ~@2 A@2 ~ A@2 ~@2
  A ~@2 A@2 ~ A@2 ~@3 A ~@2 A@2 ~@7
>`.pickRestart({
  A: "~@11 x ~@4",
})).gain(0.57)

stack(
  epiano1, epiano1_soft, bass, bass_2, piano, acoustic_guitar_nylon, acoustic_guitar_nylon_2, kick, snare, low_tom,
  hihat, open_hat, high_tom
)