Strudelify

Oh No

Zappa Frank

KeyE minorTempo120 bpm
0:00/0:00
// Oh No — Zappa Frank
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 2, 4/4 at bar 2, 3/4 at bar 3, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 44 bars on a 24-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 · [...]/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 · electric guitar clean · "Clean Gt."
const electric_guitar_clean = note(`<
  A B C@2 ~ D@2 E F@2 G H@2 ~ A B C@2 I D@2 E F@2 G J@3 K L@4 M N O P@2 Q R S@2 ~@2
>`.pickRestart({
  A: "~ d5 g4 e4", B: "a4@5 ~ f#4@6 e4@6 b3@6, ~@5 b4@2 ~@17",
  C: "[e4@6 f#4@5 ~ d5@5 ~ a4@5 ~ e4@4 a4@4 d5@4 e5@12, ~@11 g4@2 ~@4 c#5@2 ~@4 b4@2 ~@23]/2",
  D: "[~@12 d5@6 g4@4 e4@4 a4@4 b4@9 f#4@3 e4@6]/2", E: "b3@3 e4@5 f#4@2 g4@2",
  F: "[d5@4 c#5 a4 b4@3 e4@4 a4 d5 e5@3 ~@3 e4 a4 d5]/2", G: "e5@3 ~@3 d5@2 c#5@2 b4@2",
  H: "[a4@2 g4@2 a4@2 e4@3 b4@3 c#5@18 ~@18]/2",
  I: "~@6 d5@2 ~ b4@2 ~ g4@2 ~ e4@2 ~ c#5@6, ~@8 c#5@2 ~ a4@2 ~ a4@2 ~ b4@2 ~@5",
  J: "[a4@2 g4@2 a4@2 e4@3 b4@3 c#5@42 ~@18]/3", K: "[a4,e5]@3 [g4,d5]",
  L: "[[f4,c5]@12 ~@6 [a4,e5]@18 [g4,d5]@6 f#5@3 g5@2 ~ e5@3 f#5@9 [a4,e5]@33 ~@3, ~@7 b4@3 ~@6, ~@47 f#5@2 ~@47]/4", // F5 A5 G5 A5
  M: "~ a4@3", N: "g4 f4@2 ~", O: "a4@3 b4", P: "[g4@2 ~@2 a4@2 f4@4 ~@2 e4@2 d#4 a#3]/2", Q: "g4 f4 c4 a4 ~@2 d5@2",
  R: "g4@6 e4@6 a4@5 ~ f#4@6, ~@17 b4@2 ~@5", S: "e4/2",
})).s("gm_electric_guitar_clean").gain(0.4)

// chords · piano
const piano = note("<A B@2 C@4 D E@2 F G H I A B@2 C@4 D E@2 F J K L M N@3 O@2 P Q R@2 S@3 T U V>".pickRestart({
  A: "[e2,b2,f#3,g3,d4]", B: "[[a2,e3,b3] [a2,e3,b3]@2 [e2,b2,g3]@2 [c3,g3,d4] [b2,f#3,c#4] [a2,e3,b3]]/2",
  C: "[[a2,e3,b3]@2 [a2,e3,b3]@2 [a2,e3,b3]@2 ~@3 [b2,f#3,g3,d4]@9 [a2,e3,b3]@3 [a2,e3,b3]@6 [e2,b2,f#3,g3,d4]@6 [c3,g3,d4]@6 [b2,f#3,c#4]@9, ~ e2 ~@6]/4", // Asus2 Gmaj7 Asus2 Em7 Csus2 Bsus2
  D: "[e2,b2,g3]", E: "[[b2,f#3,c#4]@3 [c3,g3,d4]@3 [c3,g3,d4] [e2,b2,f#3]]/2", F: "[e2,b2,f#3] [b2,f#3,c#4]",
  G: "[c3,g3,d4] [d3,a3,e4] a2 [e3,a3]", H: "[e3,a3] c#3 [g#3,c#4]!2", I: "c#3 b2 [f#3,b3] b2",
  J: "[c3,g3,d4] [d3,a3,e4] b2 [f#3,b3]", K: "[f#3,b3] c#3 [g#3,c#4]!2", L: "c#3 a2 [e3,a3] a2",
  M: "[a#2,f3,c4]@3 [a2,e3,b3]", N: "[[g2,d3,a3]@3 [a#2,f3,c4]@3 [a2,e3,b3] [c3,g3,d4]@3 [a2,e3,a3]!2]/3",
  O: "[[a2,e3,a3]@2 e3 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 e3 [f2,a3]@6]/2", P: "[d#2,g3] [d2,f3]@3",
  Q: "[f2,a3]@3 [g2,b3]", R: "[[e2,g3]@4 [f2,a3]@2 [d2,f3]@6 [c2,e3]@2 d#3 a#2]/2",
  S: "[g3 f3 c3 a3 [e2,b2,f#3,g3,d4]@8 [a2,e3,b3]@2 [a2,e3,b3]@4 [e2,b2,g3]@4 [c3,g3,d4]@2]/3", // Em7 Asus2 Em Csus2
  T: "[b2,f#3,c#4]@3 [a2,e3,b3]@3 [a2,e3,b3]@2 [a2,e3,b3]@2 [a2,e3,b3]@2", U: "~ [b2,f#3,g3,d4]@3, e2",
  V: "[a2,e3,b3] [a2,e3,b3]@2 ~", // Asus2
})).s("gm_piano").gain(0.25).pan(0.3)

stack(electric_guitar_clean, piano)

More by Zappa Frank