Strudelify

Seven Wonders

Fleetwood Mac

KeyE majorTempo119 bpm
0:00/0:00
// Seven Wonders — Fleetwood Mac
// 119 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(119/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 · electric bass finger
const bass = note(`<
  A@8 B C D E B C D F B F D B G H G F G F I H J@2 K L K I J@2 B C D F B C D F B F D B G H G H G F B F J@2 M I J@4 K I K
  I B C D E B C D F B F D B G E G H G F B N G O G N G F B F G H G F G F B N K I K I J@2 M L M I P@3
>`.pickRestart({
  A: "[b1@4 c#2@3 a1@9]/2", B: "a1@3 a1 a1@3 a1", C: "g#1@3 g#1 g#1@3 g#1", D: "c#2@3 c#2 c#2@3 c#2", E: "b1@3 b1 b1@4",
  F: "b1@3 b1 b1@3 b1", G: "e2@3 g#2 a2 g#2 f#2 e2", H: "b1@3 b1!2 b1@2 b1", I: "a1@3 a1!2 a1@2 a1",
  J: "[b1@3 b1 c#2@3 a1@4 a1!2 a1@2 a1]/2", K: "b1@3 b1 c#2@3 a1", L: "a1@3 a1!2 a1@3", M: "b1@4 c#2@3 a1",
  N: "b1@3 b1 b1@3 d#2", O: "b1@3 b1!2 b1@2 d#2", P: "[b1@4 c#2@3 a1@17]/3",
})).s("gm_electric_bass_finger").gain(0.45).pan(0.7)

// chords · lead 1 square
const lead_1_square = note(`<
  ~@8 A B C D A B C D A D C A ~@16 A B C D A B C D A D C A ~@20 A B C D A B C D A D C A ~@37
>`.pickRestart({
  A: "[a2,e3]", B: "[g#2,e3]", C: "[c#3,g#3]", D: "[b2,f#3]",
})).s("gm_lead_1_square").gain(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@28 A B A B A B A B ~@20 A B A B A B A B A B A B ~@36 A B A B A B A B A B ~@3
>`.pickRestart({
  A: "~@7 [a3,c#4]", B: "[e4,g#4]@3 [a3,c#4] [e4,g#4] ~ [e4,g#4] ~ [b3,d#4,f#4]@8",
})).s("gm_acoustic_guitar_steel").gain(0.35).pan(0.3)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@20 A@6 B C ~@20 A@6 B C ~@24 A@6 B C A@6 B C A@6 B C ~@13>".pickRestart({
  A: "[g#4@8 a4@4 g#4@3 ~ f#4@8 e4@4 f#4@3 ~ g#4@8 a4@4 g#4@4 f#4@8 e4@4 f#4@3 ~ g#4@8 a4@4 g#4@3 ~ f#4@8 e4@4 f#4@3 ~, b4@95 ~, e4@12 ~@4 d#4@16 e4@15 ~ d#4@15 ~ e4@15 ~ d#4@15 ~]/6",
  B: "[c#4,e4,a4]@15 ~", C: "[d#4,f#4,b4]",
})).s("gm_string_ensemble_1").gain(0.3)

// other · music box
const music_box = note(`<
  ~@2 A@2 B@4 ~@18 C@2 D@2 E@6 ~@18 C@2 D@2 E@2 D@2 E@2 F ~ G@3 ~@17 C@2 ~@6 C@2 ~@6 C@2 E@2 D@2 E@6 H@3
>`.pickRestart({
  A: "[~ d#5 e5 b5@7 ~@6]/2",
  B: "[~@4 e5@2 b5@4 d#5@2 e5@2 c#5@19 ~@3 e5@2 b5@4 d#5@2 e5@2 c#5@18, ~ d#5@2 ~@14 d#5@2 ~@13]/4",
  C: "[~@2 e6@3 ~ b5@4 e6@3 ~ b5@4 e6@4 b5@4 ~@6]/2", D: "[~@2 e5 b5@2 d#5 e5 c#5@9, ~@2 d#5@5 ~@25]/2",
  E: "[~@2 e5 b5@2 d#5 e5 c#5@9, ~ d#5@2 ~@13]/2", F: "~@2 e5 b5@2 d#5 e5 c#5, ~@2 d#5@5 ~@9",
  G: "[~@4 e5@2 b5@4 d#5@2 e5@2 c#5@19 ~@15, ~@2 d#5@5 ~@41]/3", H: "[~@2 e5 b5@2 d#5 e5 c#5@17, ~ d#5@2 ~@21]/3",
})).s("gm_music_box").gain(0.35)

// chords · pad sweep
const pad_sweep = note("<A@8 ~@20 A@8 ~@20 A@12 ~@36 A@10 B@3>".pickRestart({
  A: "[[b2,f#3]@4 [c#3,g#3]@3 [a2,e3]@9]/2", B: "[[b2,f#3]@4 [c#3,g#3]@3 [a2,e3]@17]/3",
})).s("gm_pad_sweep").gain(0.35).pan(0.3)

// other · whistle
const whistle = note("<~@2 A@2 B@2 C@2 ~@24 B@2 C@2 ~@26 B@2 D ~ B@2 ~@21 E@3 ~@5 F@3 ~@10 B@4 G@3>".pickRestart({
  A: "[~ d#6 e6 b6@7 ~@6]/2", B: "[~@2 e6 b6@2 d#6 e6 c#6@9, ~ d#6@2 ~@13]/2",
  C: "[~@4 e6@2 b6@3 ~ d#6@2 e6@2 c#6@18, ~ d#6@2 ~@13]/2", D: "~@4 e6@2 b6@4 d#6@2 e6 ~ c#6@2, ~ d#6@2 ~@5",
  E: "[~@3 e6@8 ~]/3", F: "[~ e6@3]/3", G: "[~@4 e6 ~ b6@4 d#6@2 e6 ~ c#6@34, ~ d#6@2 ~@21]/3",
})).s("gm_whistle").gain(0.4).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~@8 [x!4]!106 [~ x!3 ~ x!3] ~@2>").gain(0.45)

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

// drums · low tom
const low_tom = s("lt").struct("<~@7 [~@6 x!2] ~@109>").gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 [~@5 x ~@2] ~@109>").gain(0.35)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@15 A ~@3 B ~@11 A ~@3 A ~@7 A ~@3 B ~@11 A ~@3 A ~@7 A ~@3 A ~@3 B ~@11 A ~@3 A ~@7 A ~@7 A ~ C D ~@2
>`.pickRestart({
  A: "~@7 x", B: "x!8", C: "~@14 x!2", D: "~ x!3 ~ x!2 ~",
})).gain(0.45)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@11 A ~@7 A ~@7 A ~@11 A ~@7 A ~@7 A ~@3 A ~@11 A ~@7 A ~@19 A ~@5 B ~@2
>`.pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.45)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@8 A@21 B A B A B A B A@21 B A B A B A B A B A B A@37 B A B A B A B A B A ~@2
>`.pickRestart({
  A: "~ x!2 ~@5", B: "~ x!2 ~ x!3 ~",
})).gain(0.79)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@8 A@21 B A B A B A B A@21 B A B A B A B A B A B A@18 C A@7 C A@3 C A@6 B A B A B A B A B A ~@2
>`.pickRestart({
  A: "~@5 x!2 ~", B: "~@4 x!3 ~", C: "~@5 x!3",
})).gain(0.79)

// drums · claves
const claves = s("clave:2").struct(`<
  ~@9 A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@27 A
  ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@7 x",
})).gain(1.22)

stack(
  bass, lead_1_square, acoustic_guitar_steel, string_ensemble_1, music_box, pad_sweep, whistle, kick, snare, low_tom,
  hihat, mid_tom, open_hat, high_tom, crash, congas, congas_2, claves
)

More by Fleetwood Mac