Strudelify

Squonk

Genesis

KeyF majorTempo94 bpm
0:00/0:00
// Squonk — Genesis
// 94 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 34, 4/4 at bar 42) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(94/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.

// bass · fretless bass · "bass"
const bass = note(`<
  A B@8 C D C D B@8 C D C E F@7 G H I J K L M N O P F@8 Q@9 R Q R F@7 S T U V W X Y Z AA AB@6 ~@3 AC
>`.pickRestart({
  A: "~@8 a1@4 ~@3 a1", B: "a1@2 a1@4 ~@2 a1@4 ~@3 a1", C: "a1@2 a1@4 ~@2 e1@4 ~@3 e1", D: "e1@2 e1@4 ~@2 a1@4 ~@3 a1",
  E: "e1@2 e1@4 ~@2 a1!4 a2 ~@3", F: "a1!4 a2 ~@3 a1!4 a2 ~@3", G: "[f2,c3] f2@5 g2@6 ~@2 g2@2, ~@3 f2",
  H: "g2@2 ~ [d2,a2]@2 ~@3", I: "[c2,g2]!2 [d2,g2]!2", J: "[e2,a2] ~@3", K: "[f2,bb2] ~@3", L: "[f2,c3]!2 [g2,c3] ~",
  M: "~ [d2,g2] [e2,a2] ~", N: "~@2 [f2,bb2] ~", O: "~@2 [f2,c3]!2", P: "[g2,c3] ~@3", Q: "a1@4 ~@3 a1 a1@2 a1@4 ~@2",
  R: "e1@4 ~@3 e1 e1@2 e1@4 ~@2", S: "a1!4 a1@4 a1@4 a1@4, ~@4 a2 ~@11", T: "gb2@2 gb2!2", U: "db2@2 db2!2",
  V: "e2@2 e2!2", W: "b1@2 b1!2", X: "gb2@2 ~@3 gb2@2 ~", Y: "db2@2 db2@3 ~ db2@2", Z: "e2@3 e2 e2@2 ~@2",
  AA: "~@2 gb2!2, b1@5 ~@3",
  AB: "[gb2@3 gb2 gb2@2 gb2@3 gb2 gb2@2 ~@4 gb2@3 gb2 gb2@2 gb2@3 gb2 gb2@2 ~@4 gb2@3 gb2 gb2@2 gb2@3 gb2 gb2@2 ~@4 gb2@3 gb2 gb2@2 gb2@3 gb2 gb2@2 ~@4 gb2@3 gb2 gb2@2 gb2@3 gb2 gb2@2 ~@4 gb2@3 gb2 ~@12, ~@3 gb2 ~@3 gb2 ~@3 gb2 ~@3 gb2 ~@3 gb2 ~@4, ~@7 db2@2 ~@6 db2@2 ~@6 db2@2 ~@6 db2@2 ~@6 db2@2 ~@7]/6",
  AC: "gb1 ~@3",
})).s("gm_fretless_bass").gain(0.41)

// bass · fretless bass · "bass" · soft notes
const bass_soft = note("<~@83 A@5>".pickRestart({
  A: "[~@4 gb2@2 gb2@3 gb2 gb2@2 ~@4 gb2@3 gb2 gb2@2 gb2@3 gb2 gb2@2 ~@4 gb2@3 gb2 gb2@2 gb2@3 gb2 gb2@2 ~@4 gb2@3 gb2 gb2@2 gb2@3 gb2 gb2@2 ~@2 db2@4 ~@14, ~@3 gb2 ~@3 gb2 ~@3 gb2 ~@3 gb2 ~@4, ~@7 db2@2 ~@6 db2@2 ~@6 db2@2 ~@15]/5",
})).s("gm_fretless_bass").gain(0.2)

// chords · distortion guitar · "chord"
const distortion_guitar = note(`<
  A B@6 C@6 B@6 D@7 E@4 F@3 G H I J K L M N O P@2 Q@2 P@2 Q@2 R@8 S@4 P@2 Q@2 P@2 T@2 U V W X U V W X ~@10
>`.pickRestart({
  A: "~@4 [a4,c5]@2 [a4,c5] ~", B: "[~@6 [g4,b4]@13 ~@5 [a4,c5]@4 [a4,c5]@2 ~@2, ~ e4@2 e4@2 ~@11, ~ [a4,c5] ~@6]/2",
  C: "[~@6 [g4,b4]@13 ~@9 [gb4,a4,d5]@2 [gb4,a4,d5]@4 ~@4 [e4,ab4,b4]@13 ~@9 [gb4,a4,d5]@2 [gb4,a4,d5]@4 ~@4 [e4,ab4,b4]@13 ~@5 [a4,c5]@4 [a4,c5]@2 ~@2, ~ e4@2 e4@2 ~@7 [gb4,a4,d5]@2 ~@4 [gb4,a4,d5]@2 ~@8 [gb4,a4,d5]@2 ~@4 [gb4,a4,d5]@2 ~@12, ~@2 [a4,c5]@2 ~@9 d4@2 ~@2 d4@2 ~@10 d4@2 ~@2 d4@2 ~@13]/6", // G D E D E Am D Am
  D: "[~@6 [g4,b4]@13 ~@9 [gb4,a4,d5]@2 [gb4,a4,d5]@4 ~@4 [e4,ab4,b4]@13 ~@9 [gb4,a4,d5]@2 [gb4,a4,d5]@4 ~@4 [e4,ab4,b4]@13 ~@5 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@4 [b2,e3]@4 [g2,e3]@4 [g2,e3]@4 [a2,d3]@2, ~ e4@2 e4@2 ~@7 [gb4,a4,d5]@2 ~@4 [gb4,a4,d5]@2 ~@8 [gb4,a4,d5]@2 ~@4 [gb4,a4,d5]@2 ~@20, ~@2 [a4,c5]@2 ~@9 d4@2 ~@2 d4@2 ~@10 d4@2 ~@2 d4@2 ~@21]/7", // G D E D E A5 E5 C …
  E: "[[a2,d3]@7 ~ [a2,e3]@4 ~@2 [g2,d3]@4 ~@4 [d2,a2]@4 ~@4 [d2,a2]@8 ~@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@4 [b2,e3]@4 [g2,e3]@4 [g2,e3]@4 [a2,d3]@2]/4", // D5 A5 G5 D5 A5 E5 C D5
  F: "[[a2,d3]@7 ~ [a2,e3]@4 ~@2 [g2,d3]@4 ~@4 [d2,a2]@4 ~@4 [f2,c3]@8 [g2,d3]@4 ~@4 [g2,d3]@2, ~@11 [f2,c3]]/3", // D5 A5 G5 D5 F5 G5 F5
  G: "[g2,d3]@2 ~ [a2,d3]@2 ~@3", H: "[g2,c3,e3] ~ [b2,d3,g3] ~", I: "[a2,c3,e3,a3] ~@3", J: "[bb2,d3,f3,bb3] ~@3",
  K: "[f3,a3,c4] ~ [e3,g3,c4] ~", L: "[e3,g3,c4] [g3,b3,d4] [a2,c3,e3,a3] ~", M: "~@2 [bb2,d3,f3,bb3] ~",
  N: "~@2 [f3,a3,c4] ~", O: "[e3,g3,c4] ~ [e3,g3,c4] [g3,b3,d4]",
  P: "[[a2,e3]@2 [a2,e3]@2 [a2,e3]@2 [a2,e3]@4 [b2,e3]@4 [g2,e3]@4 [g2,e3]@4 [a2,d3]@2 [a2,d3]@7 ~]/2", // A5 E5 C D5
  Q: "[[a2,e3]@2 ~ [g2,d3]@2 ~@2 [d2,a2]@2 ~@2 [d2,a2]@4 ~]/2", // A5 G5 D5
  R: "[[a4,c5]@4 [a4,c5]@2 ~@8 [g4,b4]@13 ~@5, ~@5 e4@2 e4@2 ~@7, ~@3 [a4,c5] ~@4]/2", // Am G Am
  S: "[~@4 [gb4,a4,d5]@2 [gb4,a4,d5]@4 ~@4 [e4,ab4,b4]@13 ~@5, [gb4,a4,d5] ~@2 [gb4,a4,d5] ~@4, ~ d4@2 ~@2 d4@2 ~@9]/2", // D E D
  T: "[[a2,e3]@2 ~ [g2,d3]@2 ~@2 [d2,a2]@2 ~@7]/2", U: "[db3,gb3,bb3,db4] ~@3", V: "[db3,e3,ab3,db4] ~@3",
  W: "[b2,e3,ab3,b3] ~@3", X: "[b2,eb3,gb3,b3] ~@3",
})).s("gm_distortion_guitar").gain(0.26).pan(0.7)

// chords · distortion guitar · "chord" · soft notes
const distortion_guitar_soft = note("<A@2 B@6 C ~@3 A@2 B@6 C ~@29 D E D E D E D E ~@30>".pickRestart({
  A: "[~@5 e4@2 [a4,c5]@2 ~@7]/2", B: "[e4 ~ e4 ~@7 e4@4 [a4,c5]@4 ~@14]/2", C: "e4 ~ e4 ~@13",
  D: "~ e4@2 [a4,c5]@2 ~@3", E: "~@8 e4 ~ e4 ~@5",
})).s("gm_distortion_guitar").gain(0.1).pan(0.7)

// drums · kick
const kick = s("bd").struct("<A B@30 C ~@2 B@36 D B@3 D B@3 E@9 ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "~@2 x!2 ~@2 x!2", E: "~@2 x ~@2 x ~@2",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@12 A B@7 C ~@3 D ~@25 E@12 ~@7 E@9 ~@10>".pickRestart({
  A: "~@2 x!2 ~@2 x!3 ~@7", B: "x!2 ~@2 x ~@3", C: "x!2 ~@6", D: "~@2 x!2 ~@2 x!2 ~@8", E: "x ~@3 x!2 ~@2",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~@12 A B@7 ~@4 C ~@25 D@12 ~@7 D@9 ~@10>".pickRestart({
  A: "~@4 x!2 ~@9 x", B: "~@15 x", C: "~@4 x!2 ~@10", D: "~@7 x ~@8",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<A B@11 C@8 B@4 D E@6 F G ~ H@8 E@8 I@12 E@7 J K L M N K L M N O@9 P>".pickRestart({
  A: "~ x", B: "x!2 ~@2 x ~@3", C: "x ~ x ~@5 x ~@6 x", D: "x ~ x ~@5 x!4 ~ x!3", E: "x!4 ~ x!7 ~ x!3", F: "x!4 ~ x!11",
  G: "x!8 ~@8", H: "x ~@3 x!2 ~@2", I: "x ~@6 x!2 ~ x ~@5", J: "x!16", K: "x ~@3 x ~@2 x!2 ~ x ~@5",
  L: "x ~ x ~@3 x!3 ~ x ~ x ~ x ~", M: "x ~@6 x!2 ~ x ~@3 x!2", N: "x ~@6 x!2 ~ x ~@3 x ~",
  O: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", P: "x",
})).gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@33 [~@7 x] ~@54>").gain(0.41)

// drums · china
const china = s("cr").struct("<A B@11 C D@7 E B@3 C D@6 F ~@2 B@8 D@28 B@9 E@8 ~>".pickRestart({
  A: "~@9 x ~@2 x ~@3", B: "x!4", C: "x!2 ~ x", D: "~ x ~ x", E: "~ x!3", F: "~ x ~@2",
})).gain(0.41)

// drums · ride bell
const ride_bell = s("rd").struct("<A B@11 C B@11 D E@6 F ~ G B@8 E@8 B@12 E@7 B@9 H@9 ~>".pickRestart({
  A: "~@2 x!2", B: "x!4", C: "x!5 ~ x ~", D: "x!2 ~ x", E: "~ x ~ x", F: "~ x ~@2", G: "~@12 x!2 ~@2", H: "~@7 x",
})).gain(0.41)

// drums · bongos
const bongos = s("bongo:18").struct("<~@32 [~@2 x!2] [x!4] ~@54>").gain(1.08)

stack(
  bass, bass_soft, distortion_guitar, distortion_guitar_soft, kick, low_tom, hihat, mid_tom, high_tom, china, ride_bell,
  bongos
)

More by Genesis