Strudelify

Madchen Madchen

G. G. Anderson

KeyE majorTempo139 bpm
0:00/0:00
// Madchen Madchen — G. G. Anderson
// 139 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(139/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 · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@2 A B A B C D C D E F E G C D C D E F E G H I J G H I J G J G A B A B C D C D E F E G C D C D E F E G H I J G H I J
  G J G A B A B K L G M K L G M G M N O K L G M K L G M G M N O N O N O N O N O N O N P
>`.pickRestart({
  A: "e2@4 b1@4 c#2@4 g#1@3 ~", B: "a1@2 e1@2 b1@2 f#1 b1", C: "e2 b1 e2 b1", D: "c#2@2 g#1@2 c#2@2 g#1 b1",
  E: "a1 e1 a1 e1", F: "d2@2 f#1 g#1 a1@2 e1@2", G: "b1@2 f#1@2 b1@2 f#1 b1", H: "e2@2 e1@2 e2@2 b1 e2",
  I: "c#2@4 g#1@4 c#2@3 ~ g#1@2 c#2@2", J: "a1@2 e1@2 a1@2 e1 a1", K: "f#2@2 f#1@2 f#2@2 c#2 f#2",
  L: "d#2@4 a#1@4 d#2@3 ~ a#1@2 d#2@2", M: "c#2@2 g#1@2 c#2@2 g#1 c#2", N: "f#2@4 c#2@4 d#2@4 a#1@3 ~",
  O: "b1@2 f#1@2 c#2@2 g#1 c#2", P: "b1 f#1 c#2 ~",
})).s("gm_electric_bass_finger").gain(0.44)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~ A B@2 C@2 D E D E F G H I D E D E F G H I J@3 I J@3 I K@2 L@2 C@2 D E D E F G H I D E D E F G H I J@3 I J@3 I K@2
  L@2 C@2 M@3 N M@3 N O@2 P@2 M@3 N M@3 N O@2 P@12 Q@2
>`.pickRestart({
  A: "~@14 [e5,f#5,g#5] [a5,b5,c#6]", B: "[b4 ~ a4 [d#4,f#4,b4,d#6], [e4,e6]@3 ~, g#4 ~, d6 ~@7 c#5@16 ~@8]/2",
  C: "[b4@4 ~@4 a4@3 [d#4,f#4,b4]@4 ~, [e4,e6]@11 ~@5, g#4 ~, ~@4 c#5@7 ~@5]/2", D: "[e4,g#4,b4]@15 ~",
  E: "[e4,g#4,c#5]@15 ~", F: "[a4,c#5]@15 ~, e4@13 ~@3", G: "[f#4,a4,d5]@5 ~ [e4,a4,c#5]@9 ~", H: "[e4,a4,c#5]@15 ~",
  I: "[f#4,b4,d#5]@15 ~", J: "[b4@16 ~@16 a4@15 ~, [e4,e6], g#4@31 ~@17, ~@16 c#5@31 ~]/3",
  K: "[~@16 f#4@7 ~ [a4,c#5,e5]@3 ~ [f#4,b4,d#5]@3 ~, [a4,c#5,e5]@23 ~@9]/2", // A B A
  L: "[b4 ~ a4 [d#4,f#4,b4,d#6], [e4,e6]@3 ~, g#4 ~, ~ c#5@2 ~]/2", // B E
  M: "[c#5@16 ~@16 b4@15 ~, [f#4,f#6], a#4@31 ~@17, ~@16 d#5@31 ~]/3", N: "[g#4,c#5,f5]@15 ~",
  O: "[~@16 g#4@7 ~ [b4,d#5,f#5]@3 ~ [g#4,c#5,f5]@3 ~, [b4,d#5,f#5]@23 ~@9]/2", // B C# B
  P: "[c#5 ~ b4 [f4,g#4,c#5], [f#4,f#6]@3 ~, a#4 ~, ~ d#5@2 ~]/2", Q: "[c#5 ~ b4 ~, [f#4,f#6]@3 ~, a#4 ~, ~ d#5@2 ~]/2",
})).s("gm_synth_strings_1").gain(0.18)

// chords · synth strings 1 · "SYN STR 1" · soft notes
const synth_strings_1_soft = note(`<
  ~@5 A ~@19 B ~@3 B C@2 ~@3 A ~@19 B ~@3 B C@2 ~@3 A ~@3 D ~@3 D E@2 ~ F ~@3 D ~@3 D E@2 ~ F ~ F ~ F ~ F ~ F ~ F ~@2
>`.pickRestart({
  A: "~@3 d#6@4 ~", B: "d#6@15 ~", C: "[e6@23 ~ e6@4 d#6@4]/2", D: "f6@15 ~", E: "[f#6@23 ~ f#6@4 f6@4]/2", F: "~ f6",
})).s("gm_synth_strings_1").gain(0.12)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@2 A B A C D E D E F G F H D E D E F G F H I J K L I J K L M N A B A C D E D E F G F H D E D E F G F H I J K L I J K
  L M N A B A C O P L Q O P L Q R S T U O P L Q O P L Q R S T U T U T U T U T U T U T V
>`.pickRestart({
  A: "~@2 [g#5,b5,e6]!6 [e5,g#5,c#6] ~ [e5,g#5,c#6]!3 ~ [e5,g#5,c#6]!2", // E C#m
  B: "~@2 [e5,a5,c#6]!6 [f#5,b5,d#6] ~ [f#5,b5,d#6]!3 ~ [f#5,b5,d#6]!2", // A B
  C: "[e5,a5,c#6] ~ [e5,a5,c#6]@2 ~@2 [d#5,f#5,b5]@5 ~@5", // A B
  D: "~@2 [e5,g#5,b5]!2 ~@2 [e5,g#5,b5]!2 ~@2 [e5,g#5,b5]!2 ~@2 [e5,g#5,b5]!2", // E
  E: "~@2 [e5,g#5,c#6]!2 ~@2 [e5,g#5,c#6]!2 ~@2 [e5,g#5,c#6]!2 ~@2 [e5,g#5,c#6]!2", // C#m
  F: "~@2 [e5,a5,c#6]!2 ~@2 [e5,a5,c#6]!2 ~@2 [e5,a5,c#6]!2 ~@2 [e5,a5,c#6]!2", // A
  G: "~@2 [f#5,a5,d6]!2 ~@2 [e5,a5,c#6]!2 ~@2 [e5,a5,c#6]!2 ~@2 [e5,a5,c#6]!2", // D A
  H: "~@2 [f#5,b5,d#6]!2 ~@2 [f#5,b5,d#6]!2 ~@2 [f#5,b5,d#6]!2 ~@2 [f#5,b5,d#6]!2", // B
  I: "~@2 [g#5,b5,e6]!7 ~ [g#5,b5,e6]!3 ~ [g#5,b5,e6]!2", J: "~@2 [e5,g#5,c#6]!7 ~ [e5,g#5,c#6]!3 ~ [e5,g#5,c#6]!2",
  K: "~@2 [e5,a5,c#6]!7 ~ [e5,a5,c#6]!3 ~ [e5,a5,c#6]!2", L: "~@2 [f#5,b5,d#6]!7 ~ [f#5,b5,d#6]!3 ~ [f#5,b5,d#6]!2",
  M: "~@2 [a5,c#6,e6]!7 ~ [a5,c#6,e6]!3 ~ [a5,c#6,e6]!2", N: "~@2 [a5,c#6,e6]!7 ~ [e5,a5,c#6]!3 ~ [f#5,b5,d#6]!2",
  O: "~@2 [a#5,c#6,f#6]!7 ~ [a#5,c#6,f#6]!3 ~ [a#5,c#6,f#6]!2", // F#
  P: "~@2 [f#5,a#5,d#6]!7 ~ [f#5,a#5,d#6]!3 ~ [f#5,a#5,d#6]!2", // D#m
  Q: "~@2 [g#5,c#6,f6]!7 ~ [g#5,c#6,f6]!3 ~ [g#5,c#6,f6]!2", R: "~@2 [b5,d#6,f#6]!7 ~ [b5,d#6,f#6]!3 ~ [b5,d#6,f#6]!2",
  S: "~@2 [b5,d#6,f#6]!7 ~ [f#5,b5,d#6]!3 ~ [g#5,c#6,f6]!2", // B C#
  T: "~@2 [a#5,c#6,f#6]!6 [f#5,a#5,d#6] ~ [f#5,a#5,d#6]!3 ~ [f#5,a#5,d#6]!2", // F# D#m
  U: "~@2 [f#5,b5,d#6]!6 [g#5,c#6,f6] ~ [g#5,c#6,f6]!3 ~ [g#5,c#6,f6]!2", V: "~@2 [f#5,b5,d#6]!5 ~@9",
})).s("gm_electric_guitar_clean").gain(0.18).pan(0.2)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note("<~@65 A B C D E F G H I ~@28>".pickRestart({
  A: "~@14 [g#4,a#4] [b4,c#5,d#5]", B: "f#5@5 ~ d#5 ~ f#5@3 ~ f#5 ~@3, f5 ~@15",
  C: "~@2 [d#5,f#5] ~@3 d#5 ~ f#5@4 d#5 ~@3", D: "~@2 f#5@3 ~ d#5 ~ c#5 ~ b4 ~ a#4@2 g#4 ~, ~@2 d#5 ~@13",
  E: "a#4@4 g#4@4 a#4@3 ~ c#5@2 ~@2", F: "g#4 [a#4,b4,c#5] f#5@4 g#5@2 f#5@3 ~ f#5@2 ~@2, ~@2 d#5 ~@13",
  G: "~@2 f#5 ~@3 f#5 ~ g#5@4 f#5@2 ~@2", H: "g#4 [a#4,b4,c#5] f#5@3 ~ d#5 ~ f#5 ~ d#5 ~ c#5 ~ b4 ~, ~@2 d#5 ~@13",
  I: "a#4@4 g#4@3 ~ a#4@3 ~ c#5@3 ~, g#4 ~@15",
})).s("gm_lead_2_sawtooth").gain(0.45)

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

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

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

// drums · hihat
const hihat = s("hh").struct("<[~@12 x ~ x!2] [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]!100 [x ~ x!3 ~ x!2 ~@8]>").gain(0.27)

// drums · mid tom
const mid_tom = s("mt").struct("<~ [x!2] ~@100>").gain(0.38)

// drums · high tom
const high_tom = s("ht").struct("<[~@12 x ~ x!2] [~@2 x!3 ~ x!2 ~@2 x!3 ~ x!2] ~@100>").gain(0.32)

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

stack(
  bass, synth_strings_1, synth_strings_1_soft, electric_guitar_clean, lead_2_sawtooth, kick, snare, clap, hihat,
  mid_tom, high_tom, splash
)

More by G. G. Anderson