Strudelify

Yakety Sax

Atkins Chet

KeyG majorTempo120 bpm
0:00/0:00
// Yakety Sax — Atkins Chet
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 57 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 · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B C@3 D C E C F C@3 D C E C F C B G@2 H I G J K L G@3 I G M K N C A C@3 D C E C F C@3 D C E C O C@2 P
>`.pickRestart({
  A: "g2@2 [b3,d4,g4]!2 d2@2 [b3,d4,g4]!2 g2 ~@7", B: "g2@2 [b3,d4,g4]!2 d2@2 [b3,d4,g4]!2 g2@2 ~@6",
  C: "g2@2 [b3,d4,g4]!2 d2@2 [b3,d4,g4]!2 g2@2 [b3,d4,g4]!2 d2@2 [b3,d4,g4]!2", // G
  D: "d2@2 [a3,d4,f#4]!2 a2@2 [a3,d4,f#4]!2 d2@2 [a3,d4,f#4]!2 d2@2 [a3,d4,f#4]!2", // D
  E: "c2@2 [g3,c4,e4]!2 g2@2 [g3,c4,e4]!2 c2@2 [g3,c4,e4]!2 c2@2 [g3,c4,e4]!2", // C
  F: "d2@2 [a3,d4,f#4]!2 d2@2 [a3,d4,f#4] ~ g2@2 ~@6", // D
  G: "c2@2 [g3,c4,e4]!2 g2@2 [g3,c4,e4]!2 c2@2 [g3,c4,e4]!2 g2@2 [g3,c4,e4]!2", // C
  H: "c2@2 [g3,c4,e4] [g3,c4] g2@2 [g3,c4,e4]!2 c2@2 [g3,c4,e4]!2 g2@2 [g3,c4,e4] [g3,c4]", // C C5 C C5
  I: "g2@2 [g3,b3,d4]!2 d2@2 [g3,b3,d4]!2 g2@2 [g3,b3,d4]!2 d2@2 [g3,b3,d4]!2", // G
  J: "f2@2 [a3,c4]!2 c2@2 [a3,c4,f4]!2 f2@2 [a3,c4,f4]!2 c2@2 [a3,c4,f4]!2, ~ f4 ~@6", // Am F
  K: "c3@2 [g3,c4,e4]!2 g2@2 [g3,c4,e4]!2 g2@2 [g3,b3,d4]!2 d2@2 [g3,b3,d4]!2", // C G
  L: "c2@2 [g3,c4,e4] [g3,c4] g2@2 [g3,c4,e4]!2 c2@2 ~@6", // C C5 C
  M: "f2@2 [a3,c4,f4]!2 c2@2 [a3,c4,f4] [a3,c4] f2@2 [a3,c4,f4]!2 c2@2 [a3,c4,f4]!2", // F Am F
  N: "c2@2 [g3,c4,e4]!2 g2@2 [g3,c4,e4]!2 c3@2 ~@6", O: "d2@2 [a3,d4,f#4]!2 d2@2 [a3,d4,f#4] ~ g2 ~@7",
  P: "g2@2 [b3,d4,g4]!2 d2@2 [b3,d4,g4]!2 g2@2 [a3,d4,f#4] ~ [b3,d4,g4] ~@3", // G D G
})).s("gm_piano").gain(0.4).pan(0.3)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A@2 B@3 C B D B E B@3 C B D B E B F D@3 B D G H I D@3 B D G H I B F B@3 C B D B E B@3 C B D B E B@2 J
>`.pickRestart({
  A: "~@4 [b4,d5,g5] ~@11", B: "~@4 [b4,d5,g5] ~@7 [b4,d5,g5] ~@3", C: "~@4 [a4,d5,f#5] ~@7 [a4,d5,f#5] ~@3",
  D: "~@4 [c5,e5,g5] ~@7 [c5,e5,g5] ~@3", E: "~@4 [a4,d5,f#5] ~@3 [b4,d5,g5] ~@7",
  F: "~@4 [b4,d5,g5] ~@3 [b4,d5,g5] ~@7", G: "~@4 [c5,f5,a5] ~@7 [c5,f5,a5] ~@3",
  H: "~@4 [c5,e5,g5] ~@7 [b4,d5,g5] ~@3", I: "~@4 [c5,e5,g5] ~@3 [c5,e5,g5] ~@7",
  J: "~@4 [b4,d5,g5] ~@5 [a4,d5,f#5] ~ [b4,d5,f#5,g5] ~@3", // G D Gmaj7
})).s("gm_electric_guitar_clean").gain(0.54).pan(0.8)

// bass · electric bass pick · "PICK BASS"
const bass = note(`<
  A B C D E F E G E H I D E J K L M N D O P Q R E Q S T U Q@2 R E Q V W X D O C D E F E G E H I D E J K L M Y D@2 Z
>`.pickRestart({
  A: "g1@4 d2@3 ~ g2@2 ~@6", B: "g1@2 d2@2 g2 ~@3", C: "g1@3 ~ d2@4 g1@3 ~ d2@4", D: "g1 d2 g1 d2",
  E: "g1@4 d2@4 g1@4 d2@3 ~", F: "d2@3 ~ a1@4 d2@3 ~ d2@4", G: "c2@3 ~ g1@4 c2@3 ~ c2@4", H: "d2@4 d2@3 ~ g1 ~@7",
  I: "g1@3 ~ d2@3 ~ g1@4 d2@4", J: "d2@3 ~ a1@4 d2@3 ~ d2@3 ~", K: "g1@4 d2@4 g1@3 ~ d2@3 ~",
  L: "c2@3 ~ g1@3 ~ c2@3 ~ c2@3 ~", M: "g1@3 ~ d2@3 ~ g1@4 d2@3 ~", N: "d2@3 ~ d2@3 ~ g1 ~@7", O: "g1@2 d2@2 g1 ~@3",
  P: "c2@3 ~ g1@4 c2@4 g1@4", Q: "c2 g1 c2 g1", R: "c2@4 g1@4 c2@4 g1@3 ~", S: "f1@3 ~ c2@4 f1@4 c2@3 ~",
  T: "c2@3 ~ g1@4 g1@4 d2@4", U: "c2 g1 c2 ~", V: "f1 c2 f1 c2", W: "c2 g1!2 d2", X: "c2@4 g1@3 ~ c2@4 ~@4",
  Y: "d2@3 ~ d2@3 ~ g1@2 ~@6", Z: "g1@4 d2@4 ~@2 d2 ~ g1 ~@3, ~@2 g1 ~",
})).s("gm_electric_bass_pick").gain(0.54).pan(0.7)

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

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

// drums · tambourine
const tambourine = s("tb").struct("<A B C@7 A C@7 A C D C@7 E C@7 A C A C@7 A C@7 A C@2 F>".pickRestart({
  A: "x!5 ~@3", B: "~ x!4 ~@3", C: "x!8", D: "x!3 ~@5", E: "x ~ x ~ x ~@2 x ~ x ~@6", F: "x!5 ~ x ~",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@2 A@7 B A@7 B A C A@7 D A@7 D A D A@7 B A@7 B A@2 D>".pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "x", D: "x!3 ~",
})).gain(0.45)

// drums · bongos
const bongos = s("bongo:4").struct("<~@2 A@7 B A@7 B A B A@7 B A@7 B A B A@7 B A@7 B A@2 C>".pickRestart({
  A: "x ~@2 x!2 ~@3 x!2 ~ x ~@4", B: "x ~@2 x!2 ~@3 x ~@7", C: "x ~@2 x!2 ~@3 x ~ x ~ x ~@3",
})).gain(0.71)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@2 A@7 B A@7 B A C A@7 B A@7 B A B A@7 B A@7 B A@2 B>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "x!2 ~@2",
})).gain(1.82)

// drums · shaker
const shaker = s("sh").struct("<~@2 A@7 B A@7 B A B A@7 B A@7 B A B A@7 B A@7 B A@2 B>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~@4",
})).gain(0.4)

stack(piano, electric_guitar_clean, bass, kick, snare, tambourine, ride, bongos, cabasa, shaker)

More by Atkins Chet