Strudelify
Gypsy cover art

1982 · Mirage

Gypsy

Fleetwood Mac

KeyF majorTempo131 bpm
0:00/0:00
// Gypsy — Fleetwood Mac
// 131 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 146 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Guitar 5.
setcpm(131/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, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A@3 B C D C D B@4 C D C E A@3 B C D C E C F A@3 B C D C D B@4 C D C E A@3 B C D C E C F A@3 B G@2 D H B@2 C@2 G I
  D@2 B@2 C@2 G@2 D J B@4 C D C E A@3 B C D C E C F C F B@4 C D C E B@4 C D C E B@4 C D C E B@4 C D C E B@4 C D C E B@4
  C D C E K
>`.pickRestart({
  A: "f1@4 ~@2 f1 ~ f1@5 ~@3", B: "f1@4 ~@2 f1 ~ f1@4 ~@2 f1 ~", C: "bb1@4 ~@2 bb1 ~ bb1@4 ~@2 bb1 ~",
  D: "c2@4 ~@2 c2 ~ c2@4 ~@2 c2 ~", E: "c2@4 ~@2 c2 ~ c2@2 d2 ~ c2@4", F: "c2@4 ~@2 c2 ~ c2@6 ~@2",
  G: "d2@4 ~@2 d2 ~ d2@5 ~ d2 ~", H: "c2@4 ~@2 c2 ~ c2@6 d2 ~", I: "d2@4 ~@2 d2 ~ d2@4 ~@2 d2@2",
  J: "c2@4 ~@2 c2 ~ c2@4 ~@2 c2@2", K: "f1@11 ~@5",
})).s("gm_electric_bass_finger").gain(0.42)

// chords · celesta · "Keyboard"
const celesta = note("<~@81 A B C D ~@4 E@8 ~@4 F@4 ~@4 F@4 ~@4 F@4 ~@4 F@4 ~@4 F@4 ~@4 F@4 ~>".pickRestart({
  A: "a5@3 ~ c6 ~@3 d6 ~@3 f6 ~@3", B: "d6 ~@3 c6 ~@3 a5@2 ~@2 g5 ~@3", C: "a5 ~@3 c6 ~@3 d6 ~@3 f6 ~@3",
  D: "d6 ~@3 c6 ~@3 a5 ~@3 g5 ~@3",
  E: "[~@124 g5@3 ~, a5@24 a5@4 g5@28 a5@4 g5@28 a5@4 g5@28 a5@7 ~, ~@4 c6@16 c6@12 a5@20 c6@12 a5@20 c6@12 a5@20 c6@11 ~, ~@8 d6@8 d6@20 c6@12 d6@20 c6@12 d6@20 c6@12 d6@15 ~, ~@12 f6@28 d6@4 f6@28 d6@4 f6@28 d6@4 f6@19 ~]/8",
  F: "[~@60 g5@3 ~, a5@24 a5@4 g5@28 a5@7 ~, ~@4 c6@16 c6@12 a5@20 c6@11 ~, ~@8 d6@8 d6@20 c6@12 d6@15 ~, ~@12 f6@28 d6@4 f6@19 ~]/4",
})).s("gm_celesta").gain(0.42)

// other · electric guitar clean · "Guitar 1"
const electric_guitar_clean = note(`<
  ~ A B C ~@5 A B C ~@5 A B C ~@5 D ~ A B C ~@5 A B C ~@5 A B C ~@5 D ~ A B C ~ E F G H I J K L E F G H I J K L M N G O
  P B C ~@5 A B C ~@5 D ~@3 A B C ~@5 A B C ~@5 A B C ~@5 A B C ~@5 A B C ~@5 A B C ~@5 D
>`.pickRestart({
  A: "a4@13 ~@3", B: "c5@7 ~", C: "f4", D: "a4 ~", E: "~@8 d3 ~ f3 ~ a3 ~ d4 ~", F: "f4 ~ c5@2 e5 ~ f5@2 ~@8",
  G: "~@8 c3 ~ e3 ~ g3 ~ c4 ~", H: "g4 ~ c5 ~ d5 ~ e5@2 ~@8", I: "~@8 f3 ~ a3 ~ c4 ~ f4 ~", J: "f4 ~ a4 ~ c5 ~ f5 ~@9",
  K: "~@8 bb3 ~ d4 ~ f4@2 g4 ~", L: "f4@2 bb4 ~ d5@2 f5@2 ~@8", M: "~@8 d4 ~ f4 ~ a4@2 d5 ~",
  N: "f4 ~ a4 ~ c5 ~ f5@2 e5@2 d5@2 ~@4", O: "c4@2 e4 ~ g4@2 c5 ~ e5 ~ d5@2 f4@2 g4@2", P: "a4@13 ~@3, f4@9 ~@7",
})).s("gm_electric_guitar_clean").gain(0.48)

// chords · acoustic guitar steel · "Guitar 2"
const acoustic_guitar_steel = note(`<
  ~ A B C D E F G A@2 H C D E A I A@2 H C D E J G J K@2 A B C D E F G A@2 H C D E A I A@2 H C D E J G J K@2 A B C L@3 M
  N O P G@2 Q R S T U@2 V G Q R S W A H C D E A I A@2 H C D E J G J K@4 A H C D E A I A@2 H C D E A I A@2 H C D E A I
  A@2 H C D E A I A@2 H C D E A I A@2 H C D E A I A X
>`.pickRestart({
  A: "[c4,f4,a4]", B: "~@7 c4, [a4,c5]", C: "[c4,f4]", D: "[a3,c4]", E: "[bb3,d4,f4,a4]", F: "~@7 bb3, [c4,f4,a4]",
  G: "[bb3,d4,f4]", H: "[a4,c5]", I: "[bb3,d4,f4,a4]@7 c4", J: "[c4,f4,a4]@13 ~@3",
  K: "[[bb3,d4,f4]@14 ~@2 [f4,a4]@13 ~@3, ~@7 c4@7 ~@2]/2", L: "[a3 [a3,d4,f4,a4]@2, c4@2 ~]/3",
  M: "[g3,c4,e4]@7 [g3,c4,e4], g4", N: "[c4,e4,g4]@13 ~@3", O: "[f3,a3,c4]@7 [f3,a3,c4], f4", P: "[f3,a3,c4,f4]@15 ~",
  Q: "[a3,d4,f4]@7 [a3,d4,f4]", R: "[a3,d4,f4]", S: "[g3,c4,e4]@7 [g3,c4,e4]", T: "[g3,c4,e4]@11 ~@5",
  U: "[[a3,c4,f4] [a3,c4,f4], f3]/2", V: "[bb3,d4]@7 [bb3,d4,f4]", W: "[g3,c4,e4]@7 ~", X: "f4@3 ~",
})).s("gm_acoustic_guitar_steel").gain(0.48)

// other · electric guitar muted · "Guitar 3"
const electric_guitar_muted = note(`<
  A B C B C B C B D B C B C B C B E B C B C B F B G B C B C B C B C B D B C B C B C B E B C B C B F B G B C B C B C ~@20
  H C B C B C B E B C B C B F B G B C B C H C B C B C B E B C B C B C B E B C B C B C B E B C B C B C B E B C B C B C B
  E B C B C B C B E I
>`.pickRestart({
  A: "~@10 c3 ~ d3 ~ f3 ~", B: "f3@4 ~@2 f3 ~ f3@4 ~@2 f3 ~", C: "f3@4 ~@2 f3 ~@3 f3 ~ g3 ~ a3 ~",
  D: "f3@4 ~@2 f3 ~@3 f3 ~ a3 ~ g3 ~", E: "f3@4 ~@2 f3 ~@3 f3@2 a3 ~ g3 ~", F: "f3@5 ~ a3 ~@3 a3@2 g3@2 f3 ~",
  G: "f3@5 ~ a3 ~@3 a3@2 g3 ~ f3 ~", H: "~@6 f3 ~ f3@4 ~@2 f3 ~", I: "f3 ~@3",
})).s("gm_electric_guitar_muted").gain(0.28).pan(0)

// chords · acoustic guitar nylon · "Guitar 4"
const acoustic_guitar_nylon = note(`<
  ~@5 A@4 B ~@3 A@4 ~@4 C@6 ~@4 A@4 B ~@3 A@4 ~@4 C@6 ~@24 D@2 ~@2 A@4 ~@4 E@2 F@6 B ~@3 G@6 ~@2 G@6 ~@2 G@6 ~@2 G@6 ~@2
  G@6 ~@2 H@5
>`.pickRestart({
  A: "[~@15 g4, a4@6 a4 g4@7 a4@2, ~ c5@4 c5@3 a4@5 c5@3, ~@2 d5@2 d5@5 c5@3 d5@4, ~@3 f5@7 d5 f5@5]/4", B: "a4@3 ~",
  C: "[~@92 g4@3 ~, a4@24 a4@4 g4@28 a4@4 g4@28 a4@7 ~, ~@4 c5@16 c5@12 a4@20 c5@12 a4@20 c5@11 ~, ~@8 d5@8 d5@20 c5@12 d5@20 c5@12 d5@15 ~, ~@3 f5@7 d5 f5@7 d5 f5@5]/6",
  D: "a4/2", E: "[~@28 g4@3 ~, a4@24 a4@7 ~, ~@4 c5@16 c5@11 ~, ~@8 d5@8 d5@15 ~, ~@3 f5@5]/2",
  F: "[~@7 g4, a4@3 a4, ~ c5@4 c5@3, ~ d5 d5@2, ~@3 f5@5]/2",
  G: "[~@2 a4, a4@6 a4 g4@7 a4 g4@8 ~, ~ c5@4 c5@3 a4@5 c5@8 ~@3, ~@2 d5@2 d5@5 c5@3 d5@8 ~@4, ~@3 f5@7 d5 f5@8 ~@5]/6",
  H: "[~@3 g4, a4@6 a4 g4@7 a4@6, ~ c5@4 c5@3 a4@5 c5@7, ~@2 d5@2 d5@5 c5@3 d5@8, ~@3 f5@7 d5 f5@8 ~]/5",
})).s("gm_acoustic_guitar_nylon").gain(0.48).pan(0.7)

// chords · synth strings 2 · "Strings"
const synth_strings_2 = note(`<
  ~ A@2 B C D@2 E F A@2 B G E F E F H@3 G E F E F E F A@2 B C D@2 E F A@2 B G E F E F H@3 G E F E F E F A@2 B C I@2 J@4
  K@4 J@4 K@4 L@2 ~ M B G E F E F H@3 G E F E F E F ~ F ~ M B G E F E F N@3 G E F E F N@3 G E F E F N@3 G E F E F N@3 G
  E F E F N@3 G E F E F ~
>`.pickRestart({
  A: "[f3@15 ~ c4@16, a3@31 ~]/2", B: "[c3,f3]", C: "[a3,c4]@13 ~@3", D: "[[bb3,d4]@15 e4@16 ~, ~@15 c4@13 ~@4]/2",
  E: "[bb3,d4]", F: "[c4,e4]", G: "[a3,c4]", H: "[f3 c4 f3, a3@47 ~]/3", I: "[d4,f4]/2", J: "[e4 a3, c4]/4",
  K: "[bb3 f4, d4]/4", L: "[[c4,e4]@15 ~]/2", M: "c4", N: "[~ c4 [c3,f3], a3@47 ~]/3",
})).s("gm_synth_strings_2").gain(0.14)

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

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!83 [~ x!3] [x!2 ~ x] [~ x ~ x]!59 ~>").gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@7 B A@7 B A@7 B A@9 B A@7 B A@7 B A@33 B A@7 B A@11 B A@7 B A@7 B A@7 B A@7 B A@7 B ~
>`.pickRestart({
  A: "x!8", B: "x!7 ~",
})).gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<~@46 [~@3 x] ~@41 [~@3 x] ~@57>").gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@57 A ~@19 A ~@30 B ~@3 B ~@11 C ~@3 B ~@5 B ~@5 B ~@4 A>".pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.24)

// drums · tambourine
const tambourine = s("tb").struct("<~@100 [~@3 x] ~ [~@3 x] ~ [~ x ~@2] ~@41>").gain(0.36)

// drums · shaker
const shaker = s("sh").struct("<~ [x!8]!144 ~>").gain(0.3)

stack(
  bass, celesta, electric_guitar_clean, acoustic_guitar_steel, electric_guitar_muted, acoustic_guitar_nylon,
  synth_strings_2, kick, snare, hihat, open_hat, crash, tambourine, shaker
)

More by Fleetwood Mac