Strudelify
Massachusetts cover art

Horizontal

Massachusetts

Bee Gees

KeyG majorTempo106 bpm
0:00/0:00
// Massachusetts — Bee Gees
// 106 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 3 "chord" harpsichord (copy of ch 7 "Piano" epiano2)
// note: Full arrangement: all 70 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(106/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 · "Bass"
const bass = note(`<
  ~ A B C D E F G H E F I H J K L M A N J O J P G@2 Q P H@2 J R S L T U A V E W J X J Y J Z E AA S AB T AC AD A AE AF AG
  AH AI J AJ T AK J AL E AM AN AO AP ~
>`.pickRestart({
  A: "g1@5 ~ g1 ~ g1@7 ~", B: "g1@8 ~@4 g1@3 ~ g1@14 ~@2", C: "g1@4 ~@2 g1 ~ g1@7 ~",
  D: "g1@9 ~@3 g1@2 ~@2 g1@7 ~ d2@7 ~", E: "g1@9 ~@3 g1@2 ~@2 g1@13 ~@3", F: "a1@10 ~@2 a1@3 ~ c2@14 ~@2",
  G: "g1@10 ~@2 g1@2 ~@2 g1@8 d2@7 ~", H: "g1@9 ~@3 g1@2 ~@2 g1@8 d2@6 ~@2", I: "g1@9 ~@3 g1@2 ~@2 g1@8 d2@7 ~",
  J: "g1@9 ~@3 g1@2 ~@2 g1@14 ~@2", K: "g1@9 ~@3 g1@4 a1@7 ~ b1@5 ~@3", L: "c2@5 ~ c2 ~ c2@7 ~",
  M: "c2@9 ~@3 c2@2 ~@2 c2@14 ~@2", N: "a1@9 ~@3 a1@3 ~ d2@14 ~@2", O: "a1@9 ~@3 a1@3 ~ d2@7 ~ d2@6 ~@2",
  P: "a1@9 ~@3 a1@3 ~ c2@15 ~", Q: "g1@10 ~@2 g1@3 ~ g1@14 ~@2", R: "g1@10 ~@2 g1@3 ~ a1@7 ~ b1@5 ~@3",
  S: "c2@10 ~@2 c2@2 ~@2 c2@13 ~@3", T: "g1@10 ~@2 g1@2 ~@2 g1@13 ~@3", U: "a1@10 ~@2 a1@3 ~ c2@13 ~@3",
  V: "a1@10 ~@2 a1@3 ~ d2@6 ~@2 d2@5 ~@3", W: "a1@9 ~@3 a1@2 ~@2 c2@14 ~@2", X: "g1@10 ~@2 g1@3 ~ g1@8 d2@8",
  Y: "a1@9 ~@3 a1@3 ~ c2@14 ~@2", Z: "g1@5 ~ g1 ~ g1@4 d2@3 ~", AA: "g1@10 ~@2 g1@3 ~ a1@7 ~ b1@6 ~@2",
  AB: "c2@10 ~@2 c2@3 ~ c2@14 ~@2", AC: "a1@15 ~", AD: "d2@15 ~", AE: "a1@10 ~@2 a1@3 ~ d2@7 ~ c2@4 ~@4",
  AF: "g1@5 ~ g1 ~ g1@5 ~ g1 ~", AG: "a1@10 ~@2 a1@3 ~ d2@10 ~@2 d2@3 ~", AH: "g1@10 ~@2 g1@2 ~@2 g1@11 ~ g1@2 ~@2",
  AI: "a1@9 ~@3 a1@3 ~ d2@8 c2@6 ~@2", AJ: "a1@10 ~@2 a1@3 ~ c2@11 ~ c2@2 ~@2", AK: "a1@10 ~@2 a1@3 ~ d2@7 ~ c2@6 ~@2",
  AL: "a1@10 ~@2 a1@3 ~ d2@6 ~@2 c2@5 ~@3", AM: "a1@5 ~ a1 ~ c2@5 ~ c2 ~", AN: "g1@29 ~@3", AO: "c2@29 ~@3",
  AP: "d2@31 ~",
})).s("gm_electric_bass_finger").gain(0.24)

// chords · string ensemble 1 · "String"
const string_ensemble_1 = note(`<
  A@5 ~@2 B@2 ~@2 C D@8 E@2 ~ F@2 ~@2 C G@8 H@2 ~ I@2 ~@2 J K@8 L@2 M N@4 O@8 P@2 ~
>`.pickRestart({
  A: "[~@31 d4@16 e4@8 g4@8 a4@4 b4@8 a4@4 b4@16 b5@8 a5@8 g5@7 f#5@9 e5@8 b4@4 a4@4 b4@14 ~@3]/5",
  B: "[~@11 d4@4 e4@7 g4@8 a4@5 b4@8 a4@3 b4@11 ~@7]/2", C: "~@11 d4@4 e4@8 g4@8 a4",
  D: "[~@3 b4@8 a4@4 b4@13 ~@2 g4@32 ~ f4@30 ~@2 [c5,e5]@61 ~@3 b4@29 ~@3 e5@15 [d4,f#4]@15 ~ [g4,b4]@13 d4@4 e4@7 g4@9 a4, ~@30 [b4,d5]@63 g4@98 a4@32 ~@33, ~@158 d5@30 ~@2 c5@17 ~@49]/8", // C D G Bm
  E: "[~@3 b4@8 a4@4 b4@3 d5@4 ~ b4@3 g4@5 d4@12 ~@21]/2", F: "[~@10 d4@4 e4@9 g4@8 a4@4 b4@7 a4@5 b4@10 ~@7]/2",
  G: "[~@3 b4@7 a4@5 ~@15 g4@32 f4@33 [g4,c5,e5]@15 c5@4 b4@4 a4@5 g4@4 e4@30 ~ g4@24 d5@8 [a4,c5]@16 [a4,d5]@16 [g4,b4]@13 d4@4 e4@8 g4@7 a4@2, ~@15 b4@80 ~@62 b4@28 ~@71, ~@29 d5@63 ~@164]/8", // C Am D5 G
  H: "[~@3 b4@7 a4@4 b4@4 d5@5 b4@4 g4@4 d4@10 ~@23]/2", I: "[~@5 d4@2 e4@4 g4@4 a4@2 b4@4 a4@2 b4@6 ~@3]/2",
  J: "~@5 d4@2 e4@4 g4@4 a4",
  K: "[~@3 b4@7 a4@5 ~@15 g4@32 f4@33 [g4,c5,e5]@15 ~ c5@4 b4@4 a4@4 g4@4 e4@31 [g4,b4,d5]@32 c5@33 d5@30 ~@3, ~@15 b4@81 ~@94 a4@61 ~@5, ~@30 d5@63 ~@163]/8", // C G
  L: "[~@11 d4@4 e4@8 g4@7 a4@4 b4@8 a4@4 b4@14 ~@4, [g4,b4,d5]@7 ~@25]/2", M: "[g4,b4,d5]@15 ~",
  N: "[a4@13 ~@18 [b4,d5]@31 [c5,e5]@14 ~@2 f#5@16 [g4,b4]@31 ~@2 [c5,e5], [c5,e5]@15 ~@24 d5@24 ~, ~@14 g4@46 ~@2 a4@31 ~@33 a4@2]/4", // Bm C G C
  O: "[~@14 f#5@16 [g4,b4]@31 ~@2 [c5,e5]@14 ~ [d5,f#5]@15 ~@2 g4@30 ~@34 [b4,d5]@30 ~@2 e5@14 ~@2 [d5,f#5]@13 ~@3 [g4,b4,d5]@33, ~@14 d5@47 ~@2 a4@30 ~ [b4,d5]@31 ~ c5@31 ~@33 c5@15 ~@51, ~@63 a4@7 ~ g4@23 ~ a4@15 ~@18, ~@127 e5@30 ~@99]/8", // G C D Bm D G Bm
  P: "[[c5,e5]@29 ~@2 [a4,d5]@17 ~@16]/2", // C D5
})).s("gm_string_ensemble_1").gain(0.26).pan(0.7)

// other · string ensemble 1 · "String"
const string_ensemble_1_2 = note(`<
  ~ A@4 ~@2 B@2 ~@2 C@6 D@4 E ~ F@3 ~ G@6 H@4 I ~ J@2 ~@2 K@5 L M@8 N@3 O@2 P@2 Q@4 ~@2
>`.pickRestart({
  A: "[d3@15 e3@9 g3@7 a3@5 b3@7 a3@5 b3@16]/2", B: "[~@11 d3@4 e3@7 g3@9 a3@5 b3@7 a3@4 b3@15 ~@2]/2",
  C: "[~@11 d3@4 e3@8 g3@8 a3@4 b3@8 a3@4 b3@16 g3@32 f3@31 ~ e3@65]/6",
  D: "[~@3 g3@27 a3@16 d4@9 c4@8 g3@12 d3@4 e3@8 g3@8 a3@4 b3@8 a3@4 b3@4 d4@4 b3@5 g3@4]/4", E: "d3@3 ~",
  F: "[~@11 d3@4 e3@8 g3@8 a3@4 b3@7 a3@5 b3@20 ~@29]/3",
  G: "[~@11 d3@4 e3@8 g3@7 a3@5 b3@7 a3@4 b3@17 g3@31 f3@17 g3@16 c4@15 ~@2 c4@3 b3@4 a3@4 g3@4 e3@31 ~@2]/6",
  H: "[~@11 g3@12 b3@7 a3@16 c4@9 b3@8 g3@12 d3@4 e3@8 g3@8 a3@4 b3@8 a3@4 b3@3 d4@5 b3@4 a3@5]/4", I: "~ d3@23 ~@8",
  J: "[~@11 d3@4 e3@8 g3@8 a3@5 b3@7 a3@4 b3@17]/2",
  K: "[~@11 d3@4 e3@8 g3@8 a3@4 b3@8 a3@4 b3@48 f3@15 g3@17 c4@14 ~@2 c4@4 b3@4 a3@5 g3@4]/5", L: "e3@21 ~@11",
  M: "[~@7 g3@7 a3@8 b3@9 c4@32 d4@28 ~@4 d3@12 ~ d3@4 e3@8 g3@7 a3@16 b3@7 ~ a3@5 ~@3 g3@15 ~ g3@6 ~@2 g3@8 a3@11 ~ a3@4 ~ c4@10 ~ c4@4 b3@24 a3@4 g3@5]/8",
  N: "[~ a3@24 ~@6 g3@14 ~@2 g3@6 ~@3 g3@7 a3@12 b3@4 c4@10 ~@2 c4@4 ~]/3", O: "[c4@6 ~ b3@15 a3@4 g3@5 a3@28 ~@5]/2",
  P: "[g3@13 ~@3 g3@6 ~@2 g3@5 ~@2 a3@11 ~ b3@3 ~ c4@9 ~@3 c4@3 ~@2]/2",
  Q: "[c4@6 ~ b3@15 a3@5 g3@4 a3@29 ~@3 c4@31 d4@19 e4@15]/4",
})).s("gm_string_ensemble_1").gain(0.24).pan(0.3)

// chords · epiano2 · "Piano"
const epiano2 = note("<~ A@4 B@4 C@4 D E@3 F@8 G@4 H I@4 J@7 K@4 L M@3 N@3 O@5 P@8 Q@5>".pickRestart({
  A: "[[b3,d4]@8 ~@12 [b3,d4]@4 ~@4 g3@4 g3@4 ~@12 b3@8 [b3,d4]@8 [g3,b3,d4]@8 g3@4 ~@8 d4@4 ~@4 g3@4 ~@27 b3@4 ~, ~@2 [b3,d4]@3 c4@16 ~@11, ~@12 g3@16 ~@8 g3@8 g3@20 ~@12 g3@16 ~@4 g3@8 g3@7 g3@16 ~, ~@24 [b3,d4]@8 [b3,d4]@8 d4@16 ~@16 d4@12 ~@4 d4@16 d4@15 d4@8 ~, ~@40 b3@8 ~@24 b3@7 b3@8 ~ b3@11 b3@8 ~ b3@7 b3@8 ~@5]/4", // Bm G Bm
  B: "[[b3,d4]@8 ~@7 b3@4 ~@9 [a3,c4]@15 c4@4 [c4,e4]@12 ~@5 g3@11 ~@9 d4@4 b3@4 b3@4 g3@4 ~@11 b3@4 [b3,d4]@5 [g3,b3,d4]@8, g3@12 g3@8 g3@23 a3@61 b3@7 ~@17, ~@8 d4@12 d4@39 [c4,e4]@64 ~@5, ~@8 b3@7 ~@4 b3@44 d4@16 b3@9 d4@8 [b3,d4]@8 d4@11 ~@13, ~@28 e4@19 g3@16 ~ b3@11 g3@20 ~@5 g3@8 g3@12 ~@8]/4", // Bm Am C Bm G C Bm
  C: "[b3@3 b3@4 ~@8 b3@4 ~@8 c4@13 ~@4 g3@4 [c4,e4]@11 ~@5 [b3,d4]@8 ~@12 d4@4 g3@8 ~@4 b3@4 g3@4 ~@12 d4@8, c4@27 e4@17 a3@60 b3@4 g3@20, g3@11 ~ g3@8 g3@7 a3@13 c4@8 g3@12 e4@64 ~@4, d4@2 d4@3 d4@11 g3@2 [b3,d4] g3 b3@2 [b3,d4]@2 g3@2 d4@3 b3@3, ~@8 b3@7 ~@4 b3@40 c4@64 ~@5]/4", // C Bm
  D: "[b3,d4]@8 ~@20 [b3,d4]@3 b3, g3@3 g3@3 g3@2, ~@2 [b3,d4]@3 [b3,d4]@2 ~", // Bm
  E: "[[f3,d4]@12 [b3,d4]@4 [b3,d4]@7 ~@9 g3@8 ~@19 c4@4 ~ e4@8 ~@20 g3@4, ~@12 f3@11 [f3,b3,d4]@64 ~@9, ~@4 e4@2 e4@2 ~ e4@2 ~, ~@32 c4@12 c4@7 c4@8 ~@5 c4@12 c4@12 [c4,e4]@8, ~@40 g3@15 ~ g3@8 g3@20 g3@8 ~@4]/3", // Dm Bm Bdim C
  F: "[[b3,d4]@7 ~@25 a3@12 a3@11 ~ d4@8 d4@11 ~@58 b3@3 b3@4 ~@20 a3@8 ~@3 c4@4 ~ e4@11 ~ g3@3 ~@29 b3@4 g3@4 ~@16 d4@3 ~@4 b3@5, g3@6 g3@6 [g3,b3]@16 a3@16 g4@21 g3@3 d4@2 b3@2 g3@4 d4@18 e4@32 ~@2, ~@7 d4@12 d4@36 f#4@25 e4@40 b4@55 [g3,c4]@12 c4@61 g3@8, ~@7 b3@8 b3@8 ~@9 c4@43 d4@37 b4@4 d5@44 [c4,e4]@8 a3@60 g3@4 b3@4 g3@11 d4@9, ~@32 e4@32 [g3,b3]@32 a4@4 b4@8 a4@40 b3@43 [b3,d4] g3@8 [b3,d4]@4 g3@4 b3@8 d4@8 [b3,d4]@8 d4@8 b3@11 ~@5]/8", // Bm G C5 C G Bm
  G: "[~@32 c4@8 ~@8 g3@8 ~@24 b3@8 [g3,b3]@8 b3@3 b3@5 g3@4 ~@7 d4@4 ~ [g3,b3,d4]@8, g3@16 g3@16 a3@8 c4@3 a3@64 ~ g3@12 ~@8, ~@4 b3@7 b3@8 ~ b3@8 b3@31 [c4,e4]@64 ~@5, ~@8 d4@16 d4@39 [b3,d4]@9 d4@16 d4@16 d4@11 ~@13, ~@32 e4@16 [c4,e4]@8 g3@7 ~ g3@8 b3@4 g3@12 ~@8 g3@8 b3@7 ~ b3@8 ~@8]/4", // G C Bm C
  H: "[b3,d4] ~ b3 [g3,b3,d4], ~ d4@2 ~, ~ b3 ~@2, ~@3 g3@3 ~@2", // Bm G
  I: "[f3@12 f3@4 f3@8 ~@8 g3@8 ~@19 g3@4 [c4,e4]@9 ~@11 e4@4 g3@4 ~ g3@3 [b3,d4]@8 ~@20 g3@5, [b3,d4]@16 [b3,d4]@60 g3@11 ~@8 g3@12 ~ g3@15 ~@5, ~@24 f3@64 ~@16 b3@7 b3@8 ~ b3@8, ~@32 e4@12 c4@4 e4@15 ~@9 e4@11 ~@21 d4@11 d4@13, ~@32 c4@8 g3@16 c4@7 g3@9 c4@8 c4@7 [c4,e4]@41]/4", // C Bm C
  J: "[a3@11 a3@4 ~ d4@16 g3@12 ~@7 g3@4 ~@9 [a3,c4,e4]@3 ~@9 a3@3 ~@17 [b3,d4]@7 ~@13 d4@4 ~@8 a3@8 ~@3 c4@4 ~@17 [b3,d4]@8 ~@7 b3@8 ~ [b3,d4]@8 [b3,d4]@7 ~@13 d4@4 [g3,d4]@8, [c4,e4]@56 d4@23 f#4@49 c4@8 a3@64 b3@8 b3@16, ~@16 f#4@56 e4@8 d4@8 [c4,e4]@23 b3@8 ~ [b3,d4]@40 ~@8 d4@16 ~@15 d4@12 ~@13, ~@16 a3@48 ~@3 [c4,e4] a3@3 c4@9 a3@48 e4@16 [c4,e4]@12 [c4,e4]@64 ~@4, ~@32 [b3,d4]@12 g3@4 b3@8 [g3,b3]@40 g3@7 [b3,d4]@5 g3@35 g3@9 g3@8 g3@8 b3@4 g3@19 ~ g3@12 g3@12 ~@8]/7", // Am Bm G5 C Bm C Bm G …
  K: "[b3@8 ~@8 b3@4 ~@8 a3@8 ~@12 [c4,e4]@8 ~@4 g3@4 [b3,d4]@8 ~@11 d4@4 ~ b3@8 b3@7 ~@5 g3@4 ~@12 b3@3 [g3,b3], g3@12 g3@7 ~ g3@28 g3@12 ~@4 g3@8 b3@4 g3@20 g3@7 b3@13 b3@8 ~@4, ~@2 d4@3 ~@2 [c4,e4]@3 [c4,e4]@2 ~@2 [c4,e4]@16 ~@2, ~@8 b3@8 ~@4 [b3,d4]@44 ~@8 d4@8 b3@8 d4@15 d4@17 d4@7 ~, ~@36 a3@8 a3@64 ~@4 g3@15 ~]/4", // C Bm G C Bm
  L: "d4@8 ~@8 b3@3 b3@4 ~ g3@4 g3@3 [f3,b3,d4], ~@8 d4@16 d4@7 ~, ~@8 b3@8 ~@7 b3@8 ~, ~@3 g3@3 ~@2", // Bdim
  M: "[~@8 f3@4 ~@3 b3@4 ~ b3@4 ~@8 [c4,e4]@8 ~@7 c4@4 ~@28 g3@4 ~ c4@4 ~@4 g3@4, ~@8 d4@11 ~ d4@63 g3@8 ~@5, ~@8 b3@7 ~@9 b3@64 ~@8, ~@12 f3@59 g3@4 c4@9 ~@4 c4@8, ~@32 g3@8 [c4,e4]@4 g3@7 c4 g3@4 e4@3 c4@4 g3@4 c4@4 e4@12 e4@13]/3", // C
  N: "[[b3,d4]@8 ~@7 b3@8 ~@9 a3@32 [a3,d4,f#4]@32, g3@3 g3@3 [g3,b3]@16 ~@2, ~ d4@2 d4@5 ~@4, ~@8 b3@7 ~@16 e4@64 ~, ~ c4@2]/3", // Bm D G
  O: "[[b3,d4]@8 ~@8 b3@8 ~@8 a3@4 ~@8 a3@4 ~@16 [b3,d4]@8 ~@7 b3@8 ~@9 a3@8 ~@4 [c4,e4]@4 [g3,c4,e4]@11 ~ g3@4 [b3,d4]@8 b3@4 ~@7 b3@4 ~ [g3,b3,d4]@8, g3@12 g3@12 [g3,b3]@32 [c4,e4]@32 g3@24 ~@11 [c4,e4]@36 ~, ~ d4@2 d4@3 f#4@8 ~@3 d4@2 ~, ~@8 b3@7 ~@17 [c4,e4]@8 [c4,e4]@8 d4@16 g3@8 [b3,d4]@4 g3@12 [b3,d4]@40 g3@12 b3@4 g3@8 ~@8, ~@9 a3@2 ~ a3@12 [c4,e4]@2 a3@14]/5", // Bm C Bm G C Bm C
  P: "[a3@12 ~@15 c4@4 ~ b3@8 b3@3 ~@8 b3@4 ~@9 [a3,c4,e4]@11 ~ a3@3 ~@17 g3@12 ~@52 g3@19 ~@13 [a3,c4,e4]@12 [c4,e4]@4 [c4,e4]@12 ~@4 g3@12 ~@15 g3@5, [c4,e4]@19 [c4,e4]@4 b3@4 e4@5 g3@8 d4@3 b3@5 g3@7 [g3,b3]@33 [c4,e4]@23 b3@5 d4@12 [c4,e4]@16 f#4@60 a3@52, ~@12 a3@43 d4@24 a3@41 b3@24 d4@7 e4@9 [b3,d4]@20 g3@28 g3@16 b3@12 g3@11 b3@9, ~@15 f#4@64 f#4@49 a3@55 b3@37 [c4,e4]@36, ~@15 d4@8 d4@9 c4@32 ~@11 [c4,e4]@4 d4@17 [b3,d4]@12 g3@44 c4@35 d4@36 ~ d4@15 b3@4 d4@13]/8", // Am C G C Bm C Bm
  Q: "[~@3 [d4,f#4]@2, a3@2 ~@3, [c4,e4]@3 [c4,e4]@5 [c4,e4]@8 ~@4, ~ f#4@4 ~@5, ~ d4 [g3,b3,d4]@4 ~@4]/5", // D C G
})).s("gm_epiano2").gain(0.22).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x!2 ~@3]!49 x ~ [x ~@2 x!2 ~@3]!14 x!3 ~>").gain(0.32)

// drums · rim
const rim = s("rim").struct("<~@5 A@15 B A@15 B A@13 ~@2 A@14 ~@4>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~",
})).gain(0.28)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!3 [~@4 x ~@6 x ~@4] ~@55 [~ x ~@2] ~@9>").gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@4 [~@7 x] ~@48 [~@7 x] ~@11 [~@7 x] ~@4>").gain(0.24)

// drums · hihat
const hihat = s("hh").struct("<[x!4] [~ x!7] [x!8]!48 ~ [x!4] [x!8]!14 ~@4>").gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 [~@3 x] ~@48 [~@3 x] ~@11 [~@3 x] ~@4>").gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<~@12 A ~@7 A ~@7 A ~@7 A ~@7 A ~@25>".pickRestart({
  A: "~@7 x",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct("<~ A ~@48 A ~ A ~ A ~@3 A ~@3 A ~@3 A@3 ~>".pickRestart({
  A: "x",
})).gain(0.28)

// drums · ride
const ride = s("rd").struct("<~@5 A ~@7 A ~@5 A ~ A ~@7 A ~@5 A ~ A ~@7 A ~@24>".pickRestart({
  A: "x",
})).gain(0.28)

stack(
  bass, string_ensemble_1, string_ensemble_1_2, epiano2, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, crash,
  ride
)

More by Bee Gees