Strudelify

Fred Come to Bed

E-Rotic

KeyB majorTempo145 bpm
0:00/0:00
// Fred Come to Bed — E-Rotic
// 145 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 139 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(145/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 · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@17 A B C B A B D B A@8 ~ A B C B A B D B A B C B A B D B A B C B A B D B A@8 ~ A B C B A B D B A B C B A B D B A B C
  B A B D B A B C B A B D B ~@16 A B C B A B D B A B C B A B D B A B C B A B D B
>`.pickRestart({
  A: "~ [e1,e4] ~ [e1,e4] ~ [e1,e4] ~ [e1,e4]", B: "~ [b1,b4] ~ [b1,b4] ~ [b1,b4] ~ [b1,b4]",
  C: "~ [f#1,f#4] ~ [f#1,f#4] ~ [f#1,f#4] ~ [f#1,f#4]", D: "~ [a1,a4] ~ [a1,a4] ~ [a1,a4] ~ [a1,a4]",
})).s("gm_lead_2_sawtooth").gain(0.45)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~ A@6 B C@7 B C@7 B D ~@9 A@6 B C@7 B C@7 B D ~@9 A@6 B C@7 B C@7 B C@7 B C@7 B C@7 B ~ A@6 B C@7 B C@7 B D
>`.pickRestart({
  A: "[[e3,e4,g#4] [b2,d#4] [f#2,c#4,a4] [b2,d#4] [e3,e4,g#4] [b2,d#4,f#4], b3@2 ~ b3@3, ~ f#4@3 ~@2]/6", // E B F#m B E B
  B: "[a2,a3,c#4,e4]", // A
  C: "[[b2,d#4,f#4] [e3,e4,g#4] [b2,d#4] [f#2,c#4,a4] [b2,d#4] [e3,e4,g#4] [b2,d#4,f#4], b3@3 ~ b3@3, ~@2 f#4@3 ~@2]/7", // B E B F#m B E B
  D: "[b2,b3,d#4,f#4]", // B
})).s("gm_synth_strings_1").gain(0.2)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  ~@17 A B C B A B D B ~@9 A B C B A B D B A B C B A B D B A B C B A B D B ~@9 A B C B A B D B A B C B A B D B A B C B A
  B D B A B C B A B D B ~@8 A B C B A B D ~ A B C B A B D B A B C B A B D B A B C B A B D B
>`.pickRestart({
  A: "[g#4,b4,e5]!3 ~ [g#4,b4,e5]!3 ~ [g#4,b4,e5]!3 ~ [g#4,b4,e5]!3 ~", // E
  B: "[f#4,b4,d#5]!3 ~ [f#4,b4,d#5]!3 ~ [f#4,b4,d#5]!3 ~ [f#4,b4,d#5]!3 ~", // B
  C: "[a4,c#5,f#5]!3 ~ [a4,c#5,f#5]!3 ~ [a4,c#5,f#5]!3 ~ [a4,c#5,f#5]!3 ~", // F#m
  D: "[e4,a4,c#5]!3 ~ [e4,a4,c#5]!3 ~ [e4,a4,c#5]!3 ~ [e4,a4,c#5]!3 ~", // A
})).s("gm_brass_section").gain(0.22).pan(0.3)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth_2 = note(`<
  ~@17 A B C B A B D B ~@25 A B C B A B D B ~@25 A B C B A B D B A B C B A B E B ~@24 A B C B A B D B A B C B A B E B
>`.pickRestart({
  A: "~ e3 e5 ~ e3 b4 ~ e3 a4 ~ e3 g#4 ~ e3 g#4 a4", B: "~ b3 b4 ~ b3 f#4 ~ b3 e4 ~ b3 d#4 ~ b3 d#4 e4",
  C: "~ f#3 f#5 ~ f#3 c#5 ~ f#3 b4 ~ f#3 a4 ~ f#3 g#4 a4", D: "~ a3 f#5 ~ a3 c#5 ~ a3 b4 ~ a3 a4 ~ a3 g#4 a4",
  E: "~ a3 e5 ~ a3 b4 ~ a3 a4 ~ a3 g#4 ~ a3 g#4 a4",
})).s("gm_lead_2_sawtooth").gain(0.36)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note("<~@9 A B C B A B D B ~@8 E@8 ~@25 E@8 ~@33 A B C B A B D B A B C B A B D ~@25>".pickRestart({
  A: "e2!16", B: "b1!16", C: "f#1!16", D: "a1!16", E: "e2 e3 e4 e2 e3 e4 e2 e3 e4 e2 e3 e4 e2 e3 e4 e2",
})).s("gm_synth_bass_1").gain(0.2).pan(0.4)

// other · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note("<~@9 A B C D E B C D F ~@85 A B C D E B C D E B C G ~@24>".pickRestart({
  A: "~@4 g#4 ~ f#4 ~ g#4 ~ f#4 ~ g#4 ~ f#4 ~", B: "g#4 ~ b4 ~ f#4 ~ e4 ~ f#4 ~ e4 ~ f#4 ~ e4 ~",
  C: "f#4 ~ g#4 ~ a4 ~ g#4 ~ a4 ~ g#4 ~ a4 ~ g#4 ~", D: "a4 ~ b4 ~ f#4 ~ e4 ~ f#4 ~ e4 ~ f#4 ~ e4 ~",
  E: "g#4 ~ f#4 ~ g#4 ~ f#4 ~ g#4 ~ f#4 ~ g#4 ~ f#4 ~", F: "g#4 ~ f#4 ~@13", G: "a4 ~ b4 ~@13",
})).s("gm_synth_brass_1").gain(0.32)

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

// drums · snare
const snare = s("sd").struct("<~@32 A ~@24 A ~@7 A ~@16 A ~@15 A ~@14 A ~@24 A>".pickRestart({
  A: "x!16",
})).gain(0.37)

// drums · clap
const clap = s("cp").struct("<~@17 [~ x ~ x]!8 ~@9 [~ x ~ x]!24 ~@9 [~ x ~ x]!32 ~@16 [~ x ~ x]!24>").gain(0.37)

// drums · hihat
const hihat = s("hh").struct("<~@17 A@16 ~ A@32 ~ A@32 ~@12 B@3 ~ A@24>".pickRestart({
  A: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", B: "x!4",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@17 A@16 ~ A@32 ~ A@32 ~@12 A@3 ~ A@24>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.52)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@17 A@16 ~ A@32 ~ A@32 ~@12 A@3 ~ A@24>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.52)

stack(
  lead_2_sawtooth, synth_strings_1, brass_section, lead_2_sawtooth_2, bass, synth_brass_1, kick, snare, clap, hihat,
  open_hat, crash, tambourine
)

More by E-Rotic