Strudelify

Ich bin so treu wie Gold

G. G. Anderson

KeyB majorTempo120 bpm
0:00/0:00
// Ich bin so treu wie Gold — G. G. Anderson
// 120 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: 
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · synth strings 1 · "#STR SECT3"
const synth_strings_1 = note(`<
  A B@8 C@8 D@6 E@3 F@6 G@2 H@4 I@3 J@2 C@8 D@6 E@3 F@6 G@2 H@4 I@3 J@2 K@8 F@6 G@2 H@4 I@3 L M@5 N
>`.pickRestart({
  A: "~ [b3,d#4,f#4]", B: "[f#4 g#4 f#4 [e4,g#4], b3, d#4@15 ~ e4@15 ~ d#4@15 ~@17]/8",
  C: "[[e4,g#4]@3 [d#4,f#4]@4 [e4,g#4], b3]/8", D: "[[b3,g#4]@48 [c#4,a4]@31 ~ b3@16, e4, ~@79 g#4@16 ~]/6",
  E: "[[a3,d4] [b3,d#4]@2, f#4]/3", F: "[[e4,g#4]@16 [d#4,f#4]@32 [e4,g#4]@32 ~ d#4@15, b3, ~@5 f#4]/6",
  G: "[[a3,c#4] [b3,g#4], e4]/2", H: "[[e4,g#4] [d#4,f#4]@2 [e4,g#4], b3]/4",
  I: "[[c#4,a4] g#4 [d#4,f#4], e4@2 ~, ~ b3@2]/3", J: "[b3,e4,g#4]/2",
  K: "[[a3,c#4] [b3,g#4] ~ [b3,d#4], e4@5 f#4@3, ~@2 [a3,c#4] ~]/8", L: "[b3,e4,g#4]",
  M: "[[c#4,a4] g#4 [d#4,f#4]@2 [e4,g#4], e4@2 ~@3, ~ b3@4]/5", N: "[b3,e4,g#4]@3 ~@13",
})).s("gm_synth_strings_1").gain(0.04)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~ A ~ A ~ A ~@3 B C B D E D E B@2 C B F@2 C F E@2 ~ G@2 H@2 G I H ~ G@2 H I H G H@2 B C B D E D E B@2 C B F@2 C F E@2
  ~ G@2 H@2 G I H ~ G@2 H I H G H@2 J K L M J N O@2 ~ G@2 H@2 G I H ~ G@2 H I H G H ~@6
>`.pickRestart({
  A: "~@2 b3!3 ~ b3 ~@9", B: "~@2 g#4 ~@3 g#4 ~@3 g#4 ~@3 g#4!2",
  C: "~@2 g#4 ~@3 g#4 ~@3 [e3,g#3,g#4]@2 [d#3,f#3]@2 ~ g#4, ~@7 [e3,g#3,g#4]", // E D#m E
  D: "~@2 b4 ~@3 b4 ~@3 [c#3,e3,b4]@2 [d#3,f#3]@2 b4!2", E: "~@2 b4 ~@3 b4 ~@3 b4 ~@3 b4!2",
  F: "~@2 a4 ~@3 a4 ~@3 a4 ~@3 a4!2", G: "~@2 b4 ~@3 b4 ~@3 b4!2 ~@2 b4 ~", H: "~@2 g#4 ~@3 g#4 ~@3 g#4!2 ~@2 g#4 ~",
  I: "~@2 a4 ~@3 a4 ~@3 a4!2 ~@2 a4 ~", J: "~@2 a4!2 ~@2 a4 ~@3 a4 ~@3 a4 ~",
  K: "~@2 a4!2 ~@2 a4 ~@3 [a3,c#4,a4]@2 [c#4,e4]@2 a4 ~", L: "~@2 g#4!2 ~@2 g#4 ~@3 g#4 ~@3 g#4 ~",
  M: "~@2 g#4!2 ~@2 g#4 ~@3 [e3,g#3,g#4]@2 [g#3,b3]@2 g#4 ~", N: "~@2 f#4!2 ~@2 f#4 ~@3 f#4 ~@3 f#4 ~",
  O: "~@2 b4!2 ~@2 b4 ~@3 b4 ~@3 b4 ~",
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.6)

// other · brass section · "BRASS"
const brass_section = note(`<
  ~@27 A ~ B ~ C D E ~ F ~ G ~ H I J ~@19 A ~ K ~ L D M ~ N ~ K ~ H I J ~@10 A ~ K ~ L D M ~ A ~ K ~ H I J ~ H I@2 O P
>`.pickRestart({
  A: "~@2 [b4,b5]!2 [a#4,a#5]@2 [a4,a5] ~@9", B: "~@2 [c#5,c#6] c#6 [c5,c6]@2 b5 ~@9",
  C: "~@2 [b4,b5]@2 a#5@2 [b4,b5] ~@9", D: "~@2 [a4,a5] ~@3 [a4,a5] ~@9", E: "~@2 [b4,b5]!2 c#6@2 [b4,b5] ~@9",
  F: "~@2 [b4,b5]!2 [a#4,a#5]@2 a5 ~@9", G: "~@2 [c#5,c#6] c#6 c6@2 [b4,b5] ~@9", H: "~@10 [g#4,g#5] ~@5",
  I: "~@4 [b4,b5] ~@5 [b4,b5] ~@5", J: "~@2 [b4,b5]!2 [c#5,c#6]@2 [e5,e6] ~@9",
  K: "~@2 [c#5,c#6]!2 [c5,c6]@2 [b4,b5] ~@9", L: "~@2 [b4,b5]@2 [a#4,a#5]@2 [b4,b5] ~@9",
  M: "~@2 [b4,b5]!2 [c#5,c#6]@2 [b4,b5] ~@9", N: "~@2 [b4,b5]!2 [a#4,a#5]@2 a4@2 ~@8, ~@6 a5 ~@9",
  O: "~@4 [e5,e6] ~@5 [e5,e6] ~@3 [b4,b5]@2", P: "[e5,e6] ~@3",
})).s("gm_brass_section").gain(0.35)

// bass · slap bass 1 · "SLAP BASS"
const bass = note(`<
  ~ A@2 B@2 A@2 B@4 C A@4 C B@3 D@2 B E A F G A@2 H B A D B G A@2 B D B A B@4 C A@4 C B@3 D@2 B E A F G A@2 H B A D B G
  A@2 B D B A B@2 D@2 B@2 D I A J G A@2 H B A D B G A@2 B D B A C D B A@2 B K
>`.pickRestart({
  A: "b1 ~ b1@2 d#2@2 f#2@2 b1 ~ b1@2 d#2@2 f#2@2", B: "e1 ~ e1@2 g#1@2 b1@2 e1 ~ e1@2 g#1@2 b1@2",
  C: "e1 ~ e1@2 g#1@2 b1@2 e1 ~ e1@2 g#1@2 b1 ~", D: "a1 ~ a1@2 c#2@2 e2@2 a1 ~ a1@2 c#2@2 e2@2",
  E: "d1 ~ d1@2 f#1@2 a1@2 d1 ~ d1@2 f#1@2 a1@2", F: "b1@2 c#2@2 d#2@2 e2@2 f#2@4 b1@3 ~", G: "e1@7 ~",
  H: "[e1,f1] ~ e1@2 g#1@2 b1@2 e1 ~ e1@2 g#1@2 b1@2", I: "f#1 ~ f#1@2 a1@2 c#2@2 f#1 ~ f#1@2 a1@2 c#2@2",
  J: "b1@2 c#2@2 d#2@2 e2@2 f#2@3 ~ b1@3 ~", K: "e1@3 ~@13",
})).s("gm_slap_bass_1").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!105 x>").gain(0.35)

// drums · snare
const snare = s("sd").struct("<~ A@24 B ~ A@6 C ~ A@24 B ~ A@6 C ~ A@14 D E ~ A@6 C ~ A@6 C A@5 ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~ x ~ x!2 ~@2 x ~ x ~ x ~", C: "~@4 x ~@6 x!2 ~@3", D: "~@2 x ~@2 x!3", E: "~ x!3 ~@2 x ~",
})).gain(0.45)

// drums · clap
const clap = s("cp").struct(`<
  ~ A ~ A ~ A ~@21 B ~ B ~@5 B ~ B ~@23 B ~ B ~@5 B ~ B ~@14 B ~ B ~@5 B ~ B ~@10
>`.pickRestart({
  A: "~@5 x!3", B: "~@2 x!3 ~ x ~@9",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~ A@25 ~ A@7 ~ A@25 ~ A@7 ~ A@16 ~ A@7 ~ A@12 ~>".pickRestart({
  A: "x!8",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~@33 B ~@33 B ~@28 B ~>".pickRestart({
  A: "~@3 x", B: "~@5 x!2 ~",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~@16 B C ~@7 C ~@7 D ~@16 B C ~@7 C ~@7 D ~@7 D C ~@7 C ~@11 E ~>".pickRestart({
  A: "~@5 x ~@2", B: "~ x", C: "~@13 x!2 ~", D: "~@7 x!2 ~@7", E: "~@3 x!2 ~@3",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@17 B ~@7 B ~@7 C ~@17 B ~@7 B ~@7 C ~@6 D E B ~@7 B ~@11 F ~>".pickRestart({
  A: "~@7 x!2 ~@7", B: "~@12 x!2 ~@2", C: "~ x!2 ~@5", D: "~@15 x", E: "x", F: "~@2 x!3 ~@11",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@26 A ~@7 A ~@25 A ~@7 A ~@16 A ~@7 A ~@11 B A>".pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.4)

// drums · shaker
const shaker = s("sh").struct("<~ A@8 ~@18 A@7 ~ A@6 ~@20 A@7 ~ A@6 ~@11 A@7 ~ A@7 ~@6>".pickRestart({
  A: "x!2 ~ x!2 ~ x ~@9",
})).gain(0.25)

stack(
  synth_strings_1, electric_guitar_muted, brass_section, bass, kick, snare, clap, hihat, low_tom, mid_tom, high_tom,
  crash, shaker
)

More by G. G. Anderson