Strudelify

Madame

Zero

KeyC majorTempo114 bpm
0:00/0:00
// Madame — Zero
// 114 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(114/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.

// chords · piano
const piano = note(`<
  A@2 B@2 A@2 B C A@2 B@2 A@2 B C A@2 B C D@2 A@2 B C A@2 B C D@2 E F G H E F G H E F G H E F G H A@2 B@2 A@2 B@2 A@2 B
  C A@2 B C D@2 E F G H E F G H E F G H E F G H A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 I
>`.pickRestart({
  A: "[c3,c4,e4,g4]@2 ~ [g2,g3,c4,e4]@2 ~ [c3,c4,e4,g4]@2 ~@8", // C
  B: "[a#2,a#3,d4,f4]@2 ~ [f2,f3,a#3,d4]@2 ~ [a#2,a#3,d4,f4]@2 ~@8", // A#
  C: "[a#2,a#3,d4,f4]@2 ~ [f2,f3,a#3,d4]@2 ~ [a#2,a#3,d4,f4]@2 ~@4 [a#2,a#3]@2 [b2,b3]@2", // A# B
  D: "[c3,c4,e4,g4]@2 ~ [g2,g3,c4,e4]@2 ~ [c3,c4,e4,g4]@8 ~@2", // C
  E: "[f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~ [f4,a4,d5] ~", // Dm
  F: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // G
  G: "[g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5] ~", // C
  H: "[f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~", // F
  I: "[c4,e4,g4]@2 ~ [g2,g3,c4,e4]@2 ~ [c3,c4,e4,g4]@2 ~@8, c3 ~@15", // C
})).s("gm_piano").gain(0.4).pan(0.4)

// bass · electric bass finger · "BASSO"
const bass = note(`<
  ~@8 A@2 B C A@2 B C A@2 B C D@2 A@2 B C A@2 B C D@2 E F G H I J K L M N O P Q R S T U@2 V@2 A@2 B C A@2 B C A@2 B C
  D@2 E F G H I J K L M N O P Q R S T U@2 V@2 A@2 B C A@2 B C A@2 B C A@2 B C A@2 B C W
>`.pickRestart({
  A: "c2@2 ~ g1@2 ~ c2@2 ~@4 f2 f#2 g2@2", B: "a#1@2 ~ f1@2 ~ a#1@2 ~@4 a2@2 a#2 ~",
  C: "a#1@2 ~ f1@2 ~ a#1@2 ~@4 a2@2 a#2@2", D: "c2@2 ~ g1@2 ~ c2@2 ~@4 f2 f#2 g2 ~", E: "d2@7 a1 d2@8", F: "g1",
  G: "c2@2 g1 c2", H: "f2@7 ~", I: "d2@11 ~ a1@4", J: "g1@6 d2 ~", K: "c2@15 ~", L: "f2@12 e2@3 ~",
  M: "d2@3 ~ a1@3 d2 d2@4 a1@2 d2@2", N: "g1@4 d2@3 ~ g1@3 d2 ~ d2 g1@2", O: "c2@4 g1@3 ~ c2@3 g1@2 g1 c2@2",
  P: "f1@4 c2@4 f1@3 f2 ~ f2 e2@2", Q: "d2@3 ~ a1@4 d2@3 a1@2 a1 d2@2", R: "g1@3 ~ d2@4 g2@2 f2 e2 ~ e2 d2 ~",
  S: "c2@3 ~ g1@4 c2@4 g1@2 c2@2", T: "f2@3 ~ c2@4 f2@4 ~@4", U: "c2@3 g1@3 c2@2 ~@8", V: "a#1@3 f1@3 a#1@2 ~@8",
  W: "c2@2 ~ g1@2 ~ c2@2 ~@8",
})).s("gm_electric_bass_finger").gain(0.44)

// chords · pad warm · "TAPPETO"
const pad_warm = note(`<
  ~@8 A@2 B@2 A@2 B@2 A@2 B@2 A@4 B@2 A@2 B@2 A@2 C@2 D@2 E F G H C@2 D@2 E F G H ~@4 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C@2
  D@2 E F G H C@2 D@2 E F G H ~@4 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 I
>`.pickRestart({
  A: "[c4,e4]/2", B: "[[a#3,d4]@31 ~]/2", C: "[[f4,a4] [g4,b4], d5]/2", D: "[[e4,g4] [f4,a4], c5]/2", E: "[f4,a4,d5]",
  F: "[g4,b4,d5]@15 ~", G: "[e4,g4,c5]", H: "[f4,a4,c5]@12 [e4,g4,c5]@3 ~", I: "[e4,g4,c5] ~",
})).s("gm_pad_warm").gain(0.18)

// other · string ensemble 1 · "STRING"
const string_ensemble_1 = note("<~@4 A@8 ~@39 B@5 C@8 ~@22 D@20 E>".pickRestart({
  A: "c7/8", B: "[~@3 d6@17]/5", C: "[c6@61 ~@3]/8", D: "c6/4", E: "c6 ~@2 c6@2 ~ c6@2 ~@8",
})).s("gm_string_ensemble_1").gain(0.16)

// chords · string ensemble 2 · "SLOWSTRIN"
const string_ensemble_2 = note(`<
  ~@32 A B C D@2 E F G H I J@3 K L@2 ~@18 H I J@3 K L@2 H I J@3 K L@2 ~@25
>`.pickRestart({
  A: "f4", B: "g4@3 d4", C: "e4 d4", D: "[c4@4 b3@2 a3@8 e4 f4]/2", E: "g4@6 c4 d4", F: "e4", G: "a4", H: "[f4,a4]",
  I: "d4@6 c4 d4, g4", J: "[e4 ~ a4, c4@2 ~, ~@16 f4@31 ~]/3", K: "g4 b3, d4", L: "[e4@16 f4@15 ~, c4@31 ~]/2",
})).s("gm_string_ensemble_2").gain(0.26).pan(0.6)

// other · electric guitar muted · "MUTED GT"
const electric_guitar_muted = note("<~@8 A B A B C D E F C D E F G B C D E F C D E F G B ~@75>".pickRestart({
  A: "~@2 c4 ~@2 c4 ~ c4 c4@2 ~ c4 ~ c4!2 ~", B: "~@2 c4 ~@2 c4 ~ c4 c4@2 c4!2 ~ c4!2 ~",
  C: "~@2 c4 ~ c4!2 ~ c4 c4@2 c4!2 ~ c4 c4@2", D: "~@2 c4 ~@2 c4 ~ c4!2 ~@2 c4 ~ c4 c4@2",
  E: "~@2 a#3 ~@2 a#3 ~ a#3 a#3@2 a#3!2 ~ a#3 a#3@2", F: "~@2 a#3 ~ a#3!2 ~ a#3 a#3@2 ~ a#3 ~ a#3 a#3@2",
  G: "~@2 c4 ~@2 c4 ~ c4 c4@2 ~ c4 ~@2 c4 ~",
})).s("gm_electric_guitar_muted").gain(0.24).pan(0.3)

// other · electric guitar muted · "MUTED GT" · soft notes
const electric_guitar_muted_2 = note("<~@13 A ~@3 A ~@2 B C ~ A ~@3 A ~@2 B C ~@75>".pickRestart({
  A: "~@10 c4 ~@5", B: "~@4 c4 ~@8 c4 ~@2", C: "~@4 c4 ~@11",
})).s("gm_electric_guitar_muted").gain(0.12).pan(0.3)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@29 A B C ~@20 D E F G D E F G D E F H B C ~@20 D E F G D E F G D E F G D E F G D E F G I
>`.pickRestart({
  A: "~@6 [a#2,f3] [b2,f#3]", B: "[c3,g3]@5 ~ [a#2,f3] [b2,f#3]", C: "[c3,g3]@7 ~", D: "e3@3 d3@3 e3@3 d3@3 d3@4",
  E: "e3@3 d3@3 e3@3 d3@2 ~ d3@3 ~", F: "d3@3 c3@3 d3@3 c3@3 c3@4", G: "d3@3 c3@3 d3@3 c3@2 ~ c3@3 ~",
  H: "d3@3 c3@3 d3@4 ~@2 [a#2,f3]@2 [b2,f#3]@2", I: "[g3,c4]@2 ~ [c3,g3]@2 ~ [g3,c4]@3 ~@7",
})).s("gm_overdriven_guitar").gain(0.22).pan(0.7)

// other · electric guitar clean · "CLEAN GT"
const electric_guitar_clean = note("<~@86 [c5!2 ~ c5!2 ~ c5!2 ~ c5!6 ~]!20 ~>").s("gm_electric_guitar_clean").gain(0.24)

// other · alto sax · "SAX"
const alto_sax = note("<~@91 A B@2 C D E F G H I J K L M N O>".pickRestart({
  A: "~@2 c5!2 ~ a#4 ~ a#4 ~ a4 ~ a4 ~ g4 ~ g4",
  B: "[~ f4 ~ f4 ~ e4 ~ e4 ~ d4 ~ d4 ~ c4 ~ c4@4 ~ d4 e4 ~ f4 ~ g4 ~ a4 ~ f4 a#4 b4]/2", C: "c5@4 ~@7 c5 d#5 e5 c5 a#4",
  D: "~ c5 ~ c5@2 ~@2 c5 d#5 e5 c5 a#4 ~ c5 ~@2", E: "~@3 c5 d#5 e5 c5 a#4 ~ c5 ~ g4 ~ a#4 ~ f4",
  F: "~ a#4 ~ e4 ~ a#4 ~ d4 ~ a#4 ~ c4@2 ~@3", G: "~@7 c4 d4 c4 e4 c4 f4 c4 g4 c4",
  H: "a4 c4 a#4 c4 b4 c4 c5!2 ~ c5 ~ c5 ~ c5 ~ c5", I: "~ c5 ~ c5 ~ c5 ~ c5 c4 c5 ~ c5 c4 c5 ~ c5",
  J: "c4 c5 ~ c5 d4 c5 ~ c5 e4 c5 ~ c5 f4 c5 ~ c5", K: "g4@5 ~ c5!2 ~ c5 ~@5 g4, f#4 ~@15",
  L: "a#4 c5 ~ c5 ~@3 g4 a#4 c5 ~ c5 ~@4", M: "~@10 g4!2 ~ f4 ~ f4", N: "~ e4 ~ e4 ~ d4 ~ d4 ~ a#4 ~ c5@2 ~@3",
  O: "c5 ~@2 g4 ~@2 c5@2 ~@8",
})).s("gm_alto_sax").gain(0.43).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@8 A@23 B C@7 D A@8 C ~@3 A@14 C@7 D A@8 C ~@3 A@19 E F>".pickRestart({
  A: "x!2", B: "x ~@5 x ~@4 x ~@4", C: "x", D: "x ~@10 x ~@4", E: "x ~@8 x ~@6", F: "x ~@2 x ~@2 x ~@9",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@7 A B@13 C B@9 D ~@7 A B@8 ~@3 A B@13 C ~@7 A B@8 ~@3 A B@20 E>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@7 x!3 ~", D: "~@4 x ~@4 x!2 ~@5", E: "~@3 x ~@12",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<A@7 ~@24 B ~ C ~ C ~@2 D@2 ~ C ~ C ~@2 D@2 ~@27 C ~ C ~@2 D@2 ~@23 E F>".pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@5 x ~ x", D: "x!2 ~@14", E: "~@5 x ~@2", F: "~@3 x ~@12",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@24 B@8 C@8 ~@4 A@4 D A@7 D A B@8 C@6 E@2 ~@4 A@20 ~>".pickRestart({
  A: "x!3 ~", B: "~ x!3 ~ x!3 ~ x!3 ~ x!3", C: "x!8", D: "~ x!2 ~", E: "~ x!7",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<A@7 ~@24 B ~ C ~ C ~@3 D ~ C ~ C ~@29 E ~ C ~ C ~@27 F ~>".pickRestart({
  A: "~@3 x", B: "~@12 x!2 ~@2", C: "~@5 x ~@2", D: "~@13 x!2 ~", E: "~@13 x ~@2", F: "~@9 x ~@5 x",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@23 ~ B@8 ~@12 A@14 B@8 ~@12 A@19 C ~>".pickRestart({
  A: "~@3 x", B: "x!4", C: "~@13 x ~@2",
})).gain(0.36)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@8 [x!16]!24 ~@20 [x!16]!14 ~@20 [~ x!15] [x!16]!19 ~>").gain(0.18)

// drums · splash
const splash = s("cr").struct(`<
  ~@8 A ~@3 A ~@7 A ~ A ~@7 A B A ~@7 A ~@5 A@3 ~@3 A ~@3 A ~@7 A ~ A ~@7 A ~@5 A@3 ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 B
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4",
})).gain(0.36)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@8
  [x ~@3 x ~@3 x ~@2 x!2 ~@3]!24
  ~@20
  [x ~@3 x ~@3 x ~@2 x!2 ~@3]!14
  ~@20
  [x ~@3 x ~@3 x ~@2 x!2 ~@3]!20
  ~
>`).gain(0.36)

stack(
  piano, bass, pad_warm, string_ensemble_1, string_ensemble_2, electric_guitar_muted, electric_guitar_muted_2,
  overdriven_guitar, electric_guitar_clean, alto_sax, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom,
  tambourine, splash, cowbell
)

More by Zero