Strudelify
KeyD minorTempo90 bpm
0:00/0:00
// Tusk — Fleetwood Mac
// 90 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "Acoustic Grand Piano" piano (copy of ch 1 "French Horn" french horn); ch 6 "Acoustic Bass" acoustic bass (copy of ch 3 "Electric Bass - Pick" electric bass pick); ch 12 "Acoustic Guitar (steel)" acoustic guitar steel (copy of ch 3 "Electric Bass - Pick" electric bass pick); ch 14 fretless bass (copy of ch 13 overdriven guitar)
// note: Full arrangement: all 63 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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 · electric bass pick · "Electric Bass - Pick"
const bass = note(`<
  ~@19 A B C D@2 E F G H I J K L M N O@2 M P Q O M R ~@5 S@2 T N S@2 T N S@2 T N S@2 T N
>`.pickRestart({
  A: "~@4 f2 e2 d2 a1", B: "d2@3 a1!3 c2 ~ d2 ~ d2 ~ a1 ~ c2 ~", C: "d2@3 a1!3 c2@2 d2@4 a1@4",
  D: "d2@2 a1 c2 d2@2 a1@2", E: "d2 ~ a1 c2 d2@2 a1@2", F: "d2 ~ a1 c2 d2@2 a1 c2", G: "d2 ~ a1 ~ d2 ~ a1 c2",
  H: "d2@2 ~@2 a1@2 ~@2 d2 ~ c2 ~ a1 ~ d2 ~", I: "a1 d2 a1 d2", J: "g2@2 d2 g2 a1!2 a2 e2",
  K: "f2 ~ d2 ~ a1 ~ c2 ~ d2 ~ d2 ~ a1 ~ c2 ~", L: "d2!2 a1 c2 d2@2 a1@2", M: "d2@2 a1@2 d2@2 a1 d2",
  N: "c2@2 a1@2 c2@2 a1 c2", O: "d2@2 a1@2 d2@2 a1 c2", P: "c2@2 g1@2 c2@2 a1 c2", Q: "f2 ~ d2 ~ a1 ~ c2 ~ d2@4 a1@4",
  R: "c2 g1 c2 a1", S: "d2!2 a1 c2 d2!2 a1 c2", T: "~@2 a1 c2 d2@2 a1 d2",
})).s("gm_electric_bass_pick").gain(0.4)

// bass · tuba
const bass_2 = note("<~@25 A ~@4 B ~ C D ~@3 D ~@3 E ~@8 F ~@3 G ~@3 H ~@3 I>".pickRestart({
  A: "~@10 d2!2 ~@4", B: "f2 d2 ~@6", C: "~@2 d2 ~ d2 ~@11", D: "~@2 c2 ~@3 g1 ~@9", E: "~@2 c2 ~@3 g1 ~@3 c2 ~ g1 ~@3",
  F: "c2@2 g1 ~ c2 ~@3", G: "~@2 c2 ~@3 g1 ~@3 c2@2 g1 ~@3", H: "~@2 c2@2 ~@2 g1 ~@3 c2@2 g1 ~@3",
  I: "~@2 c2@2 ~@2 g1@2 ~@2 c2 ~ g1 ~@3",
})).s("gm_tuba").gain(0.8)

// chords · trumpet
const trumpet = note("<~@35 A B C D A E C ~@8 F G H I J K L M N O P Q R>".pickRestart({
  A: "~ f5 d5@6", B: "~ a4 c5 ~ d5@12", C: "~@2 c5 ~@3 b4 ~@9", D: "f5 e5 d5@12 ~@2",
  E: "~@2 f5 ~ [d5,a5,d6]@12, ~ c5@2 ~@13", F: "~ c5 ~ b4 ~@4", G: "~@2 f5@2 d5@3 c5 d5 ~ e5 ~ f5 e5 d5 ~",
  H: "~ a4 c5 ~ d5@3 c5 ~@2 e5 ~ f5 ~ g5 ~, ~ d5",
  I: "~ c5 d5 ~ f5@2 ~ c5 [b4,d5,f5] ~ [c5,e5,g5] ~ [d5,f5,a5] ~ [e5,g5,b5] ~", J: "~@2 c5@2 ~@2 b4 ~@9",
  K: "~@2 [b4,d5,f5] ~ [d5,a5,d6]@12", L: "~ a4 c5 ~ d5@12, ~ b4@2 ~",
  M: "~@2 f5 ~ d5@2 ~ [a4,c5,e5] [b4,d5,f5] ~ [c5,e5,g5] ~ [d5,f5,a5] ~ [e5,g5,b5] ~", // Am Bdim C Dm Em
  N: "[d4,g4,c5] [e4,g4,b4] [d4,g4,c5] f5", O: "d5@2 [b4,d5,f5] ~ [d5,a5,d6]@12",
  P: "~ a4 c5 ~ [a4,d5]@12, ~@4 f4 ~@11", Q: "~@2 f5 ~ [d5,a5,d6]@12",
  R: "[e4,a4,c5] [d4,g4,b4] [e4,g4,c5] [e4,a4,db5]", // Am G C A
})).s("gm_trumpet").gain(0.26)

// chords · overdriven guitar · D5 C5 D5 C5 D5 C5
const overdriven_guitar = note(`<
  ~@21
  [~ [a3,d4]!3 ~ [a3,d4] ~ [g3,c4]]
  [~@2 [a3,d4]@2 [a3,d4]@2 [a3,d4]@2 ~@2 [a3,d4] ~@3 [g3,c4] ~]
  [~ [a3,d4]!3 ~ [a3,d4] ~ [g3,c4]]
  ~@39
>`).s("gm_overdriven_guitar").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  [x ~@3 x!2 ~ x!2 ~@3 x!2 ~ x]!2
  [x!4]
  [x ~@3 x!2 ~ x!2 ~@3 x!2 ~ x]
  [x!4]!38
  ~@5
  [x!4]!16
>`).gain(0.8)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2
  [~@5 x ~ x ~@5 x ~ x]
  ~
  [~@5 x ~ x ~@5 x ~ x]!38
  [~@3 x ~@3 x ~@8]
  ~@4
  [~@5 x ~ x ~@5 x ~ x]!16
>`).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@43 [~@6 x ~@6 x!2 ~] [~@4 x!2 ~@5 x!2 ~@3] [~@2 x!2 ~@6 x ~@5] [~ x!2 ~@13] ~@16>")
  .gain(0.48)

// drums · low tom
const low_tom = s("lt").struct(`<
  [x ~ x ~ x!5 ~ x ~ x!4]!42
  ~
  [x ~ x ~@2 x ~ x ~@2 x ~ x ~ x ~]
  [~ x ~ x ~@2 x ~ x ~ x ~@2 x ~ x]
  [~@2 x ~ x ~ x ~@2 x ~ x ~@2 x ~]
  x
  [x ~ x ~ x!5 ~ x ~ x!4]!16
>`).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  [~ x ~ x ~ x ~ x]!42
  [~@4 x!5 ~ x!2 ~ x!3]
  [~ x!4 ~@3 x!4 ~@3 x]
  [x ~ x ~@3 x!2 ~ x!2 ~@3 x ~]
  [x!2 ~@3 x!4 ~@3 x!4]
  ~
  [~ x ~ x ~ x ~ x]!16
>`).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<[~ x ~ x ~ x ~ x]!42 [~@3 x!3 ~ x ~ x ~@2 x ~@3] ~@4 [~ x ~ x ~ x ~ x]!16>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@47 [x!16]!3 ~@13>").gain(0.4)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@59 [x!16]!2 [~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2] ~>").gain(2.03)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@47 [x!16]!3 ~@13>").gain(0.58)

stack(
  bass, bass_2, trumpet, overdriven_guitar, kick, kick_soft, snare, low_tom, mid_tom, high_tom, tambourine, cabasa,
  woodblocks
)

More by Fleetwood Mac