Strudelify
Something cover art

Abbey Road

Something

The Beatles

KeyA minorTempo80 bpm
0:00/0:00
// Something — The Beatles
// 80 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 13 "bass2" fretless bass (copy of ch 2 "bass" fretless bass); ch 3 "rhodes piano" epiano1 (copy of ch 14 "chorused piano2" epiano1); ch 15 "strings2" string ensemble 1 (copy of ch 6 "strings" string ensemble 1); ch 6 "strings" string ensemble 1 (copy of ch 9 "voice oohs2" voice oohs)
// note: Full arrangement: all 79 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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 · fretless bass · "bass"
const bass = note(`<
  ~@2 A B@2 C D E F G H I B@2 C J K L M N O P Q R S T U V W X Y Z AA AB AC L AD AE AF AG B@2 D E AH AI AJ I B C@2 D K L
  Q AJ I AK Q AL AM T AN V AO AG C B@2 J AP F U AQ I AK AR AS@2
>`.pickRestart({
  A: "f2@10 ~@2 f2@3 ~ d#2@8 d2@8", B: "c2@11 ~ c2@4 g2@10 ~@2 g2@4", C: "c2@11 ~ c2@4 g2@11 ~ g2@3 ~",
  D: "f2@10 ~@2 f2@3 ~ f2@7 ~ e2@7 ~", E: "d2@10 ~@2 d2@3 ~ a1@8 d2@5 ~@3", F: "g2@7 ~ a1@7 ~ b1@11 ~ b1@4",
  G: "a1@10 ~@2 a1@3 ~ g#2@6 ~@2 g#2@5 ~@3", H: "g2@5 ~ g2 ~ d2@5 ~ d2 ~", I: "f2@12 c2@3 ~ d#2@7 ~ d2@7 ~",
  J: "f2@11 ~ f2@4 f2@7 ~ e2@7 ~", K: "d2@12 a1@4 d2@2 ~@2 d2@2 ~@2 d2@3 ~ a1@4", L: "g2@7 ~ a1@7 ~ b1@12 d2@3 ~",
  M: "a1@10 ~@2 a1@2 ~@2 g#2@10 ~@2 g#2@3 ~", N: "g2@6 ~@2 g2@5 ~@3 d2@6 ~@2 d2@5 ~@3",
  O: "f2@11 ~ f2@4 d#2@7 ~ d2@7 ~", P: "a1@3 e2 a1@2 a1 ~", Q: "a1@10 ~@2 a1@3 ~ g#2@10 ~@2 g#2@3 ~",
  R: "f#2@12 c#2@3 ~ e2@10 ~@2 e2@3 ~", S: "d2@11 ~ d2@4 g2@11 ~ g2@4", T: "a1@11 ~ a1@4 e2@10 ~@2 e2@4",
  U: "a1@11 ~ a1@4 g#2@11 ~ g#2@4", V: "f#2@12 c#2@3 ~ e2@11 ~ e2@4", W: "d2@10 ~@2 d2@3 ~ g2@12 d2@3 ~",
  X: "c2@11 ~ c2 ~@3 c2@10 ~@2 c2@2 ~@2", Y: "c2@11 ~ c2 ~@3 c2@11 ~ c2 ~@3", Z: "c2@11 ~ c2@2 ~@2 c2@11 ~ c2@3 ~",
  AA: "c2@11 ~ c2@2 ~@2 c2@2 ~@2 c2@6 ~@2 c2@3 ~", AB: "f2@5 ~ f2 ~ f2@4 e2@4", AC: "d2@3 a2 d2@2 d2 ~",
  AD: "a1@5 ~ a1 ~ g#2@5 ~ g#2 ~", AE: "a1@5 ~ a1 ~ d2@5 ~ d2 ~", AF: "f2@6 ~@2 f2@5 ~@3 d#2@8 d2@8",
  AG: "c2@10 ~@2 c2@3 ~ g1@8 c2@5 ~@3", AH: "g2@7 ~ a1@7 ~ b1@10 ~@2 b1@3 ~",
  AI: "a1@10 ~@2 a1@2 ~@2 g#2@6 ~@2 g#2@5 ~@3", AJ: "g2@6 ~@2 g2@5 ~@3 d2@10 ~@2 d2@2 ~@2",
  AK: "a1@11 ~ a1@4 e2@11 ~ e2@3 ~", AL: "f#2@10 ~@2 f#2@3 ~ e2@11 ~ e2@4", AM: "d2@11 ~ d2@4 g2@10 ~@2 g2@3 ~",
  AN: "a1@12 e1@3 ~ g#2@10 ~@2 g#2@3 ~", AO: "d2@12 a1@3 ~ g2@11 ~ g2@4", AP: "d2@11 ~ d2@4 a2@10 ~@2 a2@4",
  AQ: "a1@11 ~ a1@4 d2@10 ~@2 d2@3 ~", AR: "~ f2@12 c2@3 ~ d#2@8 d2@7", AS: "[~ c2@17 ~@14]/2",
})).s("gm_fretless_bass").gain(0.78)

// other · piano · "melody-piano"
const piano = note("<~@22 A@3 B C@2 D@2 ~@9 E F G H I J K L M N O P Q R S T U V W ~@21>".pickRestart({
  A: "[~@7 c#5 c#5@4 ~@3 c#5 c#5@4 ~@2 c#5@2 e5 ~@2 f#5@2 ~ c#5@21 ~@6 c#5@2 e5@3 ~ f#5@13 ~@4 g5@8 ~ f#5@5 ~ d5]/3",
  B: "e5@17 ~@15", C: "[~@6 c#5@2 ~@2 c#5@2 ~ c#5@2 ~@2 c#5@3 c#5@3 ~ e5@2 f#5@3 ~ c#5@24 ~@3 c#5@2 e5@5]/2",
  D: "[~ f#5@14 ~ g5@7 ~ f#5@3 ~ d5 e5@28 ~@7, ~@29 d#5 ~@34]/2", E: "~ c5 ~@4 c5@3 ~ c5@2 c5@2 ~@3 c6@10 ~ g5@4",
  F: "~ b5@17 ~@6 e6 ~ d#6 ~ d6 c#6 c6@2", G: "a#5@11 ~@2 a#5 c6 ~@2 d6@3 c6 ~ a#5 ~@2 a5 ~ g5 ~ e5 ~@2",
  H: "~ f5 ~ a5 ~ f5 d5 ~ c5@2 ~@2 a4@2 f4@2 ~ d4@2 c4@4 ~@4 c4 ~ c#4@2 ~",
  I: "d4@4 ~ d4 ~ d4 ~ f#4@3 ~ f#4 ~ f#4@2 a4@4 d5@3 ~ c5@3 ~ a4@2 ~", J: "g4 a4 ~ g#4@2 g4@13 ~@9 g4 g#4 ~@3",
  K: "~ a4@2 c5@3 a4 ~@2 e5@2 ~ a4 ~ c5@11 ~@3 c5 ~ d5 ~, ~@9 d5 ~@22",
  L: "~@2 d5 e5@2 ~ [d5,e5] c5 ~@2 d5@2 e5@2 d5 c5 ~ a4@12 ~@3, ~@3 d#5 ~@28", // Dsus2
  M: "~@3 g4 a4@3 ~ c5@3 ~ a4@2 ~@2 a#4@6 ~@2 b4@6 ~@2, ~@4 g#4 ~@27", N: "c5@4 ~ c5@3 c5@4 ~ c5@3 c5@7 ~@2 c5@4 ~@3",
  O: "b4@23 ~ e5@5 ~ e5 ~", P: "b4 ~@2 a#4@8 ~ a#4@2 c5 ~ d5@6 ~@2 d5@2 ~@3 c5@2 ~",
  Q: "~ d5@2 c5 ~ a4 ~ f4 ~ d4@2 c4@16 ~ c4 ~ [b3,c#4] ~", R: "d4@4 ~ d4@6 ~ f#4 ~ a4@2 ~@2 d5@9 ~ c5@3 ~",
  S: "g4 a4 ~ g#4@2 g4@18 ~@9", T: "a4@2 ~ c5@2 a4 ~@2 d5 e5@2 ~ a4@2 c5@12 ~@3 c5 d5 ~",
  U: "d#5 ~ e5 ~@2 d5 ~ c5 ~ d5@2 ~ c5@3 ~ a4@14 ~@2",
  V: "~@4 [g4,a4]@2 ~@2 c5@3 ~ a4@3 ~ a#4@6 ~@2 b4@5 ~@3, ~@4 g#4 ~@11 a4 ~@15", W: "~ c#5@31",
})).s("gm_piano").gain(0.78).pan(0)

// other · harmonica · "melody-harmonica"
const harmonica = note("<~@58 A@2 B@2 C@4 ~@13>".pickRestart({
  A: "[~@6 c#5@2 ~@2 c#5@3 c#5@3 ~ c#5@4 ~ c#5@3 e5@2 f#5@2 c#5@25 ~@3 c#5@2 e5@5]/2",
  B: "[f#5@13 ~@3 g5@8 ~@3 f#5@3 ~@2 e5@32, ~@31 d5@2 ~@31]/2",
  C: "[~@6 c#5 ~ c#5@2 ~@4 c#5 ~ c#5@5 ~ c#5 ~ e5@2 ~ f#5@3 ~ c#5@15 ~@11 c#5@2 f#5@3 ~ f#5@13 ~ f#5 ~@2 e5 g5@5 ~@2 g5@3 f#5@3 e5@31 ~@3, ~@81 f#5 ~@46]/4",
})).s("gm_harmonica").gain(0.71)

// chords · epiano1 · "chorused piano2"
const epiano1 = note(`<
  ~@2 A B C D E F G H I A B J K E L G M N O P Q R S T U R V W@2 X Y Z AA AB M AC O B C Y E AD AE M AF AG B C AH Z AD AE
  M I A T AI AJ AK AL AM AN V B AO J AH Z AA AB AP AQ AR P AS AT ~
>`.pickRestart({
  A: "~@4 [a3,c4,f4]@9 ~@3 [g3,a#3,d#4]@8 [b3,d4,f4,g4]@8", // F D# G7
  B: "~@4 [g3,c4,e4]@3 ~@5 c3@4 [g3,c4,e4]@5 ~@3 [g3,c4,e4]@3 ~@5", // C
  C: "[b3,d4,e4,g4]@3 ~ [b3,d4,e4,g4]@2 ~@6 [b3,d4,e4,g4]@13 ~@7", D: "[a#3,c4,e4,g4]@31 ~",
  E: "~@4 [a3,c4,f4]@9 ~@3 [a3,c4,f4]@8 [g3,c4,e4]@8", F: "d4@16 d4@4 f#4@4 a4@4 d5 ~@3, [f#4,a4]@5 ~@3, c4 ~@31",
  G: "[g3,b3,d4]@8 [c4,e4,g4,a4]@8 [b3,d4,f4,g4]@15 ~", H: "~@4 [a3,c4,e4]@9 ~@3 [a3,c4,e4]@15 ~",
  I: "[a3,c4,e4]@15 ~ [c4,d4,f#4,a4]@15 ~", J: "~@16 c4@4 e4@4 g4@4 d5 ~@3, [b3,d4,e4,g4]@5 ~@3",
  K: "c4@16 c4@4 e4@4 g4@4 c5 ~@3, [a#3,e4,g4]@5 ~@3", L: "[d4,f#4,a4]@31 ~, c4 ~@31",
  M: "[a3,c4,e4]@15 ~ [a3,c4,e4]@15 ~", N: "~@4 [a3,c4,e4]@9 ~@3 [c4,d4,f#4,a4]@15 ~",
  O: "[a3,c4,f4]@15 ~ [a#3,d#4,g4]@8 [b3,d4,f4,g4]@8", P: "[a3,c#4,e4]@31 ~",
  Q: "[a3,c#4,e4]@15 ~@5 [g#3,c#4,e4]@9 ~@3", R: "[a3,c#4,f#4]@15 ~ [a3,c#4,f#4]@15 ~",
  S: "[a3,d4,f#4]@15 ~ [g3,b3,d4]@15 ~", T: "[a3,c#4,e4]@3 ~ [a3,c#4,e4]@2 ~@6 [a3,c#4,e4]@13 ~@7",
  U: "~@4 [a3,c#4,e4]@9 ~@3 [g#3,c#4,e4]@15 ~", V: "~@4 [a3,d4,f#4]@9 ~@7 [g3,b3,d4]@9 ~@3",
  W: "[[g3,c4,e4]@51 ~@5 e4@4 g4@4, ~@52 c4@11 ~]/2", X: "[b3,d4,e4,g4]@31 ~",
  Y: "~@4 [a#3,c4,e4,g4]@3 ~@5 c3@4 [a#3,c4,e4,g4]@5 ~@3 [a#3,c4,e4,g4]@3 ~@5", // C7
  Z: "[a3,c4,f4]@15 ~ [a3,c4,f4]@8 [g3,c4,e4]@8", // F C
  AA: "[d4,f#4,a4]@3 ~ [c4,d4,f#4,a4]@2 ~@6 [c4,d4,f#4,a4]@13 ~@7, c4 ~@31", // D D7
  AB: "[g3,b3,d4]@8 [c4,e4,g4,a4]@8 [g3,b3,d4]@15 ~", AC: "[c4,e4,g4,a4]@15 ~@5 [c4,e4,f#4,a4]@9 ~@3",
  AD: "[d4,f#4,a4]@12 d3@4 [c4,d4,f#4,a4]@5 ~@3 [c4,d4,f#4,a4]@3 ~@5, c4 ~@31", // D D7
  AE: "[g3,b3,d4]@8 [c4,e4,g4,a4]@8 ~@4 [b3,d4,f4,g4]@9 ~@3", AF: "~@4 [a3,c4,e4]@9 ~@7 [a3,c4,d4,f#4]@9 ~@3",
  AG: "~@4 [a3,c4,f4]@9 ~@3 [a#3,d#4,g4]@8 [b3,d4,f4,g4]@8", // F D# G7
  AH: "[a#3,c4,e4,g4]@3 ~ [a#3,c4,e4,g4]@2 ~@6 [a#3,c4,e4,g4]@13 ~@7", AI: "[a3,c#4,e4]@15 ~ [g#3,c#4,e4]@15 ~",
  AJ: "~@4 [a3,c#4,f#4]@9 ~@7 [a3,c#4,f#4]@9 ~@3", AK: "~@4 [f#3,a3,d4]@9 ~@3 [g3,b3,d4]@15 ~",
  AL: "a3@16 a3@4 c#4@4 e4@4 a4 ~@3, [c#4,e4]@5 ~@3", AM: "~@4 [a3,c#4,e4]@9 ~@7 [g#3,c#4,e4]@9 ~@3",
  AN: "~@4 [a3,c#4,f#4]@9 ~@7 [c#4,f#4,a4]@9 ~@3", AO: "[g3,c4,e4]@3 ~ [g3,c4,e4]@2 ~@6 [g3,c4,e4]@13 ~@7",
  AP: "~@4 [a3,c4,e4]@9 ~@7 [a3,c4,e4]@9 ~@3", AQ: "~@4 [c4,e4,g4,a4]@9 ~@3 [c4,e4,f#4,a4]@15 ~",
  AR: "[a3,c4,f4]@15 ~ [g3,a#3,d#4]@8 [b3,d4,f4,g4]@8", AS: "~@5 [a3,c4,f4]@9 ~@3 [g3,a#3,d#4]@8 [b3,d4,f4,g4]@7",
  AT: "~@2 [g3,c4,e4]@13 ~@17", // C
})).s("gm_epiano1").gain(0.43)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A B C B C B A@2 D B A B C B C A@2 E A D B C D B C B A@2 B A B A B A@2 B D B C B C B A@4 B C B C B A@2 F B A B C B
  C B C B C B C B A B C B C B C G H ~
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x!2 ~@2 x", C: "x ~@2 x!3 ~ x", D: "x ~@2 x ~@4", E: "~@4 x!2 ~@2", F: "~@5 x ~ x",
  G: "~ x ~@11 x ~@3 x ~@12 x ~", H: "~@2 x ~@24 x ~@4",
})).gain(0.71)

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@77>").gain(0.71)

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

// drums · low tom
const low_tom = s("lt").struct("<~@8 A ~ B ~@6 A ~@3 B ~@2 B ~@13 B ~@13 C ~@2 D ~@13 A ~@7 E ~>".pickRestart({
  A: "~@7 x", B: "~@13 x!2 ~", C: "~@5 x ~@2", D: "~ x!4 ~ x ~", E: "~@23 x ~ x ~@6",
})).gain(0.71)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A ~ A ~ B ~ C ~@6 C ~@3 C ~@2 C ~ A ~@3 A ~@7 C ~ A ~ A ~@6 A ~@15 A ~ A ~ B ~@5 A ~@3
>`.pickRestart({
  A: "~@7 x", B: "~@2 x ~@4 x", C: "~ x ~@2",
})).gain(0.71)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A ~ B ~@6 A ~@3 B ~@2 B ~@8 C ~ C ~@2 B ~@5 C ~@2 C ~@21 A ~@9>".pickRestart({
  A: "~@3 x ~ x!2 ~", B: "~@11 x!2 ~@3", C: "~@12 x!4",
})).gain(0.71)

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

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~ A ~@6 A ~@3 A ~@2 A ~@13 A ~@30 A ~@9>".pickRestart({
  A: "~ x",
})).gain(0.71)

// drums · tambourine
const tambourine = s("tb").struct("<~@30 [~@3 x] ~ [~@3 x] ~@4 [~@3 x] ~@41>").gain(0.71)

stack(bass, piano, harmonica, epiano1, kick, rim, snare, low_tom, hihat, open_hat, mid_tom, crash, high_tom, tambourine)

More by The Beatles