Strudelify
KeyA majorTempo120 bpm
0:00/0:00
// EWI — Moon Hooch
// 120 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5385199; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · baritone sax · "Baritone Saxophone"
const bass = note(`<
  A B A C A D A C A B A C A D A C ~@8 E F E G E H E G E F E G E H E I J K L M J K L M N O P Q N O R S E F E F E F E F E
  F E F E F E F ~@8 T U T U V U T U T U T U V U T U J K L W J K L M N O P Q N O R S T U T U V U T U T U T U V U T U
>`.pickRestart({
  A: "~ e1 ~ e1 ~ e1 ~ e1", B: "~ e1 ~ e1 ~ g1 ~ a1", C: "~ e1 ~ e1 ~ g1 ~ d2", D: "~ e1 ~ e1 ~ a1 ~ a2",
  E: "~ d#1 ~ d#1 ~ d#1 ~ d#1", F: "~ d#1 ~ d#1 ~ f#1 ~ g#1", G: "~ d#1 ~ d#1 ~ f#1 ~ c#2",
  H: "~ d#1 ~ d#1 ~ g#1 ~ g#2", I: "~@2 d#1@2 ~@2 d#1@2 c#2@2 c#2!2 c#2@4", J: "f#1@2 ~ f#1@2 ~ f#1@2 ~@8",
  K: "g#1@2 ~ g#1@2 ~ g#1@2 ~@8", L: "a#1@2 ~ a#1@2 ~ a#1@2 ~@8", M: "f1@2 ~ f1@2 ~ f1@2 ~@8",
  N: "f#1!4 f#2@2 f#2@2 f#1!4 f#2@2 f#2@2", O: "g#1!4 g#2@2 g#2@2 g#1!4 g#2@2 g#2@2",
  P: "a#1!4 a#2@2 a#2@2 a#1!4 a#2@2 a#2@2", Q: "f1!4 f2@2 f2@2 f1!4 f2@2 f2@2",
  R: "f#1 g1 ~ g#1 a1 a#1 ~ b1 c2 c#2 ~ d2 d#2 e2 ~ f2", S: "f#2 g2 g#2 a2 a#2 b2 c3 c#3 d3 d#3 e3 f3 f#3 g3 g#3@2",
  T: "d#1 a1", U: "f#1@2 f1 c#2", V: "d#1@2 d#1@2 ~ d#1@3 a1@8", W: "f1@2 ~ f1@2 ~ f1@2 ~@4 f2@4",
})).s("gm_baritone_sax").gain(0.45)

// bass · baritone sax · "Baritone Saxophone" · soft notes
const bass_soft = note(`<
  ~@72
  [d#1!4 ~@12]!6
  [d#1 e1 ~ f1 f#1 g1 ~ g#1 a1 a#1 ~ b1 c2 c#2 ~ d2]
  [d#2 e2 f2 ~ f#2 g2 g#2 a2 a#2 b2 ~ c3 c#3 d3 d#3@2]
  ~@48
>`).s("gm_baritone_sax").gain(0.25)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@56 A B C D E B C D A B C D E B C D A B C D E B C D A B C D F B C D A B C D F B C D ~@16 A B C D E B C D A B C D E B
  C D
>`.pickRestart({
  A: "f#5 f#5@3 ~@2 c#5@2 a4@2 a5@2 f#4@2 f#4@2", B: "~ f#4@2 f4@2 c#4@2 a4@2 c#4@3 f#4 f#4@3",
  C: "c#5 c#5@3 a4@2 a5@2 f#4@2 f#4@2 ~ f#4@2 f4", D: "~ c#4@2 a4@2 c#4@2 g#4@2 f#4@2 d4@2 d#4@2 f4",
  E: "f#5 d#5 ~ c#4 a4 a5 f#4!2", F: "f#5@2 d#5@2 ~ c#4@3 a4@2 a5@2 f#4@2 f#4@2",
})).s("gm_tenor_sax").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A@16 ~@8 A@16 ~@16 A@16 ~@8 B C D E F D@3 B C D E F D@3 ~@16 B C D E F D@3 B C D E F D@3
>`.pickRestart({
  A: "x!4", B: "x ~ x!3 ~ x!2", C: "x ~ x!2 ~@4", D: "x ~ x!3 ~@3", E: "x!3 ~@5", F: "x ~ x ~@2 x ~@2 x ~@7",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct(`<
  A@23 B A@24 C@7 D A@23 C E@3 F E@3 G E@3 F E@3 G A@8 C@7 ~ E@3 F E@3 G E@3 F E@3 H
>`.pickRestart({
  A: "~ x ~ x", B: "x!4 ~@12", C: "x!16", D: "~@3 x", E: "~ x", F: "~@8 x ~@3 x!4", G: "~@8 x!2 ~@2 x!4", H: "~@12 x!4",
})).gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@87 [~@10 x!2 ~@4] ~@7 [~@10 x!2 ~@4] ~@23 [~@10 x!2 ~@4] ~@7 [~@10 x!2 ~@4]>")
  .gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@7 A B@7 C B@3 A B@2 ~ A B@7 A B@7 ~@15 D A B@3 E B@3 A B@3 E B@3 ~@6 F ~@5 G ~@7 G ~@23 G ~@7 G ~@3
>`.pickRestart({
  A: "~ x!3 ~ x!7 ~ x!3", B: "x!4 ~ x!7 ~ x!3", C: "~@5 x!7 ~ x!3", D: "x!2 ~@14", E: "x ~ x ~@2 x!7 ~ x!3", F: "x!8",
  G: "x ~ x ~@2 x ~@10",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@40
  [x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2]!8
  ~@7
  [~@3 x!2 ~ x ~ x ~ x ~@5]
  ~@40
  [x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2]!8
  ~@24
>`).gain(0.16)

// drums · crash
const crash = s("cr").struct(`<
  A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@23 A ~@7 A ~@15 B@3 C D B@2 E B@3 C D B@2 E ~@16 B@3 C D B@2 E B@3 C D B@2 C
>`.pickRestart({
  A: "x", B: "x!4", C: "x!3 ~", D: "~@2 x!2", E: "x!2 ~@2",
})).gain(0.32)

stack(bass, bass_soft, tenor_sax, kick, snare, low_tom, hihat, open_hat, crash)