Strudelify
KeyC majorTempo85 bpm
0:00/0:00
// Junk — The Beatles
// 85 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 34 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(85/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.

// chords · piano
const piano = note("<A@5 B@3 C@3 D@6 E@6 F@3 G@8>".pickRestart({
  A: "[~@26 e3@6 ~@52 a3@7 ~@5 e3@7 ~@101 c3@11 ~@14 g3@6 [g3,d4,f4]@5, ~ e4@19 e4@16 ~@8 b2@17 b2@11 [a2,c4]@33 ~@45 c3@18 c3@11 ~@8 c3@17 ~@36, ~@2 a2@35 e2@35 ~@71 [f2,a3]@36 ~ [f2,f4]@36 ~@24, ~@8 e3@17 ~@12 [g#3,d4]@20 ~@11 a3@16 ~@7 e4@15 ~@2 a3@35 ~@19 c4@17 ~@20 a3@16 ~ [c4,e4]@24, ~@49 e3@22 ~@8 e3@17 ~@7 f3@17 ~@19 f3@16 f3@20 f3@17 f3@23 ~@9 e3@16]/5", // G7 Am F G#dim C
  B: "[g3@7 ~@36 e4@4 ~@13 a3@8 ~@5 e3@7 e3@5 e3@7 ~@23 a3@4 ~ [a3,e4]@8 ~@5 a3@7 c4@4, [e3,d4,f4]@11 c4@36 ~@38 [g#3,d4]@19 [g#3,d4]@15 ~@25, ~@7 g3@29 g3@11 a2@37 ~ e2@34 ~@25, ~@11 e4@31 ~@5 e4@21 e4@17 ~@12 e3@22 ~@9 e3@16, ~@25 c3@23 ~@7 e3@18 ~@19 b2@16 b2@11 ~ a2@24]/3", // A5 Dm G#dim
  C: "[~ e3@10 ~@97 c3@7 ~@23 g3@4 ~ [c2,g3,d4,f4], ~@13 f2@34 ~ [f2,f4]@30 f3@13 ~@4 f3@22 ~@27, ~@25 f3@17 ~ f3@17 f3@12 c3@12 ~@6 c3@18 ~@7 g3@17 ~@12, ~@31 c4@52 ~@20 a3@15 ~@2 [c4,e4]@23 ~, ~@36 c3@19 c3@12 a3@16 [f2,c4]@34 ~@27]/3", // Csus4 F C F5
  D: "[~@96 g3@6 ~@12 g3@5 g3@7 ~@5 g3@7 ~@13 g3@4 g3@4 ~@3 g3@4 g3@8 g3@4 ~@26 f3@7 ~@12 g3@4 ~@12 g3@7 ~@12 g3@4 ~@13 g3@8 d4@4 d3, ~@6 g3@17 ~@20 f3@12 c3@12 c4@5 c3@7 g3@17 ~@6 g4@17 ~@19 d4@16 ~ [c4,e4]@11 [c4,e4]@12 ~ [g3,c4,e4]@12 c4@20 c4@15 ~ c4@35 ~ g3@12 ~@13, ~@11 [c2,c4]@36 ~ c4@12 f3@23 ~@8 g2@16 g2@12 [g2,b3]@36 c2@32 f3@17 ~@24 e4@19 ~@23 d3@17 ~, ~@11 e4@20 e4@16 a3@36 ~ c4@19 c4@16 ~@7 d3@17 d3@12 ~@11 d2@24 ~@9 c3@17 c3@11 ~ g3@6 g2@18 g2@10 ~ [g2,b3]@25, ~@18 g2@17 ~ g2@11 ~ f2@35 ~ [c2,e4]@35 ~@19 g3@12 ~@28 e2@12 ~ [f2,a3]@36 ~ c2@35 ~@25]/6", // C G C F
  E: "[~@11 f4 ~@12 g3@7 ~@12 a3@4 ~@13 a3@6 ~@5 e3@7 e3@5 ~@13 e3@7 ~@12 a3@4 ~@13 a3@7 ~@5 e3@10 ~@14 f3@7 ~@47 f3@5 f3@7 ~@5 f3@8 ~@5 c3@7 g3@4 ~@20 g3@5, ~@6 g3@18 ~@7 c4@11 c4@5 a3@12 ~@7 [a3,e4]@16 ~@8 b2@17 ~ b2@11 [a2,c4]@35 ~@3 f2@30 f3@11 c3@12 a3@17 ~@20 a3@15 ~@2 g3@13 ~@11, ~@11 c3@36 [a2,c4]@36 [e2,g#3,d4]@36 ~@8 e3@17 ~@36 c3@12 [f2,f4]@36 ~@6 c3@18 ~@19 g2@17, ~@11 [c4,e4]@20 e4@16 e4@19 ~@109 c4@52 ~@61, ~@18 e3@18 e3@11 ~@7 e3@17 ~@12 e3@13 ~@7 [e3,b3]@16 a3@13 ~@7 [a3,e4]@16 ~@2 a3@47 f3@11 c3@12 [f2,c4]@36 ~ [c2,c4,e4]@24]/6", // A5 Am E7 F C E5 A5 F5 …
  F: "[[c2,g3,d4,f4]@7 g3@3 ~@33 c4@4 ~@12 a3@8 ~@4 e3@8 e3@4 ~@32 a3@4 a3@8 ~@5 a3@7 [a3,e4]@5, ~@12 c2@35 ~@37 e2@36 ~@24, ~@12 c4@31 ~@12 e3@16 ~@12 e3@12 ~ e3@23 ~@8 e3@17, ~@12 e4@20 e4@15 ~@20 [a3,e4]@16 [g#3,d4]@19 ~ [g#3,d4]@16 e4@19 ~@6, ~@12 g3@8 g2@16 g2@11 [a2,c4]@36 ~@8 b2@16 b2@12 [a2,c4]@25]/3", // Csus4 A5 G#dim Am
  G: "[e3@7 ~@29 c3@11 ~@11 f3@8 ~@73 g3@4 [c2,g3,d4,f4]@8 g3@3 ~@13 g3@7 ~@13 c4@4 ~@12 a3@7 ~@5 e3@7 e3@4 ~@13 e3@7 ~@11 e3@5 ~@13 a3@13 [e3,a3,e4]@12 ~ [f2,f3,a3,c4]@51 ~@32, ~@7 f3@16 f3@19 ~@36 f3@18 f3@19 g3@17 ~@23 e4@20 e4@16 ~@19 [a3,e4]@16 ~ [g#3,d4]@21 ~@21 e3@19 ~@96, ~@11 a3@35 ~@21 c4@16 ~@20 a3@16 ~ [c4,e4]@34 ~ c4@32 ~@11 e3@16 ~@13 e3@12 ~@7 d4@16 ~@122, ~@12 f2@35 [f2,a3]@36 [f2,f4]@36 ~ c2@23 ~@12 c2@36 ~@36 e2@36 ~@121, ~@18 c3@17 ~@19 c3@17 ~ c3@11 ~@8 c3@17 c3@11 ~@8 g2@27 ~ g3@7 g2@17 ~ g2@11 [a2,c4]@36 ~@6 b2@18 b2@11 [a2,c4]@38 ~@84]/8", // Csus4 A5 F A5 G#dim C F Am
})).s("gm_piano").gain(0.36)

// chords · piano · soft notes
const piano_soft = note("<A B@2 ~ C@2 D E@3 F G ~ H ~ I J@2 ~@2 K ~ L M ~@2 N@2 O P ~ Q ~@2>".pickRestart({
  A: "~ a3@12 ~@19 e3@16, ~@13 a3@23 ~@12",
  B: "[~@9 g#3@15 ~@19 a3@15 ~@26 c3@11 ~, ~@8 d4@15 ~@37 f2@35 ~, ~@67 c3@17 ~@12, ~@12 f3@3 ~, ~@5 c4]/2",
  C: "[~@24 g2@2 ~@22 c3@11 ~@20 e3@17, ~@19 g3@18 ~@59, ~@24 c3@23 ~@49, ~@29 g2@67]/2", D: "a3 ~@19 a3@17 ~@11",
  E: "[~@11 a3@3 ~@3 c3@4 ~@15, ~@28 f3@7 ~@37, ~@61 a3@53 ~@30]/3", F: "~@6 g3 ~, ~@12 c2@11 ~, ~@31 g2@16 ~",
  G: "~@23 g3@24 ~", H: "~@6 g3@12 ~@5 g#2@7 ~@18", I: "~@19 f3@16 ~@13",
  J: "[~@7 e4@15 ~@21 g3@11 ~@25 g3@16 ~, ~ g3@2 ~@13]/2", K: "~@31 f3@12 ~@5, ~@19 c3@17 ~@12",
  L: "~@7 f3@15 ~@15 g3@6 ~@5", M: "~@24 g3@23 ~", N: "[~@42 f3@5 f3@8 ~@12 f3@11 ~@18, ~@31 c4@16 ~@49]/2",
  O: "~@6 g3 ~", P: "~@31 g3@16 ~", Q: "~@4 g#3@7 ~@13, ~@6 e3@11 ~@31",
})).s("gm_piano").gain(0.2)

// bass · fretless bass · "BASS"
const bass = note("<A@5 B@6 C@3 D@6 E F@2 G@3 H@8>".pickRestart({
  A: "[a2@32 ~ b1@3 ~ e2@24 ~@7 e2@4 a2@29 ~@2 c2@4 f2@31 ~ c2@4 f2@31 ~ c2@5 f2@27 ~@3 g2@4 ~ c3@25, e2 ~@239]/5",
  B: "[d3@11 ~ c3@29 ~@2 e2@3 ~ a2@30 ~@2 b1@4 ~ e2@28 ~@3 e2@5 a2@30 ~ c2@4 ~ f2@30 ~ c2@4 f2@30 ~ c2@4 ~ f2@28 ~@3 g2@4 ~@18 d3 ~@7, ~@263 c3@25]/6",
  C: "[d3@11 c3@27 ~@4 c2@4 f2@27 ~@5 g2@5 c3@29 ~@2 d2@4 ~ g2@25]/3",
  D: "[~@6 g2@5 c3@26 ~@5 c2@3 ~ f2@28 ~@5 g2@4 c3@30 ~@2 d2@3 ~ g2@29 ~@2 g2@4 c3@27 ~@6 e2@4 a2@29 ~ b1@4 ~ e2@28 ~@4 e2@4 ~@26]/6",
  E: "~@6 c2@4 ~ f2@32 c2@4 ~", F: "[f2@30 ~ c2@4 f2@28 ~@4 g2@4 ~ c3@24]/2",
  G: "[~ d3@11 c3@29 ~ e2@4 ~ a2@30 ~ b1@4 ~ e2@29 ~@2 e2@4 ~ a2@25]/3",
  H: "[~@6 c2@5 f2@30 ~ c2@5 f2@30 ~ c2@4 f2@29 ~@4 g2@4 ~ c3@23 d3@11 ~ c3@31 e2@4 a2@28 ~@4 b1@3 ~ e2@29 ~@3 e2@4 a2@32 ~ c2@6 f2@63 ~@20]/8",
})).s("gm_fretless_bass").gain(0.46)

// chords · synth strings 1 · "SYNTH STRINGS"
const synth_strings_1 = note("<~@11 A@6 B@3 C@6 D@8>".pickRestart({
  A: "[~@59 f3@18 ~@6 e5@30 ~@5 [b4,d5]@31 ~@5 [c5,e5]@30 ~@5 [f3,f4,a4,c5]@35 ~@2 [c3,c5,e5]@34 ~@2 [g3,b4,d5]@26, ~@47 a4@31 ~@5 g4@102 ~@103, ~@118 g3@35 ~ c3@34 ~@100]/6", // Bm C F C G
  B: "[~@10 c5@34 ~@26 a4@7 c5@2 ~@27 g#4@7 e4@5 ~@13 a4@13, ~@10 e5@68 ~@17 e4@13 ~@18 e4@18, ~@10 c3@27 ~@9 [a4,c5]@24 ~@13 g#4@13 ~@5 b4@19 ~@24, ~@47 a3@26 ~@10 e3@25 ~@36, ~@66 e4@9 ~@14 b3@19 ~@10 a3@26]/3", // Am
  C: "[c5@7 ~@4 f3@34 ~@26 c4@44 ~@3 c3@60 ~@13 [a3,a4,c5,e5]@31 ~@5 e3@34 ~ [a4,c5,e5]@26, ~@11 a4@103 ~@112 g#4@29 ~@33, ~@47 f3@67 ~@147 a3@27]/6", // Am
  D: "[~@10 [f4,a4,c5]@104 ~@5 [c3,c5]@70 ~ a3@36 [g#4,d5]@31 ~@6 a4@30 ~@6 [f3,f4,a4,c5]@55 ~@30, ~@10 f3@109 e5@98 ~@45 [c5,e5]@28 ~@94, ~@119 g4@64 ~@43 e3@35 ~ a3@34 ~@88]/8", // F C G#dim F C
})).s("gm_synth_strings_1").gain(0.2)

// chords · synth strings 1 · "SYNTH STRINGS" · soft notes
const synth_strings_1_soft = note("<~@12 A@2 ~ B@3 ~@2 C@4 D@2 ~@3 E@2 ~@3>".pickRestart({
  A: "[~@2 g3@5 ~@15 c4@9 ~@5 c3@34 ~@26, ~@35 c5@30 ~@31]/2", B: "[~@17 g4@51 ~@4]/3",
  C: "[~@83 f4@32 ~@4 e5@68 ~@5, ~@46 f4@27 ~@45 g4@62 ~@12, ~@47 c5@67 ~@4 c5@68 ~@6]/4", D: "[~@35 d5@30 ~@31]/2",
  E: "[~@46 [a4,c5]@29 ~@21]/2", // Am
})).s("gm_synth_strings_1").gain(0.1)

// chords · acoustic guitar nylon · "ACOUSTIC GUITAR"
const acoustic_guitar_nylon = note("<A B C@3 D@2 E F G@7 H I J@5 K@7 L@4>".pickRestart({
  A: "~@2 a3@8 ~@2 [c4,e4]@5 ~@7 [a3,c4,e4]@11 ~@2 e3@11, ~ [c4,e4]@8 ~@3 a3@11 ~@13 [g#3,b3]@12, ~ a2@2 ~@21", // C Am C G#m
  B: "~ [e3,g#3,b3]@12 [e3,g#3,b3]@11 [a3,c4,e4]@13 [a3,c4,e4]@11", // E Am
  C: "[[a3,c4,e4]@11 ~ [f3,a3,c4]@11 ~ [f3,a3,c4]@11 [f3,a3,c4]@12 [f3,a3,c4]@2 ~@10 [f3,a3,c4]@11 [f3,a3,c4]@12 ~ [f3,a3,c4]@12 [f3,a3,c4]@12 [f3,a3,c4]@10 ~@2 [g3,c4,e4]@13 [g3,c4,e4]@12]/3", // Am F C
  D: "[[g3,c4,e4]@12 [g3,c4,e4]@11 [g3,c4,e4]@12 ~ [g3,c4,e4]@10 ~ [a3,c4,e4]@2 ~@10 [a3,c4,e4]@12 [a3,c4,e4]@13 [e3,g#3,b3] ~@11]/2", // C Am E
  E: "[e3,g#3,b3]@12 ~ [e3,g#3,b3]@11 [a3,c4,e4]@2 ~@10 [a3,c4,e4]@12", // E Am
  F: "[a3,c4,e4]@11 ~ [f3,c4]@12 [f3,a3,c4]@11 [f3,a3,c4]@11 ~ [f3,a3,c4], ~@6 a3 ~@17", // Am F5 F
  G: "[~@11 [f3,a3,c4]@12 ~ a3@12 [f3,a3,c4]@11 [f3,a3,c4]@12 [f3,a3,c4]@11 ~ [c4,e4]@2 ~@10 [g3,c4,e4]@12 [g3,c4,e4]@11 [g3,c4,e4]@12 ~ [g3,c4,e4]@13 [g3,c4,e4]@9 ~@2 [f3,a3,c4]@12 [f3,a3,c4]@12 c4@11 [g3,c4,e4]@12 ~ [g3,c4,e4]@12 [g3,c4,e4]@11 ~ [g3,d4]@12 [g3,b3,d4]@12 [g3,b3,d4]@10 ~@2 [g3,c4,e4]@2 ~@10 [g3,c4,e4]@12 [g3,c4,e4]@10 ~ [a3,c4]@6 ~@8 [f3,a3,c4]@12 [f3,a3,c4]@11 ~ [g3,c4,e4]@4 ~@8, ~@23 [f3,c4]@12 ~@36 g3@12 ~@84 [f3,a3]@47 ~ b3@3 ~@68 f3@13 ~@37]/7", // F C F C G5 G C Am …
  H: "[g3,c4,e4]@11 [g3,c4,e4]@11 ~ [b3,d4]@4 ~@8 [g3,b3,d4]@13, ~@23 g3@12 ~@13", // C Bm G
  I: "[g3,b3,d4]@10 ~ [g3,c4,e4]@2 ~@10 [g3,c4,e4]@12 [g3,c4,e4]@10 ~@2 [a3,c4,e4]", // G C Am
  J: "[~@11 [a3,c4,e4]@12 [a3,c4,e4]@11 ~ [e3,g#3,b3] ~@10 [e3,g#3,b3]@12 ~ [e3,g#3]@11 ~ [a3,c4,e4] ~@11 [a3,c4,e4]@12 [a3,c4,e4]@12 ~ [f3,a3,c4] ~@10 [f3,a3,c4]@12 [f3,a3,c4]@12 [f3,a3,c4]@12 ~ f3@11 [f3,a3,c4]@24 [f3,a3,c4]@12 [f3,a3,c4]@12 [g3,c4] ~@12 [g3,c4,e4]@12, ~@58 b3@12 ~@85 [a3,c4]@11 ~@74]/5", // Am E Am F C5 C Am
  K: "[[g3,c4,e4]@11 ~ c4@12 [g3,c4,e4]@13 [c4,e4]@10 ~ c4@11 [a3,c4,e4]@12 ~@12 [e3,g#3,b3]@11 [e3,g#3,b3]@13 ~@12 [a3,c4,e4]@12 ~ a3@11 [a3,c4,e4]@12 [f3,a3,c4]@2 ~@11 [f3,a3]@11 [f3,a3,c4]@12 [f3,a3,c4]@11 ~ [f3,a3]@12 [f3,a3,c4]@12 [f3,a3,c4]@11 ~ [f3,a3]@13 c4@11 [g3,c4,e4]@12 ~ [g3,c4]@11 ~ [g3,c4]@11 [g3,c4,e4]@13 [g3,c4,e4]@13 [g3,c4,e4]@11, ~@11 [g3,e4]@12 ~@14 g3@96 ~@203, ~@47 [a3,e4]@11 ~@13 [a3,c4,e4]@48 ~@12 [c4,e4]@12 ~@24 c4@12 ~@23 c4@12 ~@24 c4@13 ~@24 e4@12 e4@11 ~@38, ~@107 [e3,g#3,b3]@50 ~@95 [f3,a3]@84]/7", // C Am E Am F C C5 C …
  L: "[[a3,c4,e4] ~@10 [a3,c4,e4]@12 ~@11 [e3,g#3,b3]@11 ~ [e3,g#3,b3]@12 ~@12 [a3,c4,e4]@12 [a3,c4,e4]@13 [a3,c4,e4]@13 [f3,c4]@56 ~@28, ~@23 [a3,c4,e4]@47 ~@38 a3@2 ~@82, ~@29 [e3,g#3,b3]@25 ~@42]/4", // Am E Am F5 Am E
})).s("gm_acoustic_guitar_nylon").gain(0.36)

// drums · kick
const kick = s("bd").struct("<A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~>".pickRestart({
  A: "x ~@2 x", B: "~ x!2 ~",
})).gain(0.26)

// drums · rim
const rim = s("rim").struct("<A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~>".pickRestart({
  A: "~ x!2 ~", B: "x!2 ~ x",
})).gain(0.31)

// drums · hihat
const hihat = s("hh").struct("<A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~>".pickRestart({
  A: "~@3 x!2 ~@3 x ~@7", B: "x!2 ~ x",
})).gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A ~>".pickRestart({
  A: "x ~@2 x", B: "~ x",
})).gain(0.36)

stack(piano, piano_soft, bass, synth_strings_1, synth_strings_1_soft, acoustic_guitar_nylon, kick, rim, hihat, open_hat)

More by The Beatles