Strudelify

too good too bad

Yoko Kanno

KeyB♭ minorTempo120 bpm
0:00/0:00
// too good too bad — Yoko Kanno
// 120 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5055695; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 78 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 · "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(`<
  A B@3 ~@3 C D E F@2 D E G@2 H ~ H I D E J@2 ~@4 K L M L M L M L M L M ~ N ~ N O ~@3 P ~@8 Q@3 R Q@3 S H ~ H I D E T@3
  U V@3 W
>`.pickRestart({
  A: "bb3 ~ f4 ~ bb4 ab4 f4 ~", B: "[ab4 ~ db4@15 ~@7]/3", C: "~@6 bb3 db4", D: "f4@6 bb4 e4@9",
  E: "f4 e4 f4 e4 f4 bb4@2 e4@9", F: "[f4@6 bb4 e4@4 eb4 db4@2 eb4 db4@2 ~ bb3@2 bb3@4 bb3@2 bb3@2 bb3@2 db4@2]/2",
  G: "[f4@6 bb4 e4@4 eb4 db4@2 eb4 db4@2 ~ bb3@14]/2", H: "eb4!2 ~ db4!2 ~ eb4!2 ~@2 c4@2 gb3@4",
  I: "eb4 gb4@2 g4@2 ab4@2 a4 ~@4 bb3@2 db4@2", J: "[f4@6 bb4 e4@4 eb4 db4@2 eb4 db4@2 ~ bb3@2 ~@12]/2",
  K: "~@5 e3 f3 gb3", L: "g3@2 ~@7 eb3 g3@2 ab3@2 a3@2", M: "bb3 ~@4 e3 f3 gb3", N: "g4!2 ~ f4!2 ~ g4!2 ~@2 c4@2 gb3@4",
  O: "eb4 gb4@2 g4@2 ab4@2 a4 ~@8", P: "bb3@2 db4 ~ db4 eb4@2 e4 ~ eb4 db4 bb3 eb4@2 db4@2", Q: "bb3!2 ~@4 bb3!2 ~@8",
  R: "bb3!2 ~@4 bb3!2 ~ db4@7", S: "~ bb3 ~@2 db4 ~@2 eb4 ~@2 e4 ~@2 f4 ~@2",
  T: "[f4@6 bb4 e4@4 eb4 db4@2 eb4 db4@2 ~ bb3@30]/3", U: "~@2 f4 ~ bb4 ab4 f4 ~", V: "[ab4 ~ db4@22]/3",
  W: "~ bb3 ~@2",
})).s("gm_tenor_sax").gain(0.45)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A B@3 C@7 D C@3 E F G H I J@3 K L M L M L M L M L M L M L M L N O P O I C@4 Q R S T U V W X Y@2 Z AA AB AC AD AE O P O
  I C@5 AF AG@3 AH
>`.pickRestart({
  A: "bb2 ~ f3 ~ bb3 ab3 f3 ~", B: "[ab3 ~ b2@15 ~@7]/3", C: "bb2 ~@2 ab2 ~@2 bb2 ~@2 bb2 f2@2 ab2@2 a2@2",
  D: "~ bb3 ~@2 ab3 ~@2 gb3 ~@2 f3@6", E: "~ bb2 ~@2 ab2 ~@2 g2 ~@2 gb2 ~@2 f2 ~@2",
  F: "eb2 ~@2 db2 ~@2 eb2 ~@2 e3 c3@2 d3@2 d3@2", G: "db3 c3 bb2 ab2 g2 eb2 db2 d2",
  H: "eb2 ~@2 db2 ~@2 eb2 ~@2 eb2 c2@2 db2@2 d2@2", I: "eb3 db3@2 eb3@2 e3@2 f3 ~@8",
  J: "bb3 ~@2 ab3 ~@2 bb3 ~@2 bb3 f3@2 ab3@2 a3@2", K: "bb3 ~@7", L: "bb3 ~@2 ab3 ~@2 bb3 ~@3 c3@2 db3@2 d3@2",
  M: "eb3 ~@2 db3 ~@2 eb3 ~@2 eb3 g3@2 ab3@2 a3@2", N: "bb3 ~@2 ab3 ~@2 g3 ~@2 gb3 ~@2 f3 ~ e3 ~",
  O: "eb3 ~@2 db3 ~@2 eb3 ~@2 eb3 c3@2 db3@2 d3@2", P: "db4 c4 bb3 ab3 g3 eb3 db3 d3",
  Q: "~@2 f2 bb2 db3 ~@3 db3@2 bb2 eb3 ~@4", R: "~@2 f2 bb2 db3 bb2@2 eb3 ~ db3 bb2 ab2 bb2@2 db3@2",
  S: "~ f2 bb2 db3 e3 eb3@2 bb2 db3@2 bb2 db3@3 bb2@2", T: "ab2 ~@2 gb2 g2 ~@2 eb2 f2@2 db2@2 db2@2 ~@2",
  U: "~@2 f2 ab2 db3 bb2@2 ab3@3 f3 g3@2 eb3@2 f3", V: "~@4 db3 bb2 db3 bb2 eb3@2 db3 bb2@2 bb2@2 bb2",
  W: "ab2 bb2 f2 g2 bb2 g2 ~ g2 db3 bb2 c3 bb2 ~ bb2@2 bb2", X: "gb2 g2 bb2 ~ gb2 g2 bb2 f2 ~@4 eb2@2 f2@2",
  Y: "[ab2 f2 ab2 bb2 ab2 bb2 db3 bb2 db3 f3@2 f3 ab3 f3 ab3 db4@2 db4 db4@2 db4 ab3@2 f3 ab3@2 f3 ab3 ~@4]/2",
  Z: "~@4 g3 ab3 bb3 g3 ab3 f3 ~ f3 ab3 g3 f3 eb3",
  AA: "db3 ~ f3@2 eb3 db3 c3 bb2 ab2 bb2 db3 f2@2 e2@2 ~, ~@2 db3 ~@13", AB: "~@9 g2 bb2 f3 g3 eb3 f3 g3",
  AC: "ab3 ~ g3 ab3 f3 db3@2 db3 eb3 db3 d3 eb3 f3 gb3 g3 a3",
  AD: "bb3 ab3 gb3 e3 eb3 db3 d3 eb3 c3 bb2 ab2 g2 bb2 g2 ab2 bb2",
  AE: "db3 eb3 g3 eb3 g3 ab3 a3 bb3 gb3 f3 ~@2 c3 ~ f2 ~", AF: "~@2 f3 ~ bb3 ab3 f3 ~", AG: "[ab3 ~ b2@22]/3",
  AH: "~ bb2 ~@2",
})).s("gm_baritone_sax").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@3 A B@7 C B@7 D B@3 D B@15 E B@3 F B@3 D B@19 D B@5 G H B@2 I>".pickRestart({
  A: "x ~ x ~@2 x ~@2 x ~@2 x!2 ~@3", B: "x!4", C: "x!3 ~", D: "x", E: "x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~", F: "x ~@2 x",
  G: "~@2 x ~ x!3 ~", H: "x!2 ~@2", I: "~ x ~@2",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B C D E D F D F G F H I J K L M N O D P Q D@2 F D F D@2 R D S D S D T U V F D@2 W D T O X Y@15 J Z AA R AB F D
  AA AC AD AE AF D AD AF
>`.pickRestart({
  A: "x ~@2 x!2 ~ x ~@2 x ~@2 x ~ x!2", B: "x ~ x ~@2 x ~@2 x ~@2 x!4 ~", C: "x ~@2 x ~@2 x ~@2 x ~ x ~ x ~@2",
  D: "x ~@2 x ~@2 x ~@2 x!3 ~ x ~@2", E: "x ~@2 x ~@2 x ~@2 x!2 ~@2 x!2 ~", F: "x ~@2 x ~@2 x ~@2 x ~@3 x ~@2",
  G: "~ x ~@2 x ~@2 x ~@2 x ~@3 x ~", H: "x ~@2 x ~ x!2 ~@2 x ~@2 x!4", I: "x ~@2 x ~ x ~@4 x ~@2 x!3",
  J: "x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@2", K: "x!2 ~ x!2 ~ x!2 ~ x!2 ~@3 x ~", L: "x ~@2 x ~@2 x ~@2 x!3 ~ x!2 ~",
  M: "x!2 ~ x!2 ~ x!2 ~ x!2 ~@2 x!2 ~", N: "x!2 ~ x ~ x ~ x ~ x!6 ~", O: "x ~@2 x ~@2 x ~@2 x!2 ~@2 x ~@2",
  P: "x ~@2 x ~@2 x ~ x ~@2 x!4 ~", Q: "x", R: "x ~@2 x ~@2 x ~@2 x!2 ~ x ~@3", S: "x ~@2 x ~@2 x!2 ~ x!5 ~ x",
  T: "x ~@2 x ~@2 x ~@2 x!2 ~ x ~@2 x", U: "x ~@2 x ~@2 x ~ x!5 ~@3", V: "x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~",
  W: "x!2 ~ x ~ x ~ x ~ x!2 ~@2 x!2 ~", X: "x ~@14 x", Y: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x!2",
  Z: "x ~@2 x ~@2 x ~@2 x!2 ~@3 x ~", AA: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", AB: "x!2 ~ x ~ x ~ x ~@3 x!4 ~",
  AC: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x", AD: "x ~@2 x!2 ~ x ~ x!8", AE: "x ~ x ~ x!3 ~", AF: "x!2 ~@2",
})).gain(0.25)

stack(tenor_sax, baritone_sax, kick, snare)

More by Yoko Kanno