Strudelify

C Moon

McCartney

KeyC majorTempo184 bpm
0:00/0:00
// C Moon — McCartney
// 184 bpm, 2/2, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 210 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(184/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 · "A.PIANO 1"
const piano = note(`<
  A B@2 C D E F G@2 B@2 C H E F G@2 E I C H E F J K E I C H E F J K L M N O P Q@2 R M S@2 P T@2 U V E I C H E F J K E I
  C H E F J K L M N O P Q@2 R M W@2 P T@2 U V E I C H E F J K E I C H E F J K L M N O P Q@2 R M W@2 P T@2 U V E I C H E
  F J K E I C H E F J K L M N O P Q@2 R M W@2 P T@2 U V E I C H E X J K E I C H E X J K L M N O P Q@2 R M W@2 P T@2 U V
  E I C H E F J K E I C H E F J K L M N O P Q@2 R M W@2 P T@2 U V Y
>`.pickRestart({
  A: "[c3,c4]@2 ~@2 [c3,c4]@2 [b2,b3]@5 ~ [g2,g3]@3 ~", // C B G
  B: "[[c2,c3]@4 [g3,c4,e4] ~@7 [g3,c4,e4] ~@7 [g3,c4,e4] ~@2 e2@5 [e3,g#3,b3] ~@3, ~@15 c2@7 ~@6 e2@3 ~, ~@8 c3@3 ~@5]/2", // C E
  C: "[a1,a2]@4 [e3,a3,c4] ~@7 [e3,a3,c4] ~@3", D: "a2@4 [e3,a3,c4] ~@7 [f3,a3,c4] ~@3, ~@7 f2@9",
  E: "[c2,c3]@4 [g3,c4,e4] ~@7 [g3,c4,e4] ~@3", F: "c3@4 [g3,c4,e4] ~ g2@6 g3@4, ~@6 d4 ~, ~@12 b3 ~@3",
  G: "[[c2,c3]@4 [g3,c4] ~@7 [g3,c4,e4]@2 ~@2 c3@4 g3@2 [b2,b3]@6 [g2,g3]@2 ~@2, ~@4 e4@2 ~@8 c2@5 ~@13]/2", // C C5 C B G
  H: "a2@4 [e3,a3,c4] ~@7 [a3,c4] ~@3, ~@7 f2@9, ~@12 f3@3 ~", I: "~@4 [g3,c4,e4] ~@7 [e3,g#3,b3] ~@3, c3@6 e2@9 ~",
  J: "[c2,c3]@4 [g3,c4] ~@7 [g3,c4,e4]@2 ~@2, ~@2 e4 ~@5", K: "c3@2 g3 [b2,b3]@3 [g2,g3] ~",
  L: "~@4 [a3,d4]@2 ~@6 [a3,d4,f4] ~@3, d2@7 ~, ~@4 f4 ~@11", M: "~@4 [a3,d4,f4] ~@7 [a3,d4,f4] ~@3",
  N: "~@4 [g3,c4,e4] ~@7 [g3,c4,e4] ~@3, c2@13 ~@3", O: "~@4 [g3,c4,e4] ~@7 [g3,e4]@2 ~@2, c2@7 ~, ~@12 c4 ~@3",
  P: "~@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~, b1@7 ~", // G
  Q: "[~@4 g3@4 [a#3,d4]@4 g3@4 [a#3,d4]@4 g3@4 [a#3,e4]@4 g3@3 ~, a#1@29 ~@3]/2", // A# A#dim
  R: "~@4 [a3,d4]@2 ~@6 [a3,d4,f4] ~@3, d2@11 ~@5, ~@4 f4 ~@11", // D5 Dm
  S: "[~@4 [g3,c4,e4] ~@5 e2 ~ [g2,g3,c4,e4] ~@7 [g3,c4,e4] ~@7 [g3,e4]@2 ~@2, c2@9 ~@5 c3@16 ~@2, ~@28 c4 ~@3]/2", // C
  T: "[~@4 g3@4 [a#3,d4]@4 g3@4 [a#3,d4]@4 g3@4 [a#3,e4]@4 g3@3 ~, a#1@31 ~]/2", // A# A#dim
  U: "a1@4 [c4,e4,g4]@3 ~ d2@4 [c4,d4,f#4]@3 ~", V: "g1@6 [g2,g3] ~ [g2,g3]@4 [b2,b3]@4",
  W: "[~@4 [g3,c4,e4] ~@5 e2 ~ [g2,g3,c4,e4] ~@7 [g3,c4,e4] ~@7 [g3,e4]@2 ~@2, c2@9 ~@6 c3@16 ~, ~@28 c4 ~@3]/2", // C
  X: "c3@4 [g3,c4,e4] ~@7 g3@4, ~@7 g2@7 ~@2, ~@6 d4 ~, ~@12 b3 ~@3", Y: "~@4 [c4,e4,g4,c5]@5 ~@7",
})).s("gm_piano").gain(0.44).pan(0.6)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@9 A ~ B ~ C ~ C D E F G H E I J K E F G H E I J K L M N@2 O P@2 Q R S@2 O T@2 U V E F G H E I J K E F G H E I W X Y
  R Z@2 AA P@2 Q R AB@2 O T@2 U V E F G H E I J K E F G H E I W K Y R Z@2 AA P@2 Q R AB@2 O T@2 U V E AC G H E I J K E F
  G H E I W K Y R AD@2 AE P@2 AF R AB@2 O T@2 U V E F G H E I J K E F G H E I W K AG R AH@2 AA P@2 Q R AI@2 O T@2 U V E
  F G H E I J K E F G H E I W K Y R AD@2 AE P@2 AF R AB@2 O T@2 U V AJ
>`.pickRestart({
  A: "c2@4 ~@2 c2 ~ c2@5 ~@3", B: "a1@4 ~@2 a1 ~ a1@5 ~@3", C: "c2@5 ~ c2 ~ c2@5 ~@3", D: "c2@5 ~ b1@5 ~ g1@3 ~",
  E: "c2@7 ~@7 c2 ~", F: "c2@5 ~ e1@8 ~@2", G: "a1@7 ~@7 a1 ~", H: "a1@5 ~ f1@9 ~", I: "c2@4 ~@2 g1@9 ~", J: "c2 ~",
  K: "c2@4 ~@2 b1@5 ~ g1@4", L: "d2@7 a2", M: "~@8 d3@7 ~", N: "[c2@5 e2 g2 c3@8 ~]/2", O: "b1@7 ~", P: "[a#1@7 ~]/2",
  Q: "d2@8 ~@7 a2", R: "d3@15 ~", S: "[c2@6 ~@4 e2@2 g2@2 c3@15 ~@3]/2", T: "[a#1@31 ~]/2", U: "a1@6 ~@2 d2@5 ~@3",
  V: "g1@3 ~@5", W: "c2@8 ~@6 c2 ~", X: "c2@4 ~@2 g1@5 ~ g1@4", Y: "d2@14 a2 ~", Z: "[c2@10 e2 ~ g2@2 ~ c3@16 ~]/2",
  AA: "b1@13 ~@2 a#1", AB: "[c2@6 ~@4 e2 ~ g2@2 ~ c3@15 ~@2]/2", AC: "c2@2 ~ e1@4 ~",
  AD: "[c2@10 e2 ~ g2@2 c3@16 ~@2]/2", AE: "b1@13 ~ a#1 ~", AF: "d2@8 ~@6 a2 ~", AG: "d2@14 ~ a2",
  AH: "[c2@10 ~ e2 g2@2 ~ c3@16 ~]/2", AI: "[c2@6 ~@5 e2 g2@2 ~ c3@15 ~@2]/2", AJ: "c2 c3 ~@2",
})).s("gm_fretless_bass").gain(0.49)

// other · marimba
const marimba = note(`<
  ~@57 A B C D A B ~ E F ~@6 G H I J K L M N O ~@8 P B C D A B ~ E F ~@4 Q M ~@5 Q M N O ~@8 P B C D A B ~ E F R S T U Q
  M V W X Y Z AA AB AC AD P B C D A B ~ E P B C D A B ~ E ~@16 P B C D A B ~ E ~ AE AF AG AH AI@2 AJ F R S T U Q M V W X
  Y Z AA AB AC AD AK
>`.pickRestart({
  A: "e5@2 ~@2 e5 ~@3 d5@2 ~@2 d5 ~ d5 ~", B: "c5 ~ c5@2 c5 ~ b4!9 ~", C: "~@4 c5 ~ c5 ~ b4@2 ~@2 b4 ~ b4 ~",
  D: "a4 ~ a4@2 a4 ~@2 f4!6 ~@3", E: "c5@2 ~@2 c5 ~ b4@5 ~ g4@2 ~@2", F: "f4@5 ~@11", G: "a4@5 ~@3 d5@4 ~@3 d5",
  H: "f5@3 ~ f5@2 ~@2 d5!8", I: "g4@4 ~@4 c5@4 ~@3 c5", J: "e5@3 ~ e5@2 ~@2 c5!8", K: "g4@3 ~@5 b4@3 ~@4 b4",
  L: "d5@5 ~@3 g5!8", M: "f5!8 e5!6 ~@2", N: "c5@5 ~@11", O: "b4@3 ~@4 g4 g4@2 ~@2 b4@2 ~@2",
  P: "e5@2 ~@2 e5 ~ e5@2 d5@2 ~@2 d5 ~ d5 ~", Q: "~@8 g5!8", R: "f4 ~ a4 ~ d5 ~ f5 ~", S: "c5 ~@3",
  T: "e4 ~ g4 ~ c5 ~ e5 ~", U: "b4 ~@3", V: "a4@5 ~@3 d5@4 ~@4", W: "~@2 f5 ~ d5@2 ~ f5@2 ~ f5 ~ d5@2 ~@2",
  X: "g4@2 ~@2 c5 ~@3", Y: "~@2 e5 ~ c5 ~@2 e5@2 ~ e5 ~ c5 ~@3", Z: "g4@5 ~@3 b4@2 ~@2 d5@2 ~@2", AA: "~@4 d5@3 ~",
  AB: "f5@6 ~@2 e5@3 ~@5", AC: "c5@3 ~ a4@3 ~", AD: "b4@4 ~@3 g4 g4@2 ~@2 b4@2 ~@2", AE: "~@6 e5!6 g5@2 ~@2",
  AF: "a5 ~@6 e5", AG: "~@2 d5@2 ~@2 c5!8 ~@2", AH: "~@7 e5", AI: "[~@2 e5@2 ~@2 d5@2 ~@2 d5@2 ~@2 c5@7 ~@11]/2",
  AJ: "c5@2 ~@2 c5 ~@2 b4@5 ~ g4@2 ~", AK: "c5@3 [d5,e5,f5,g5] [a5,b5,c6] ~@11",
})).s("gm_marimba").gain(0.38).pan(0.4)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@21 A B C ~@5 A B C ~@6 D E ~@5 D E F@2 ~@4 A B C ~@5 A B C ~@6 D E ~@5 D E G@2 ~@4 A B C ~@5 A B C ~@6 D E ~@5 D E
  G@2 ~@4 A B C ~@5 A B C ~@6 D E ~@5 D E F@2 ~@4 A B C ~@5 A B C ~@6 D E ~@5 D E F@2 ~@4 A B C ~@5 A B C ~@6 D E ~@5 D
  E F@2 ~
>`.pickRestart({
  A: "[c3,c4,e4,g4]@2 [c3,c4,e4,g4]@3 ~@3", B: "~ [g2,b3,f4]", C: "[c3,c4,e4,g4] ~", D: "~ [g4,g5]",
  E: "[f4,f5] [e4,e5]", F: "[[g4,e5,g5]@2 [g4,e5,g5] f#4@3 [f#4,e5] [f4,d5,f5]@2 ~@7, ~@3 [d5,f#5]@4 ~@9]/2",
  G: "[[g4,e5,g5]@4 [g4,e5,g5]@2 f#4@5 ~ [f#4,e5]@2 [f4,d5,f5]@4 ~@14, ~@3 [d5,f#5]@4 ~@9]/2", // C F#7 Dm D
})).s("gm_rock_organ").gain(0.3).pan(0.4)

// chords · rock organ · "ORGAN 3"
const rock_organ_2 = note(`<
  ~@33 A@2 B@2 C D ~ A@2 B@2 C D ~@19 A@2 B@2 C D ~ A@2 B@2 C D ~@19 A@2 B@2 C D ~ A@2 B@2 C D ~@19 A@2 B@2 C D ~ A@2
  B@2 C D ~@19 A@2 B@2 C D ~ A@2 B@2 C D ~@19 A@2 B@2 C D ~ A@2 B@2 C D ~@4
>`.pickRestart({
  A: "[d5,f5,a5]/2", B: "[c5,e5,g5]/2", C: "[b4,d5,g5]", D: "[a#4,d5,g5] ~",
})).s("gm_rock_organ").gain(0.3).pan(0.4)

// other · trumpet
const trumpet = note(`<
  ~@113 A B C D A B E ~ A B C D A B E ~@6 F G H I J K ~ L M ~@2 A B C D A B E ~ A B C D A B E ~ N O P Q R S@2 N O P Q R
  S@2 ~@2 A B C D A B E ~ A B C D A B E ~ N O P Q R S@2 N O P Q R S@2 ~@2 T
>`.pickRestart({
  A: "e4@2 ~@2 e4@2 e4 ~ d4@2 ~@2 d4 ~ d4 ~", B: "c4 ~ c4 ~ c4@2 b3@8 ~@2", C: "c4@2 ~@2 c4 ~ c4 ~ b3@2 ~@2 b3 ~ b3 ~",
  D: "a3 ~ a3 ~ a3 ~ f3@8 ~@2", E: "c4 ~@3", F: "g4", G: "f4@7 ~ e4@7 ~", H: "[a3,d4]@2 ~@2 [d4,f4]@3 ~@5 [d4,f4] ~@3",
  I: "[f4,a4] ~@3 [f4,a4]@2 ~@2 [f4,a4]@2 ~@2 [d4,f4] ~@3", J: "c4@3 ~@5 e4@3 ~@5",
  K: "[e4,g4]@2 ~@2 [e4,g4] ~@3 [e4,g4]@2 ~@2 [c4,e4] ~@3", L: "g4@15 ~", M: "f4@7 ~ e4@6 ~@2",
  N: "a3@2 ~@2 a3@2 ~@2 d4@2 ~@3 d4 ~ d4", O: "f4 ~ d4 ~ f4@2 ~@2 d4@2 ~@2 d4@2 ~@2",
  P: "g3@2 ~@2 g3@2 ~@2 c4@2 ~@2 c4 ~ c4 ~", Q: "e4@2 c4 ~ e4@2 ~@2 c4@2 ~@2 c4@2 ~@2", R: "g3@7 ~ b3@3 ~ d4@4",
  S: "[g3@31 ~]/2", T: "~ e4 ~@2",
})).s("gm_trumpet").gain(0.49).pan(0.2)

// other · trumpet
const trumpet_2 = note(`<
  ~@113 A B@2 C@2 D@2 ~ A B@2 C@2 D@2 ~@6 E@3 F G H I J@3 ~ A B@2 C@2 D@2 ~ A B@2 C@2 D@2 ~ K L M N O P@3 L M N O Q@3 ~
  A B@2 C@2 D@2 ~ A B@2 C@2 D@2 ~ K L M N O P@3 L M N O Q@3 ~@2
>`.pickRestart({
  A: "~@4 e4@2 ~@2 e4@2 e4 ~ d4@2 ~@2", B: "[d4 ~ d4 ~ c4 ~ c4 ~ c4@2 b3@8 ~@2 c4@2 ~@2 c4 ~ c4 ~ b3@2 ~@2]/2",
  C: "[b3 ~ b3 ~ a3 ~ a3 ~ a3 ~ f3@8 ~@2 e4@2 ~@2 e4@2 e4 ~ d4@2 ~@2]/2",
  D: "[d4 ~ d4 ~ c4 ~ c4 ~ c4@2 b3@8 ~@2 c4@4 ~@8]/2", E: "[~@4 g4@16 f4@7 ~ e4@7 ~ [a3,d4]@2 ~@2 [d4,f4]@3 ~@5]/3",
  F: "[d4,f4] ~@3 [f4,a4] ~@3 [f4,a4]@2 ~@2 [f4,a4]@2 ~@2", G: "[d4,f4] ~@3 c4@3 ~@5 e4@3 ~",
  H: "~@4 [e4,g4]@2 ~@2 [e4,g4] ~@3 [e4,g4]@2 ~@2", I: "[c4,e4] ~@15", J: "[~@4 g4@15 ~ f4@7 ~ e4@6 ~@14]/3",
  K: "~@2 a3 ~ a3 ~ d4 ~", L: "d4 ~@2 d4 f4 ~ d4 ~ f4@2 ~@2 d4@2 ~@2", M: "d4 ~ g3 ~ g3 ~ c4 ~",
  N: "c4 ~ c4 ~ e4@2 c4 ~ e4@2 ~@2 c4@2 ~@2", O: "c4@2 ~@2 g3@7 ~ b3@3 ~",
  P: "[d4@4 g3@31 ~ a3@2 ~@2 a3@2 ~@2 d4@2 ~@2]/3", Q: "[d4@4 g3@31 ~@13]/3",
})).s("gm_trumpet").gain(0.38).pan(0.7)

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

// drums · clap
const clap = s("cp").struct("<~@178 [~@2 x!2 ~ x!2 ~] [~ x]!19 ~@2 [~ x]!5 ~@5>").gain(0.33)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@46 [~@7 x] ~@95 [~@7 x] ~@31 [~@7 x] ~@35>").gain(0.27)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@3 B A@3 B A@3 B A@3 B A B A@5 B A B A@5 B A B A B A B C A B A B A B A ~@2 A@3 B A B A B A B A B A B A D A B A B A
  B C A B A B A B A ~@2 A@3 B A B A B E B A B A B A D A B A B A B D A B A B A D B ~@2 A@3 B A B A@5 B A B A D A B A B A
  D C A B A B A D@2 ~@2 A@3 B A B A B A B A B A B A D A B A B A B C A B A B A B A ~@2 A@3 B A B A B A B A B A B A D A B
  A B A B A@2 B A B A B A ~@3
>`.pickRestart({
  A: "x!4", B: "x ~ x!2", C: "x!3 ~", D: "x!2", E: "~ x!3",
})).gain(0.38)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@47 A@2 ~@15 B ~@14 A@2 ~@8 A ~@6 B ~@14 A@2 ~@15 B ~@14 A@2 ~@15 B ~@14 A@2 ~@15 B ~@14 A@2 C
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.38)

// drums · tambourine
const tambourine = s("tb").struct("<~@3 A@44 ~@2 A@30 ~@2 A@30 ~@2 A@30 ~@2 A@30 ~@2 A@30 ~@3>".pickRestart({
  A: "x!8",
})).gain(0.16)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@5 A@42 ~@2 A@30 ~@2 A@30 ~@2 A@30 ~@2 A@30 ~@2 A@30 ~@3>".pickRestart({
  A: "x!8",
})).gain(0.83)

stack(
  piano, bass, marimba, rock_organ, rock_organ_2, trumpet, trumpet_2, kick, clap, snare, snare_soft, hihat, open_hat,
  crash, tambourine, cabasa
)

More by McCartney