Strudelify
You're My Mate cover art

Fredhead

You're My Mate

Right Said Fred

KeyE majorTempo130 bpm
0:00/0:00
// You're My Mate — Right Said Fred
// 130 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 106 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · synth bass 1 · "tk2"
const bass = note(`<
  ~@9 A B A C ~@4 A B A C ~@4 A B A C ~@4 A B A ~@5 A B A C ~@4 A B A C ~@20 A B A C ~@4 A B A C ~@4 A B A C ~@13
>`.pickRestart({
  A: "~ e2 ~ e2 ~ e2 ~ e2", B: "~ a1 ~ a1 ~ a1 ~ a1", C: "~ b1 ~ b1 ~ b1 ~ b1",
})).s("gm_synth_bass_1").gain(0.4)

// other · rock organ · "tk4"
const rock_organ = note("<~@57 A B A C ~@4 A B A C ~@28 A B A C A B A D ~>".pickRestart({
  A: "g#4", B: "a4", C: "f#4", D: "f#4 ~",
})).s("gm_rock_organ").gain(0.32)

// chords · bagpipe · "tk5"
const bagpipe = note("<~@17 A B C D ~@20 A B C D ~@4 A B C D ~@20 A B C D ~@4 A B C D ~@4 A B C D ~@13>".pickRestart({
  A: "e5@7 ~ e5@3 f#5@3 g#5@2, f5 ~@7 f5 ~@2 g5 ~@4", B: "a5@7 ~ a5@3 g#5@3 f#5@2, a#5 ~@7 a#5 ~@2 a5 ~@2 g5 ~",
  C: "e5@7 ~ e5@3 f#5@3 g#5@2, f5 ~@7 f5 ~@2 g5 ~@2 a5 ~", D: "f#5@7 ~ a5@3 g#5@3 f#5@2, g5 ~@7 a#5 ~@2 a5 ~@4",
})).s("gm_bagpipe").gain(0.25).pan(0.3)

// other · whistle · "tk5"
const whistle = note(`<
  ~@25
  [e6@7 ~ e6@3 f#6@3 g#6@2]
  [a6@7 ~ a6@3 g#6@3 f#6@2]
  [e6@7 ~ e6@3 f#6@3 g#6@2]
  [f#6 ~]
  ~@77
>`).s("gm_whistle").gain(0.25).pan(0.7)

// chords · acoustic guitar steel · "tk6"
const acoustic_guitar_steel = note(`<
  ~ A B C D ~@4 A B C D ~@4 A B C D ~@12 A B C D ~@4 A B C D ~@4 A B C D ~@4 E F G H ~@4 A B C D ~@4 A B C D ~@4 A B C D
  ~@4 A B C D ~@13
>`.pickRestart({
  A: "e3 ~ g#3 e4@2 b3 [g#3,b3] g#3, e2@5 ~@3, ~@2 e3@9 ~@5", // G#m
  B: "e3 ~ a3 ~@2 b3 [e3,b3] a3, a2@11 ~@5, ~@2 e3@7 ~@7, ~@3 e4@3 ~@2", // E5
  C: "b2 ~@2 e4@2 b3 [e3,b3] g#3, e2@5 ~@3, ~ b2@4 ~@3, ~@2 e3@3 ~@3", // E5
  D: "f#3 ~@2 f#4@2 d#4 [d#3,d#4] b3, b2@11 ~@5, ~@2 f#3@7 ~@7, ~ b3 ~@2", E: "e3 ~ g#3 e4@4 ~, e2@7 ~, ~ e3@6 ~",
  F: "e3 ~ a3 e4@4 ~, a2@7 ~, ~ e3@6 ~", G: "b2 ~@2 e4@4 ~, e2@7 ~, ~ b2@6 ~, ~@2 e3@3 ~@3",
  H: "f#3 ~@2 f#4@4 ~, b2@7 ~, ~ f#3@6 ~, ~ b3 ~@2",
})).s("gm_acoustic_guitar_steel").gain(0.25)

// bass · synth bass 2 · "tk6"
const bass_2 = note(`<
  ~@25
  [e3 ~ e3!3 ~ e3 ~ e3!3 ~ e3 ~ e3 ~]
  [a2 ~ a2!3 ~ a2 ~ a2!3 ~ a2 ~ a2 ~]
  [e3 ~ e3!3 ~ e3 ~ e3!3 ~ e3 ~ e3 ~]
  [b2 ~ b2!3 ~ b2 ~ b2!3 ~ b2 ~ b2 ~]
  ~@77
>`).s("gm_synth_bass_2").gain(0.4)

// chords · bagpipe · "tk6"
const bagpipe_2 = note(`<
  ~@97
  [e5@7 ~ e5@3 f#5@3 g#5@2, f5 ~@7 f5 ~@2 g5 ~@4]
  [a5@7 ~ a5@3 g#5@3 f#5@2, a#5 ~@7 a#5 ~@2 a5 ~@2 g5 ~]
  [e5@7 ~ e5@3 f#5@3 g#5@2, f5 ~@7 f5 ~@2 g5 ~@2 a5 ~]
  [f#5@7 ~ a5@3 g#5@3 f#5@2, g5 ~@7 a#5 ~@2 a5 ~@4]
  ~@5
>`).s("gm_bagpipe").gain(0.25).pan(0.3)

// bass · synth bass 1 · "tk12"
const bass_3 = note(`<
  ~@13 A B A ~@5 A B A C ~@4 A B A C ~@12 A B A C ~@4 A B A C ~@20 A B A C ~@4 A B A C ~@4 A B A C ~@9
>`.pickRestart({
  A: "~ e2 ~ e2 ~ e2 ~ e2", B: "~ a1 ~ a1 ~ a1 ~ a1", C: "~ b1 ~ b1 ~ b1 ~ b1",
})).s("gm_synth_bass_1").gain(0.4)

// bass · synth bass 2 · "tk12"
const bass_4 = note(`<
  ~@37
  [e3 ~ e3!3 ~ e3 ~ e3!3 ~ e3 ~ e3 ~]
  [a2 ~ a2!3 ~ a2 ~ a2!3 ~ a2 ~ a2 ~]
  [e3 ~ e3!3 ~ e3 ~ e3!3 ~ e3 ~ e3 ~]
  [b2 ~ b2!3 ~ b2 ~ b2!3 ~ b2 ~ b2 ~]
  ~@65
>`).s("gm_synth_bass_2").gain(0.25)

// other · trombone · "tk13"
const trombone = note(`<
  ~@4 A B C D E ~@3 F G H I J ~@3 F G H I J ~@3 K L M N O ~@3 P G H I J ~@3 F G H I J ~@12 Q R Q S ~@4 Q R Q S ~@3 F G H
  I J ~@3 F G H I J ~@3 P T P T ~@9 U
>`.pickRestart({
  A: "~@5 g#3@3", B: "g#3@2 e3@2 e3 ~ e3@4 ~@4 g#3@2", C: "a3@2 e3@2 e3 ~ e3@4 ~@6",
  D: "e3@4 e3 ~ e3 ~ e3@2 e3 ~@3 b2@2", E: "b2@2 b2 ~ c#3@4 b2@4 ~@4", F: "~@5 g#3!2 f#3",
  G: "e3@3 ~@3 e3@2 e3@2 ~@4 c#3@2", H: "e3@2 f#3@2 e3 ~ g#3 f#3", I: "e3@3 ~@3 e3@2 e3@2 ~@4 b2 ~", J: "b2 c#3 b2 ~",
  K: "~@7 g#3", L: "g#3@2 e3@2 e3 ~ e3 e3@2 ~@5 e3@2", M: "a3@2 e3@2 e3 ~ e3@4 ~@4 e3@2",
  N: "e3 ~ e3 e3@2 ~ e3@4 ~@2 b2@2 a2@2", O: "b2 ~ b2@2 c#3@2 b2@4 ~@6", P: "~@5 b2 g#3 f#3",
  Q: "g#3@2 g#3 g#3@3 g#3@2", R: "a3@2 ~ a3", S: "f#3 ~", T: "e3@3 ~@13", U: "~@3 f#4 d4@2 ~@2",
})).s("gm_trombone").gain(0.57)

// other · lead 3 calliope · "tk13"
const lead_3_calliope = note("<~@105 [~ a#6@2 ~@13, b6 ~@7]>").s("gm_lead_3_calliope").gain(0.4).pan(0.7)

// bass · synth bass 2 · "tk14"
const bass_5 = note(`<
  ~@53
  [e3 ~ e3!3 ~ e3 ~ e3!3 ~ e3 ~ e3 ~]
  [a2 ~ a2!3 ~ a2 ~ a2!3 ~ a2 ~ a2 ~]
  [e3 ~ e3!3 ~ e3 ~ e3!3 ~ e3 ~ e3 ~]
  [b2 ~ b2!3 ~ b2 ~ b2!3 ~ b2 ~ b2 ~]
  ~@49
>`).s("gm_synth_bass_2").gain(0.4)

// other · rock organ · "tk14"
const rock_organ_2 = note("<~@61 A B A C ~@4 A B A C ~@33>".pickRestart({
  A: "g#4", B: "a4", C: "f#4",
})).s("gm_rock_organ").gain(0.4)

// chords · bagpipe · "tk15"
const bagpipe_3 = note("<~@21 A B C D ~@20 A B C D ~@4 A B C D ~@20 A B C D ~@4 A B C D ~@4 A B C D ~@9>".pickRestart({
  A: "e5@7 ~ e5@3 f#5@3 g#5@2, f5 ~@7 f5 ~@2 g5 ~@4", B: "a5@7 ~ a5@3 g#5@3 f#5@2, a#5 ~@7 a#5 ~@2 a5 ~@2 g5 ~",
  C: "e5@7 ~ e5@3 f#5@3 g#5@2, f5 ~@7 f5 ~@2 g5 ~@2 a5 ~", D: "f#5@7 ~ a5@3 g#5@3 f#5@2, g5 ~@7 a#5 ~@2 a5 ~@4",
})).s("gm_bagpipe").gain(0.25).pan(0.3)

// chords · acoustic guitar steel · "tk16"
const acoustic_guitar_steel_2 = note(`<
  ~@5 A B C D ~@4 A B C D ~@4 A B C D ~@4 A B C D ~@12 A B C D ~@4 A B C D ~@4 A B C D ~@4 A B C D ~@4 A B C D ~@4 A B C
  D ~@4 A B C D ~@9
>`.pickRestart({
  A: "e3 ~ g#3 e4@2 b3 [g#3,b3] g#3, e2@5 ~@3, ~@2 e3@9 ~@5", // G#m
  B: "e3 ~ a3 ~@2 b3 [e3,b3] a3, a2@11 ~@5, ~@2 e3@7 ~@7, ~@3 e4@3 ~@2", // E5
  C: "b2 ~@2 e4@2 b3 [e3,b3] g#3, e2@5 ~@3, ~ b2@4 ~@3, ~@2 e3@3 ~@3", // E5
  D: "f#3 ~@2 f#4@2 d#4 [d#3,d#4] b3, b2@11 ~@5, ~@2 f#3@7 ~@7, ~ b3 ~@2", // D#
})).s("gm_acoustic_guitar_steel").gain(0.25)

// chords · bagpipe · "tk16"
const bagpipe_4 = note(`<
  ~@101
  [e5@7 ~ e5@3 f#5@3 g#5@2, f5 ~@7 f5 ~@2 g5 ~@4]
  [a5@7 ~ a5@3 g#5@3 f#5@2, a#5 ~@7 a#5 ~@2 a5 ~@2 g5 ~]
  [e5@7 ~ e5@3 f#5@3 g#5@2, f5 ~@7 f5 ~@2 g5 ~@2 a5 ~]
  [f#5@7 ~@9, g5 ~@15]
  ~
>`).s("gm_bagpipe").gain(0.25).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@9 A@7 ~ A@8 ~@4 A@7 ~ A@3 B A@16 ~@8 A@7 B A@24 ~@9>".pickRestart({
  A: "x!4", B: "x!8",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@27 A B ~@10 A B ~@30 A B ~@33>".pickRestart({
  A: "~@8 x!8", B: "x!16",
})).gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@27 [x!8 ~@8] ~@11 [x!8 ~@8] ~@31 [x!8 ~@8] ~@34>").gain(0.2)

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

// drums · open hat
const open_hat = s("oh").struct("<~@9 A@7 ~ A@8 ~@2 B C A@7 ~ A@2 B C A@16 ~@8 A@6 B C A@24 ~@9>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@8 x!8", C: "x!16",
})).gain(0.4)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@27 [x!8 ~@8] ~@11 [x!8 ~@8] ~@31 [x!8 ~@8] ~@34>").gain(0.2)

// drums · crash
const crash = s("cr").struct("<~@9 A ~@19 A ~@11 A ~@31 A ~@32>".pickRestart({
  A: "x",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~ A B A C A B A C D@7 ~ D@8 ~@4 D@7 ~@5 D@16 ~@16 D@24 ~@9>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@3 x!3 ~ x ~@3", C: "x!3 ~ x ~@7 x ~@3", D: "~@4 x ~@7 x!2 ~@2",
})).gain(0.4)

// drums · shaker
const shaker = s("sh").struct("<~ A@8 B@7 C B@19 C B@20 ~@16 B@24 ~@9>".pickRestart({
  A: "~ x ~ x", B: "~ x ~ x ~ x ~ x", C: "x!4",
})).gain(0.4)

stack(
  bass, rock_organ, bagpipe, whistle, acoustic_guitar_steel, bass_2, bagpipe_2, bass_3, bass_4, trombone,
  lead_3_calliope, bass_5, rock_organ_2, bagpipe_3, acoustic_guitar_steel_2, bagpipe_4, kick, snare, snare_soft, hihat,
  open_hat, open_hat_soft, crash, tambourine, shaker
)

More by Right Said Fred