Strudelify

Songbird

Fleetwood Mac

KeyF majorTempo90 bpm
0:00/0:00
// Songbird — Fleetwood Mac
// 90 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 7 "PIANO1" piano (copy of ch 1 "PIANO1 OBOE1" piano)
// note: Full arrangement: all 74 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · piano · "PIANO1 OBOE1"
const piano = note("<[~@2 a5 a5@2 g5@2 bb4] [e5@3 d5@3 d5 e5] [c5@5 f4@3] [e4 d4 d4@3 d4@2 e4] [f4@3 ~@5] ~@69>")
  .s("gm_piano").gain(0.31)

// other · piano · "PIANO1"
const piano_2 = note(`<
  A B C D E F ~@12 G H@3 ~@12 G I@4 J@4 K L@2 M@2 N@2 O@5 P Q@3 I@4 J@4 R@2 S ~ T U V
>`.pickRestart({
  A: "~@2 f5 f5@2 d5@2 bb4", B: "c5@6 bb4@6 bb4@2 ~ g4", C: "a4@2 g4 f4 c4@6 c4@6", D: "c4 bb3 bb3@3 bb3@2 ~",
  E: "c4@3 c4 a4@3 c4", F: "a4@3 c4 a4 c5@3", G: "~@3 c4 a4@3 c4",
  H: "[a4@4 g4 a4 f5 e5@2 d5@2 c5@2 a4@2 g4@2 f4@2 c4 d4 f4 g4 a4]/3",
  I: "[a4@3 c4 a4 ~@2 g4@2 ~@2 e5@2 ~@2 d5@2 ~@2 bb4@2 ~@2 f5@2 ~@3 a4@2 g4@2]/4",
  J: "[f4@3 f4@2 ~@2 d5@4 bb4@4 bb4@5 bb4@3 a4@8 c4]/4", K: "a4@4 a4 c4 a4 c4", L: "[bb4@3 f4 d5@7 f4 d5@2 d5 c5]/2",
  M: "[c5@4 a4@9 a4@2 c4]/2", N: "[bb4@4 d5@9 d5@2 c5]/2",
  O: "[c5@4 a4@7 c4 a4 ~@2 g5@3 ~ d5@3 d5 a4@5 ~@2 f5 d5@2 c5 bb4 f4 d5@3 f4]/5", P: "d5@3 f4 bb4 f4 bb4 f4",
  Q: "[bb4@2 ~ bb4@4 d5@4 d5@4 c5@5 c5@3 c4]/3", R: "[~ f5@3 bb4@3 a4@3 c5@3 c4 a4 g4]/2", S: "~ f5@6 ~ bb4@6 f4@2",
  T: "~ a5 g5 g5@2 e5!2 d5", U: "c5@3 g4 a4 c5 d5 c5", V: "c6@15 ~",
})).s("gm_piano").gain(0.31)

// other · piano · "PIANO1"
const piano_3 = note(`<
  A B C D E F G H I J K L@2 M@4 N O P ~@2 G H Q J K L@2 M@4 N O R@4 S@3 ~ T U@2 V@2 W@2 X@5 Y Z@3 AA@4 S@3 ~ AB@2 AC@2
  AD AE AF
>`.pickRestart({
  A: "~@2 c5 c5@2 bb4@2 bb4", B: "g4@3 f4@3 f4 ~", C: "~@5 a3 f3 a3", D: "g3 f3 f3@3 f3@2 ~", E: "a3@3 c4 f4@3 c4",
  F: "f4@3 c4 f4 a4@3", G: "f4 d4", H: "d4@2 [f4,d5]@7 ~@7", I: "f4@7 ~ c4@2 a3 ~ c4@2 d4 ~",
  J: "c4@6 a3@2 f4@2 c5@5 ~", K: "d5@4 d5@3 f4", L: "[d5@4 d5@2 d5@4 ~@4 f5@4 a4@4 g4 a4 g4@2 f4@2 c4@2 c4@2]/2",
  M: "[c4@6 c4@2 f4@2 ~@4 d5@4 ~@4 bb4@4 bb4@4 f4@10 ~@4 d5@2 bb4@9 ~ bb4@2 f4@2 bb4@2 d5@2]/4", N: "bb4@3 ~ bb4@4",
  O: "f4@3 ~ f4@3 ~", P: "f4 ~", Q: "f4@7 ~ c4@2 a3 ~ c4@2 d4@2",
  R: "[f4@3 ~@4 e4@2 ~@2 c5@2 ~@2 bb4@2 ~@2 f4@2 ~@2 d5@2 ~@5 e4@2]/4",
  S: "[d4@6 d4@4 ~@4 bb4@7 ~ f4@8 f4@10 f4@6 ~@2]/3", T: "f4@4 f4 ~ f4 ~",
  U: "[f4@6 ~@2 bb4@14 ~@2 bb4@4 bb4@2 ~ g4]/2", V: "[a4@4 f4@9 f4@2 ~]/2", W: "[f4@8 bb4@18 bb4@4 ~ g4]/2",
  X: "[a4@4 f4@7 ~ f4 ~@2 d5@3 ~ bb4@3 bb4 f4@5 ~@2 d5 bb4@2 ~@3 bb4@3 ~]/5", Y: "bb4@3 ~@5",
  Z: "[f4@2 ~ f4@4 bb4@4 bb4@4 a4@5 a4@3 ~]/3",
  AA: "[f4@3 ~ f4 ~@2 e4@2 ~@2 c5@2 ~@2 bb4@2 ~@2 f4@2 ~@2 d5@2 ~@5 e4@2]/4", AB: "[~ d5@3 f4@3 f4@3 a4@3 ~ f4 ~]/2",
  AC: "[~ d5@6 ~ f4@6 c4@16 ~@2]/2", AD: "~ e5 d5 d5@2 c5!2 bb4", AE: "a4@3 ~@5", AF: "a5@15 ~",
})).s("gm_piano").gain(0.31)

// other · piano · "PIANO1"
const piano_4 = note(`<
  A B C ~@4 D E F G H ~@11 D I F G H ~@9 J@2 ~@5 K@2 L@2 M@2 N@2 ~@6 O ~@2 J@2 ~@4 P Q R ~ S T ~
>`.pickRestart({
  A: "~ c3 f3@6", B: "~ g2 c3@3 c3@2 c3", C: "~@2 c3 f3@2 ~@3", D: "~@2 bb4@7 ~@7", E: "c4@7 ~ c4@2 a3 ~ a3@2 bb3 ~",
  F: "a3@6 a3@2 c4@2 a4@5 ~", G: "bb4@4 bb4@3 ~", H: "bb4@2 bb4 bb4@2 ~@2 c5", I: "c4@7 ~ c4@2 a3 ~ a3@2 bb3@2",
  J: "[~@7 a4@2 ~@7]/2", K: "[d4@3 ~ f4@7 ~@5]/2", L: "[~@4 c4@9 c4@2 ~]/2", M: "[d4@4 f4@9 f4@2 ~]/2",
  N: "[~@4 c4@7 ~@5]/2", O: "~@7 g4 ~@8", P: "~ bb4@3 ~@4", Q: "~@3 g4 ~@12", R: "~ bb4@6 ~@9",
  S: "~@2 c5@2 bb4@2 bb4@4 g4@2 g4@2 f4 g4", T: "~@15 g5",
})).s("gm_piano").gain(0.26)

// other · piano · "PIANO1"
const piano_5 = note(`<
  A B A C D E F G D E F G D E H I F G D@3 E F G D E F G D E H I F G D E J K L M G N E@2 F G D E F G D E H I F G O N D E
  J K L M G N E N E N E P Q@2
>`.pickRestart({
  A: "f2", B: "c2", C: "c2@3 c2 c2@2 c2@2", D: "f2 c3 f3 c3 f2 c3 f3 c3", E: "f2 c3 f3 c3 f2 c3 f3 ~",
  F: "bb2 f3 bb3 f3 bb2 f3 bb3 f3", G: "bb2 f3 bb3 f3 bb2 f3 bb3 ~", H: "g2 d3 g3 ~ bb2 f3 bb3 ~",
  I: "d3 a3 d4 a3 d3@2 c3@2", J: "c2 g2 c3 g2 c2 g2 c3 ~", K: "bb1 f2 bb2 f2 bb1 f2 bb2 ~",
  L: "d2 a2 d3 a2 d2 a2 d3 a2", M: "d2 a2 d3 a2 d2 a2 d3 ~", N: "c3 g3 c4 g3 c3 g3 c4 ~", O: "c3 g3 c4 g3 c3 g3 c4 g3",
  P: "c2@7 ~ c3@3 ~ c3@3 ~", Q: "[f2@31 ~]/2",
})).s("gm_piano").gain(0.2)

// other · piano · "PIANO1"
const piano_6 = note(`<
  [~@2 f5 f5@2 d5@2 bb4]
  [c5@6 bb4@6 bb4@2 ~ g4]
  [a4@2 g4 f4 c4@6 c4@6]
  [c4 bb3 bb3@3 bb3@2 ~]
  [c4@3 ~@5]
  ~@69
>`).s("gm_piano").gain(0.31)

// other · piano · "PIANO1"
const piano_7 = note(`<
  [~@2 c5 c5@2 bb4@2 bb4]
  [g4@5 ~ f4@6 f4@2 ~@2]
  [~@5 a3 f3 a3]
  [g3 f3 f3@3 f3@2 ~]
  [a3@3 ~@5]
  ~@69
>`).s("gm_piano").gain(0.31)

stack(piano, piano_2, piano_3, piano_4, piano_5, piano_6, piano_7)

More by Fleetwood Mac