Strudelify
Woman Woman cover art

`K Heb Je Lief - 50 jaar de muziek, M`n fans, het leven

Woman Woman

Rene Froger

KeyD majorTempo68 bpm
0:00/0:00
// Woman Woman — Rene Froger
// 68 bpm, 4/4, key D 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: ch 4 "Bell Sound" Fantasy -> pad new age
// note: "Bell Sound" named as a mallet, played on tubular bells (neither patch table reads its program as one)
// note: Full arrangement: all 55 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(68/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 · fretless bass · "Bass"
const bass = note(`<
  A B C D E F G H E F G H I J I K L M E F G H E F G H I J I K L M N O P O Q E F R H E F G H I J I K L M I S T@2
>`.pickRestart({
  A: "d2@7 ~@3 d2@2 b1@7 ~@5", B: "g1@7 ~ g1@2 d1@2 a1@7 ~ a2@2 a1@2", C: "d2@7 ~ d2@2 a1@2 b1@7 ~ b1@2 f#1@2",
  D: "g1@9 ~ g1@2 a1@10 ~@2", E: "d2@9 ~ d2@2 c#2@12", F: "g1@9 ~ g1@2 a1@6 a2@2 e2@2 a1@2",
  G: "d2@7 ~ d2@2 a1@2 b1@9 ~ b1@2", H: "g1@4 d1 g1 a1@4 e2 a1", I: "d2@7 ~ a1@2 d2@2 b1@7 ~@3 f#1@2",
  J: "g1@4 d1 g1 a1@3 a1 e2 a2", K: "g1@7 ~ d1@2 g1@2 f#1@7 ~ f#2@2 f#1@2", L: "b1@7 ~ a1@4 g1@7 ~ d1@2 g1@2",
  M: "e1@8 b1@2 e1@2 a1@11 ~", N: "d2@4 a1 d2 d1@4 ~@2", O: "f#1@9 ~ f#1@2 f#1@12", P: "g1@9 ~ g1@2 g1@9 ~ g1@2",
  Q: "a1@9 ~ a1@2 a1@9 ~ a1@2", R: "d2@7 ~ d2@2 a1@2 c#2@9 ~ c#2@2", S: "g1@8 d1@2 g1@2 a1@4 a1@4 ~ a1@3",
  T: "[~@2 a1@5 ~ d1@25 ~@15]/2",
})).s("gm_fretless_bass").gain(0.72)

// other · tubular bells · "Bell Sound"
const tubular_bells = note("<A B C D ~@14 E ~ F G E H I J K ~@14 E L I J M ~@5 N O P ~>".pickRestart({
  A: "[b4,b5]@3 ~ [a4,a5]@3 ~@5 [b4,b5]@3 ~ [a4,a5]@3 ~@5", // B A B A
  B: "[a4,a5]@3 ~ [g4,g5]@3 ~ [g4,g5]@2 [f#4,f#5]@2 [g4,g5]@3 ~@9", // A G F# G
  C: "[g4,g5]@3 ~ [f#4,f#5]@3 ~ [f#4,f#5]@2 [e4,e5]@2 [e4,e5]@3 ~ [d4,d5]@3 ~ [c#4,c#5]@2 [d4,d5]@2", // G F# E D C# D
  D: "[a4,a5] ~@3 [d4,d5] ~@3", E: "~@6 [a4,a5]@3 ~@9 [c#4,c#5]@2 [d4,d5]@2 [a4,a5]@2",
  F: "~@6 [a4,a5]@3 ~@11 [f#4,f#5]@2 [f#4,f#5]@2", G: "[f#4,f#5]@3 ~ [e4,e5]@3 ~ [d4,d5]@3 ~ [e4,e5]@3 ~@9",
  H: "[b4,b5]@3 ~@5 [f#4,f#5]@2 [e4,e5]@2 [d4,d5]@3 ~@3 [e4,e5]@3 ~@3", // B F# E D E
  I: "[e4,e5]@3 ~ [d4,d5]@3 ~ [c#4,c#5]@2 [d4,d5]@2 [e4,e5]@3 ~ [d4,d5]@3 ~@5", // E D C# D E D
  J: "[a4,a5]@3 ~@15 [a4,a5]@2 [b4,b5]@2 [c#5,c#6]@2", K: "[a4,a5] ~@7",
  L: "[b4,b5]@3 ~@5 [f#4,f#5]@2 [e4,e5]@2 [d4,d5]@3 ~@9", M: "[a5,a6] ~@7",
  N: "[e4,e5]@3 ~ [d4,d5]@3 ~@5 [e4,e5]@3 ~ [d4,d5]@3 ~@5", // E D E D
  O: "[e4,e5]@3 ~ [d4,d5]@3 ~@5 [f#4,f#5]@3 ~ [e4,e5]@3 ~@2 [d4,d5]@3", P: "~@2 [c#4,c#5]@3 ~@3 [d4,d5]@3 ~@13",
})).s("gm_tubular_bells").gain(0.43)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~ A B C ~@4 D@2 E F G H I@2 J K ~@2 L@2 M@2 N O P Q I@2 R S T@2 U V@2 W@2 X@2 D@2 E F G H I@2 R S Y Z@3
>`.pickRestart({
  A: "~@18 [a3,c#4] [b3,d4] [c#4,e4] [d4,f#4] [e4,g4,a4] f#4", // A Bm C#m D A7
  B: "[g4,b4]@2 [f#4,a4]@2 [f#4,a4] [e4,g4] [e4,g4]@2 [d4,f#4]@2 [c#4,c#5] [d4,d5]", C: "[d4,d5]",
  D: "[d4@6 c#4@6 ~@4 f#4 e4 [b3,d4]@3 [c#4,e4]@3, a3@35 ~ a3@12, f#4@31 ~@17, ~@2 d4 ~]/2", // Bm C#m
  E: "~@12 b3@11 ~, [a3,d4,f#4]@23 ~", F: "[d4,d5] [c#4,c#5] [b3,b4] [a3,a4]",
  G: "[e4,a4]@2 f#4 a4@3 [e4,a4]@2 f#4 ~ [a3,d5,d6]@2, a5@5 ~, a3@2 b3 a4, ~ d4@2 ~ d4@2", // A5 D5
  H: "[e4,g4,e5,e6]@2 f#4 g4 a4@2 a3@2 e4 c#4 [a3,e6]@2, b3 c#5, ~ [d4,d5,d6]@2 c#6@2 ~, ~@12 [c#4,a4]@6 a4@5 ~", // Em A5 D F#m
  I: "[[a3,e4,a4,e5]@4 [f#3,f#4]@2 [a3,a4]@6 [e4,a4,e5,e6]@4 f#4@2 a4@6 [f#4,f#5,f#6]@4 [e4,e5,e6]@3 ~ [d5,d6]@4 [c#4,a#4,c#5,e5,e6]@8 [d5,d6]@2 [c#5,c#6]@2, d6@3 ~ [d4,d5,d6]@2 b4@3 ~@3, ~ [d4,d5]@2 b3@6 a#3@3, ~@31 d4@5 ~@12]/2", // A5 F# A A5 F# E D A#dim …
  J: "b3@4 a3@2 [b5,b6]@4 f#5 e5, d4@23 ~, [a4,a5,a6] [b3,f#4]", // B A B5
  K: "[b3,d4,g4,d5]@2 [a3,c#4,e4,c#5]@2 [c#4,e4,c#5] [b3,d4,b4] [a3,c#4,e4,c#5]@6, ~@2 a3 ~@3", // G A C#m Bm A
  L: "[~@10 [f#4,f#5]!2 [f#4,f#5]@2 [e4,e5]@2 [d4,d5]@2 d4@3 c#4@3, a3, ~@2 b3 [e4,e5]]/2", // F# E D E
  M: "[d4@6 ~@3 c#5 d5 a5 b5@4 [f#4,f#5] [e4,e5] [b3,d4,d5]@3 [c#4,e4,e5]@3, a3@35 ~ a3@12, f#4@31 ~@17, ~ c#4 d4 ~]/2", // F# E Bm C#m
  N: "e5@4 d5@4 c#5@2 d5@2 e5@4 d5@7 ~, [a3,d4,f#4]@23 ~, ~@12 b3@11 ~", // D
  O: "[d4,d5] [c#4,c#5] [b3,g4,b4] [a3,e4,a4], a3@3 ~, e4@13 ~@11", // D C# Em A5
  P: "[a3,e4,a4]@2 [f#3,f#4] [a3,a4]@3 [e4,a4]@2 f#4 ~ [a3,d5,d6]@2, a5@5 ~, ~@2 d4@4 b3@3 a4@3, ~@2 d4", // A5 F# A A5 D5
  Q: "[e4,g4,e5,e6]@2 f#4 g4 a4@2 [a3,c#4,a4]@2 e4 c#4 [a3,e6]@2, b3 c#5, ~ [d4,d5,d6]@2 c#6@2 ~, ~@18 a4@5 ~", // Em A A5 D
  R: "b3@4 a3@2 [b5,b6]@4 [f#5,f#6] [e5,e6], d4@23 ~, [a4,a5,a6] [b3,f#4]", // B F# E A B5
  S: "[b3,d4,g4,d5,d6]@2 [a3,c#4,e4,c#5,c#6]@2 [c#4,e4,c#5,c#6] [b3,d4,b4,b5] [a3,c#4,e4,c#5,c#6]@6, ~@2 a3 ~@3", // G A C#m Bm A
  T: "[[a3,e4,e5,e6]@4 [d5,d6]@9 ~@7 [b3,c#4,b4,c#5] [d4,d5] [e4,e5,f#5] [f#4,g4,g5] ~@20 e6@2 c#6@2, ~ f#3@5 [f#3,a3,a4]@6, ~@4 d4@16 ~@3 a5@21 ~@4]/2", // A5 D Bsus2 D Esus2 Gmaj7 F#m
  U: "[g3,b3], [b4,d6]@19 ~@5", // G Bm
  V: "[a5@20 e6@2 c#6@2 [g3,b3]@3 ~ [g3,b3]@3 [g3,b3]@4 ~ [g3,b3]@2 [g3,a4,a5]@2 [g3,b4,b5]@2 [f#3,a3,d5,d6]@2 [f#3,a3,f#5,f#6]@2 [f#3,a3,a5,a6]@2, a3@36 ~@2 b3 ~ b3 ~@7, [f#3,a4]@24 [g4,d6]@13 ~@11]/2", // G Gsus2 G D F#m G5
  W: "[d4@11 ~ c#4@11 ~@13 b4@2 ~@2 d5@4 [a3,e5]@4, [f#4,a4]@3 g4, a3@23 ~ d4@24, ~@6 b3@5 ~, ~@19 b4@5]/2", // A5 F#m
  X: "[[d4,a5]@2 [c#4,c#5]@2 [b3,d4,b4]@2 [b3,d4,g4,d5] [a3,c#4,e4,a4,e5], [f#4,a4]@3 ~, a3@23 ~@25]/2", // D5 C# Bm G A F#m
  Y: "[a3,e4,a4,e5,e6]@4 [f#3,f#4]@2 a4@5 ~ [e4,a4,e5,e6]@4 f#4@2 a4@5 ~, ~ [d4,d5,d6]@2 ~ [d4,d5,d6]@2, ~ a3@3", // A5 F# A5 D
  Z: "[[e4,a4,e5,e6]@4 f#4@2 a4@6 [f#3,b3,f#4,f#5,f#6]@4 [a3,c#4,a4,e5,e6]@5 [f#3,b3,g4,d5,d6]@5 [a3,c#4,a4,c#5,c#6,e6]@5 ~ d5@18 ~@22, b3@12 ~@19 [f#3,d4,d6,f#6]@21 ~@20, ~@4 [d4,d5,d6]@8 ~@19 a4@19 ~@22]/3", // A5 B5 A Gmaj7 A D
})).s("gm_string_ensemble_1").gain(0.36)

// chords · epiano1 · "E.Piano"
const epiano1 = note(`<
  A B C D E F G H I F G J K F G L M N I F G H I F G O K F G L M N P Q R Q S I F T U I F G O K F G L M V K W ~@2
>`.pickRestart({
  A: "[a3,d4,f#4]@11 ~ [f#3,b3,d4]@11 ~", B: "[d3,g3,a3,b3]@11 ~ [g3,a3,b3,d4]@6 [e3,a3,c#4]@6",
  C: "f#4@4 f#4 a3 d4@4 d4 f#3, [a3,d4]@11 ~ [f#3,b3]@11 ~", D: "[d3,g3,a3,b3] [e3,g3,b3,d4]",
  E: "[a3,d4,e4,f#4]@4 a3 a4 a3 a3@5, ~@12 [c#4,f#4]@11 ~", F: "[g3,a3,b3,d4] [a3,b3,c#4,e4]",
  G: "~@6 a4@5 ~ [b3,d4,f#4]@11 ~, [e4,f#4] ~, a3 a3@2 ~@3, ~ d4@5 ~@6", // Bm Esus2
  H: "f#4@4 e4@3 ~ d4@4 d4@6 c#4@6, [g3,a3,b3] [a3,b3,e4], d4 ~@2", I: "[a3,d4,e4,f#4]@4 a3 a4 [a3,c#4,f#4]@6",
  J: "[b3,d4,e4] [a3,c#4,e4] [g3,b3,d4] [a3,c#4,e4]", K: "[a3,d4,e4,f#4]@4 a3 a4 [b3,d4,f#4]@6",
  L: "[g3,b3,d4,f#4]@2 ~ f#4, ~ [f#3,a#3,c#4,e4]", M: "[b3,d4,f#4]@7 ~ [a3,c#4,e4]@3 ~ [g3,b3,d4]@12",
  N: "[g3,b3,d4,f#4]@10 ~@2 [a3,c#4,e4]@11 ~", O: "[a3,d4,e4]@5 ~ [a3,c#4,e4]@6 [g3,b3,d4]@6 [a3,c#4,e4]@6",
  P: "[f#3,a3,d4]@19 ~ [f#3,a3,d4]@4", Q: "~ e4, [f#3,a3,c#4]", R: "~@6 g4@3 a4@2 ~, [g3,b3,d4]@23 ~",
  S: "[g3,b3,d4] ~", T: "~@6 a4@5 ~ [a3,c#4,f#4]@11 ~, [e4,f#4] ~, a3 a3@2 ~@3, ~ d4@5 ~@6",
  U: "[a3,d4,e4]@2 [g3,b3,d4] [a3,c#4,e4]", V: "[g3,b3,d4,f#4]@10 ~@2 [g3,a3,c#4,e4]@11 ~", W: "[g3,a3,b3,d4] ~",
})).s("gm_epiano1").gain(0.48)

// chords · distortion guitar · "Guitar"
const distortion_guitar = note("<A B A B ~@8 C D C E ~@10 C D C E ~@3 F G F H ~@8 C D C E I J K L M@2>".pickRestart({
  A: "d3 b2", B: "g2 a2", C: "[d3,a3]@3 f#3@2 a3, ~ b2", D: "[d3,g3] [a2,e3]", E: "[d3,g3] [c#3,f#3]",
  F: "[f#2,c#3,f#3]@23 ~", G: "[g2,d3,g3]@11 ~", H: "[a2,e3,a3]@13 ~@11",
  I: "[b2,f#3,b3]@7 ~ [a2,e3,a3]@4 [g2,d3,g3]@12", J: "[a2,e3]!2", K: "[d3,a3] [b2,f#3]",
  L: "[g2,d3]@12 [a2,d3,g3]@5 [a2,e3,a3]@4 [a2,d3,g3]@3", M: "[~@2 [a2,e3,a3]@5 [a2,d3,f#3]@21 ~@20]/2",
})).s("gm_distortion_guitar").gain(0.29).pan(0.3)

// other · overdriven guitar · "guit solo"
const overdriven_guitar = note(`<
  ~@36
  [~@7 a3 b3 d4 f#4 a4]
  [a4@9 ~ d5 ~ a4@10 a4@2]
  [a4@8 g4@2 f#4@2 g4@9 ~ g4 ~]
  [g4@8 f#4@2 d4@2 g4@4 f#4@7 ~]
  [f#4@2 e4@2 e4 d4 e4@6]
  ~@14
>`).s("gm_overdriven_guitar").gain(0.64)

// chords · electric guitar clean · "Repeat Syn"
const electric_guitar_clean = note("<A B A ~@30 C D C D ~@18>".pickRestart({
  A: "~@2 [a4,d5,f#5]!10 ~@2 [b4,d5,f#5]!10", B: "~@2 [g4,b4,d5]!10 ~@2 [a4,c#5,e5]!10",
  C: "~@2 [f#4,a4,c#5]!10 ~@2 [f#4,a4,c#5]!10", D: "~@2 [g4,b4,d5]!10 ~@2 [g4,b4,d5]!10",
})).s("gm_electric_guitar_clean").gain(0.13).pan(0.8)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@12 A@3 ~ B ~@9 A@3 ~ B ~ A B ~ B ~ A@4 B ~ A ~ A B ~@2 B ~@5>".pickRestart({
  A: "~ x ~", B: "~@5 x",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!3 [~ x ~@2] [~ x ~ x]!8 ~@6 [~ x ~ x]!8 ~@29>").gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@12 A@6 ~@8 A@6 B A@3 B A@3 C A@11 B ~@2>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x ~@4 x ~@3",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@5 A ~@7 B ~@5 A C ~ A ~ D ~@3 A ~@3 B ~@5 A ~ E ~@2>".pickRestart({
  A: "~@11 x", B: "~@21 x!2 ~", C: "~@3 x", D: "~@5 x ~@5 x", E: "~@5 x ~@6",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  A@3 B C A@3 D A@2 E D A D F G H D A@3 D A@2 F D F D F G I J D A D K ~@4 D A@2 L D A D A G M D N ~@2
>`.pickRestart({
  A: "x!12", B: "x!5 ~ x ~@5", C: "~@2 x!10", D: "~ x!11", E: "x!9 ~@3", F: "x!10 ~@2", G: "x!4 ~ x!7",
  H: "x!8 ~@2 x ~", I: "x!8 ~ x ~@2", J: "x!4 ~ x!5 ~@2", K: "~ x!4 ~ x ~@5", L: "x!6 ~ x!3 ~@2", M: "x!8 ~ x!3",
  N: "x!6 ~@6",
})).gain(0.8)

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

// drums · open hat
const open_hat = s("oh").struct("<~@3 A ~@12 B C ~@12 B C B ~@3 A ~@12 B C ~@4>".pickRestart({
  A: "~@5 x ~@6", B: "~ x ~", C: "~@2 x",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@11 A ~@3 B ~ A ~@7 C ~ B ~ B ~ A D ~@3 E ~@7 F ~@3 B ~ A ~ G ~@2>".pickRestart({
  A: "~@3 x", B: "~@5 x", C: "~@7 x!3 ~@2", D: "~@20 x!2 ~@2", E: "~@7 x!2 ~@3", F: "~@4 x ~@4 x ~@2", G: "~ x ~@2",
})).gain(0.72)

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

// drums · ride
const ride = s("rd").struct("<~@3 A ~@4 B ~@13 B ~@14 C D C E ~@11 F G ~>".pickRestart({
  A: "~ x", B: "x", C: "~ x!11", D: "x!12", E: "x!8 ~ x ~@2", F: "~@12 x ~@3 x ~@4 x ~@2", G: "~ x ~@2 x ~@7",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@12 A@6 ~@8 A@6 B A@7 C A@11 B ~@2>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x ~@4 x ~@3",
})).gain(0.8)

stack(
  bass, tubular_bells, string_ensemble_1, epiano1, distortion_guitar, overdriven_guitar, electric_guitar_clean, kick,
  kick_soft, rim, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride, tambourine
)

More by Rene Froger