Strudelify

Under the Moon of Love

Showaddywaddy

KeyD♭ majorTempo174 bpm
0:00/0:00
// Under the Moon of Love — Showaddywaddy
// 174 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 123 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(174/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 · piano · "Ges./Pia"
const piano = note(`<
  ~@11 A@2 B C D E B F@3 G H I J@2 ~ A@2 B C D E B F@3 G H I J@2 K@2 L@3 M N O P Q@2 B C D E B F@3 G H I J@2 ~@12 R@3 G
  H I J@2 S T L@3 M N O P U@2 B C D E B V W X B C D E B V W X B C D E B V ~@4
>`.pickRestart({
  A: "[~@6 f5@2 ~@4 f5@2 ~@4 f5@5 ~ f5@4 eb5@2 ~@3 db5@4 ~@11, ~@23 eb5@2 ~@23]/2", B: "~@3 f5 ~@2 f5@5 eb5",
  C: "~@3 eb5@2 ~@4 db5@4 ~@11, f5@5 ~@19", D: "~@6 f5@2 ~@4 f5@3 ~@9", E: "f5@6 eb5@3 db5@5 ~@10",
  F: "[f5@4 eb5@2 ~@3 db5@5 ~@2 [db5,db6]@2 [eb5,eb6]@4 ~@2 [eb5,eb6]@4 [db5,db6]@3 ~@11 [eb5,eb6]@4 ~@2 [eb5,eb6]@4 [db5,db6]@3 ~@11 [db5,db6]@5 ~, ~@11 [f5,f6]@2 ~@10 [f5,f6]@2 ~@11]/3", // Db Eb Db Eb Db F
  G: "[f5,f6]@11 ~ [e5,e6]@5 ~ [eb5,eb6]@4 ~@2", H: "[d5,d6]@5 ~ [f5,f6]@3 [d5,d6]@4 ~@2 [f5,f6]@3 [d5,d6]@5 ~",
  I: "[gb5,gb6]@5 ~ [eb5,eb6]@2 ~ [gb5,gb6]@6 [eb5,eb6]@3 [gb5,gb6]@5 ~", // Gb Eb Gb Eb Gb
  J: "[[ab5,ab6]@6 [gb5,gb6]@3 ~ [gb5,gb6]@2 ~@3 [db5,db6]@4 ~@2 [db5,db6]@5 ~@4 [ab4,db5,f5]@4 ~@2 [bb4,db5,gb5]@3 [bb4,db5,gb5]@4 ~@2 [ab4,db5,f5]@3, ~@12 [f5,f6]@5 ~@31]/2", // Ab Gb Db Gb Db F
  K: "[~@16 db5 ~ db5@2 ~@4 bb4@6 db5@4 ~@2 db5@4 ~@8, ~@23 db5@3 ~@22]/2",
  L: "[bb4@5 ~ db5@2 ~@2 db5@4 ~@2 db5@2 eb5@5 f5@17 db5@2 bb4@4 ab4@16 ~@4 db5@3 ~ db5@2]/3",
  M: "eb5@3 eb5@4 ~@3 eb5@7 ~@7", N: "f5@4 eb5@5 db5@3 f5@4 eb5@5 db5@3", O: "ab5",
  P: "ab3@3 ~ ab3@2 gb3@3 ~ gb3@2 f3@2 ~@2 f3@2 eb3@2 ~@2 eb3@2",
  Q: "[~@6 f5@2 ~@4 f5@2 ~@4 f5@5 ~ f5@4 eb5@2 ~@3 db5@4 ~@11, ab2@19 ~@5, ~@23 eb5@2 ~@23]/2",
  R: "[~@16 [db5,db6]@2 [eb5,eb6]@4 ~@2 [eb5,eb6]@4 [db5,db6]@3 ~@11 [eb5,eb6]@4 ~@2 [eb5,eb6]@4 [db5,db6]@3 ~@11 [db5,db6]@5 ~, ~@11 [f5,f6]@2 ~@10 [f5,f6]@2 ~@11]/3", // Db Eb Db Eb Db F
  S: "~@16 db5 ~ db5@2 ~@2 db5@2", T: "bb4@3 db5@2 ~ db5@2 ~@4",
  U: "[~@6 f5@2 ~@4 f5@2 ~@4 f5@4 eb5@2 f5@4 eb5@2 ~@3 db5@4 ~@11, ab2@19 ~@5]/2", V: "f5@4 eb5@2 ~@3 db5@5 ~@10",
  W: "~@3 f5 ~@2 f5 ~@2 f5@2 eb5", X: "f5@4 eb5@2 ~@3 db5@4 ~@11",
})).s("gm_piano").gain(0.72)

// chords · brass section · "BrassPia"
const brass_section = note(`<
  ~@19 A B C D ~@2 E ~@9 A B C D ~@2 E ~@4 F ~@12 A B C D ~@2 E G ~@3 G ~@8 A B C D ~@2 E ~@4 F ~@31 H
>`.pickRestart({
  A: "~@3 [bb4,db5,gb5]@2 ~ [bb4,db5,gb5]@2 ~@4", B: "~@6 [bb4,eb5,g5]@4 ~@2 [bb4,eb5,g5]@5 ~@7",
  C: "[db5,db6]@2 [c5,c6] [b4,b5]", D: "[bb4,bb5]@3 ~ [bb4,bb5]@2 ~ [bb4,bb5] [f4,f5]@2 ~@2, ~@3 [f4,f5]@2 ~@7",
  E: "~@6 [db5,f5,ab5]@4 ~@2 [db5,gb5,bb5]@3 [db5,gb5,bb5]@5 ~ [db5,f5,ab5]@3", // Db Gb Db
  F: "~@4 [bb4,bb5]@2 [ab4,ab5]@4 [f4,f5]@2 [ab4,ab5]@6 [bb4,bb5]@5 ~", // Bb Ab F Ab Bb
  G: "~@4 [ab4,eb5,ab5] ~ [ab4,eb5,ab5] ~@3 [ab4,eb5,ab5] ~ [ab4,eb5,ab5] ~@3 [ab4,eb5,ab5] ~ [ab4,eb5,ab5] ~@3 [ab4,eb5,ab5]@2", // Ab5
  H: "[db5,ab5,db6]@5 ~@19, [e5,f5] ~@23", // Db5 Fmaj7
})).s("gm_brass_section").gain(0.5)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@2 A B C D E B F G H B C D E B F G I J K L M N O P Q B C D E B F G I J K L M N O P R S@2 T@2 U V W X ~ Y D E B F G I
  J K L M N O P Z ~@3 AA B C D E B F G I J K L M N O P R S@2 T@2 U V W X ~ Y D E B F G I B C D E B F G I B C D E B F G I
  ~@3 AB
>`.pickRestart({
  A: "~@4 ab1 ~ ab1@2 ~@2 ab1 ~ ab1@2 ~@2 ab1@2 bb1@4 c2@2", B: "db2 ~@2 ab1 ~@2",
  C: "db2@4 ~@8 ab1@3 ~ g1@2 ab1@3 ~ a1@2", D: "bb1@3 ~@9 f1@4 ~@8", E: "bb1@2 ~@4 f1@2 ab1 bb1@2 c2",
  F: "db2@3 ~@9 ab1@4 ~@2 ab1@4 a1@2, ~@4 g1 ~", G: "bb1 ~@3 f1 ~@3", H: "bb1@3 ~@9 f1@4 ab1@2 bb1@4 c2@2",
  I: "bb1@3 ~@9 f1@3 ~ f1 ~ f1@3 ~ f1@2", J: "~@4 gb1 ~ gb1@4 ~@2 gb1@4 ~@8", K: "~@4 g1 ~ g1@4 ~@2 g1@4 ~@8",
  L: "db2 ~@2 db2@3 c2@3 b1@3", M: "bb1@5 ~@7 f1@6 ~@6", N: "eb2@3 f2@3 gb2@3 g2@2 g2", O: "ab2 gb2 f2 eb2",
  P: "db2@3 ~@3 f2@4 ~@2 gb2@2 ~ gb2@5 ~ db2@3", Q: "ab1@2 ~@2 ab1 ~ ab1@2 ~@2 ab1 ~ ab1@3 ~ ab1@2 bb1@4 c2@2",
  R: "~@4 db2 ~ db2@3 ~ db2@2 db2@2 ~@2 db2@2 eb2@4 f2@2", S: "gb2@2 ~@3 gb2 db2@2 ~@4", T: "db2@2 ~@3 db2 ab1@2 ~@4",
  U: "eb2@4 ~@6 eb2@2 bb1@3 ~@9", V: "eb2@2 ~@3 eb2 bb1@2 ~@4",
  W: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", X: "ab2 ~@11",
  Y: "~@16 g1@2 ab1@3 ~ a1@2", Z: "~@4 ab1 ~ ab1@2 ~@2 ab1 ~ ab1@3 ~ ab1 ~ ab1@3 ~ ab1@2",
  AA: "~@4 ab1 ~ ab1@2 ~@2 ab1 ~ ab1@3 ~ ab1 ~ bb1@3 ~ c2@2", AB: "db2 ~@3",
})).s("gm_acoustic_bass").gain(0.56)

// chords · acoustic guitar steel · "Gitarre"
const acoustic_guitar_steel = note(`<
  ~@2 A B C D E F C D E B C D E F C D E G H I J K L M N B C D E F C D E G H I J K L M O P Q R@2 S T U V ~ W D E F C D E
  G H I J K L M X ~@3 X B C D E F C D E G H I J K L M O P Q R@2 S T U V ~ W D E F C D E B C D E F C D E B C D E F C D E
  ~@3 Y
>`.pickRestart({
  A: "~@4 [ab3,eb4]@2 [ab3,eb4]@2 ~@2 [ab3,eb4] ~ [ab3,eb4]@3 ~ [ab3,eb4]@2 [ab3,eb4]@3 ~ [ab3,eb4]@2", // Ab5
  B: "[ab3,db4]@2 ~@4 [f4,ab4,db5]@3 ~@9 [f4,ab4,db5]@3 ~@3", C: "~@6 [f4,ab4,db5]@3 ~@9 [f4,ab4,db5]@4 ~@2",
  D: "~@6 [f4,bb4,db5]@4 ~@8 [f4,bb4,db5]@3 ~@3", E: "~@6 [f4,bb4,db5]@3 ~@9 [f4,bb4,db5]@4 ~@2",
  F: "~@2 [f4,ab4,db5] ~@3 [f4,ab4,db5] ~", G: "~@4 [db4,gb4,bb4] ~ [db4,gb4,bb4]@3 ~@3 [db4,gb4,bb4]@4 ~@8",
  H: "~@4 [eb4,g4,bb4] ~ [eb4,g4,bb4]@4 ~@2 [eb4,g4,bb4]@5 ~@7", I: "~@3 [db4,f4,ab4]@2 ~@4 [db4,f4,ab4]@2 ~",
  J: "~@3 [d4,f4,bb4]@2 ~@4 [d4,f4,bb4]@2 ~", K: "~@6 [db4,gb4,bb4]@4 ~@8 [db4,gb4,bb4]@3 ~@3",
  L: "~@3 [eb4,ab4,c5]@2 ~@4 [eb4,ab4,c5]@2 ~", // Ab
  M: "~@6 [f4,ab4,db5]@3 ~@3 [gb4,bb4,db5]@2 ~ [gb4,bb4,db5]@3 ~@3 [f4,ab4,db5]@3", // Db Gb Db
  N: "eb4@2 ~@2 [ab3,eb4] ~ [ab3,eb4]@2 ~@2 [ab3,eb4] ~ [ab3,eb4]@3 ~ [ab3,eb4]@2 [ab3,eb4]@3 ~ [ab3,eb4]@2", // Ab5
  O: "~@4 [f4,ab4,db5] ~ [f4,ab4,db5]@3 ~ [f4,ab4,db5] ~ [f4,ab4,db5]@3 ~ [f4,ab4,db5] ~ [f4,ab4,db5]@2 ~@2 [f4,ab4,db5]@2", // Db
  P: "~@2 [gb4,bb4,db5] ~@3 [gb4,bb4,db5] ~", Q: "~@3 [gb4,bb4,db5]@2 ~@4 [gb4,bb4,db5]@2 ~",
  R: "~@3 [f4,ab4,db5]@2 ~@4 [f4,ab4,db5]@2 ~", S: "~@3 [g4,bb4,eb5]@2 ~@4 [g4,bb4,eb5]@2 ~",
  T: "~@6 [g4,bb4,eb5]@4 ~@8 [g4,bb4,eb5]@3 ~@3", U: "~@2 [eb4,ab4,c5] ~@3 [eb4,ab4,c5] ~", V: "[eb4,ab4,c5] ~@5",
  W: "~@9 [f4,ab4,db5]@2 ~", // Db
  X: "~@4 [ab3,eb4] ~ [ab3,eb4]@2 ~@2 [ab3,eb4] ~ [ab3,eb4]@3 ~ [ab3,eb4]@2 [ab3,eb4]@3 ~ [ab3,eb4]@2", // Ab5
  Y: "[f4,ab4,db5] ~@3", // Db
})).s("gm_acoustic_guitar_steel").gain(0.43)

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

// drums · clap
const clap = s("cp").struct(`<
  ~@3 A@16 B@2 A@4 C ~ A@8 B@2 A@4 C ~@9 A@8 B@2 A@4 C ~@5 A@8 B@2 A@4 C ~@9 A@24 ~@4
>`.pickRestart({
  A: "~ x ~ x", B: "~ x!2 ~", C: "~@2 x ~ x!2 ~ x",
})).gain(0.42)

// drums · snare
const snare = s("sd").struct(`<
  A@2 B C@7 D C@7 D E@2 C@4 F G C@7 D E@2 C@4 F H ~@6 I B ~ J C@5 D E@2 C@4 F H ~@3 H C@7 D E@2 C@4 F H ~@6 I B ~ J C@5
  D C@7 D C@7 D ~@3 B
>`.pickRestart({
  A: "x!6 ~@6", B: "x", C: "~ x ~ x", D: "~@3 x ~@4 x!2 ~ x", E: "~ x!2 ~", F: "~@2 x ~ x!2 ~ x",
  G: "x ~@3 x ~ x ~@3 x ~ x ~@3 x ~@2 x ~@2 x ~", H: "~@2 x!2 ~ x!2 ~ x!2 ~ x", I: "x!12", J: "~@3 x",
})).gain(0.42)

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

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

// drums · high tom
const high_tom = s("ht").struct("<[x!6 ~@6]!2 x ~@64 [x!6 ~@6]!3 x ~@48 [x!6 ~@6]!3 x>").gain(0.42)

stack(piano, brass_section, bass, acoustic_guitar_steel, kick, clap, snare, hihat, low_tom, high_tom)

More by Showaddywaddy