Strudelify

Things We Said Today

The Beatles

KeyA minorTempo127 bpm
0:00/0:00
// Things We Said Today — The Beatles
// 127 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Gtr 2 Nylon Bank 00.
setcpm(127/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 · rock organ · "Rock Organ Lead"
const rock_organ = note(`<
  ~@3 A@2 B@2 A@2 B@2 C@2 D E A@2 F@2 ~ A@2 B@2 A@2 B@2 C@2 G H A@2 I@2 J@2 K@4 L@2 M@2 B@2 A@2 B@2 N@2 O H A@2 I@2 J@2
  K@4 L@2 M@2 B@2 A@2 B@2 N@2 O H A@2 I@2 ~@15
>`.pickRestart({
  A: "[a4 c5@3 a4 g4@2 a4@4 e4@3 ~@2]/2", B: "[a4 c5@3 a4 g4@2 a4@5 ~@4]/2",
  C: "[[c5,e5] [c5,e5]@4 [c5,e5] [b4,d#5] [a#4,d5]@4 [a#4,d5]@3 ~@2]/2", // C B A#
  D: "[a4,c5] [a4,c5]@2 [a4,c5]@2 [f4,a4]@2 [a4,c5]", E: "[a#4,d5]@2 [a#4,d5] [a#4,d5]@3 ~@2",
  F: "[a4 c5@3 a4 g4@2 a4@7 ~@2]/2", G: "~ [a4,c5]!2 [a4,c5]@3 [f4,a4] [a4,c5]",
  H: "[a#4,d5] [a#4,d5]@2 [a#4,d5]@3 ~@2", I: "[[e4,a4] [a4,c5]@3 [e4,a4] d4 e4 [e4,a4]@7 ~@2, ~@5 g4@2 ~@9]/2",
  J: "[a4 a4@2 a4@2 ~ a4 d5@2 c5@2 a4@3 ~@2, ~@5 c#5@2 ~@9]/2",
  K: "[d#5 d#5@2 d#5@2 b4@2 d5@3 d5 c5 d5 c5@2 a4@3 ~ e4 a4 c#5@2 d5@2 c5@2 a4@3 ~@2]/4",
  L: "[d#5 d#5@2 d#5@2 b4@2 d5@3 d5@2 d5 c5@2 a4]/2", M: "[~@2 c5@2 a4 g4@2 a4@4 e4@3 ~@2]/2",
  N: "[[c5,e5] [c5,e5]@3 [c5,e5]@2 [b4,d#5] [a#4,d5]@4 [a#4,d5]@3 ~@2]/2", // C B A#
  O: "[a4,c5] [a4,c5]@2 [a4,c5]@3 [f4,a4] [a4,c5]", // Am F Am
})).s("gm_rock_organ").gain(0.71).pan(0.4)

// chords · acoustic guitar nylon · "Gtr 1 Nylon Bank 32"
const acoustic_guitar_nylon = note("<A B@2 C ~@13 A B C ~@62 A B@14 D ~>".pickRestart({
  A: "~@14 [a2,e3,a3]!2", B: "[a2,e3,a3]@14 [a2,e3,a3]!2", C: "[a2,e3,a3]", D: "[a2,e3,a3]@14 [a2,e3,a3] ~",
})).s("gm_acoustic_guitar_nylon").gain(0.41).pan(0.2)

// chords · acoustic guitar nylon · "Gtr 2 Nylon Bank 00"
const acoustic_guitar_nylon_2 = note("<~@4 A ~ A ~ A ~@3 B ~@16 B ~@23 B ~@23 B ~@21>".pickRestart({
  A: "~@5 [b3,d4,g4]@3", B: "[f3,d4,g4]",
})).s("gm_acoustic_guitar_nylon").gain(0.32).pan(0.9)

// chords · acoustic guitar nylon · "Gtr 3 Nylon Bank 32"
const acoustic_guitar_nylon_3 = note(`<
  A B@2 C D C D C D C D E F G H C D I B D C D C D C D C D E F G H C D I J@2 K L M J K L N C D C D C D C D E F G H C D I
  J@2 K L M J K L N C D C D C D C D E F G H C D I D@15 ~
>`.pickRestart({
  A: "~@14 [a2,e3,a3,c4,e4]!2", // Am
  B: "[a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]!2", // Am
  C: "[a2,e3,a3,c4,e4]!5 [e2,a2,d3,g3,b3,e4]!2 [a2,e3,a3,c4,e4]", D: "[a2,e3,a3,c4,e4]!8", E: "[c3,e3,g3,c4,e4]!8",
  F: "[c3,e3,a#3,c4,e4]!8", G: "[f2,c3,f3,a3,c4,f4]!8", H: "[a#2,f3,a#3,d4,f4]!8",
  I: "[a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [e2,a2,d3,g3,b3,e4]@2 [e2,a2,d3,g3,b3,e4]@2 [a2,e3,a3,c4,e4]!2", // Am Em7 Am
  J: "[a2,e3,a3,c#4,e4]!8", K: "[d3,a3,c4,f#4]!8", L: "[b2,d#3,a3,b3,f#4]!8", M: "[e2,b2,d3,g#3,b3,e4]!8",
  N: "[a#2,f3,g#3,d4,f4]!8", // A#7
})).s("gm_acoustic_guitar_nylon").gain(0.17).pan(0.1)

// bass · fretless bass · "Fretless E.Bass"
const bass = note(`<
  ~ A B C D@7 E F G H I J K L@2 D@3 M@2 D M D E F G H I J K N@2 O P Q R S T U D@3 M@2 D M D E F G H I J K N R S V Q R S
  T U D@3 M@2 D M D E F G H I J K W X@14 ~
>`.pickRestart({
  A: "a2@7 ~ e2@2 e2@4 e2@2", B: "a2@7 ~ e2@7 ~", C: "a2@6 a2@2 e2@7 ~", D: "a2@3 a2 e2@2 g2@2", E: "c2@3 c2 c2@3 c2",
  F: "c2@3 c2 c2@2 c2@2", G: "f2@3 f2 f2@3 f2", H: "a#1@3 a#1 a#1@3 a#1", I: "a1@3 a1 e1@3 g1", J: "a1@3 a1 e2@2 g2@2",
  K: "a2@7 ~ e2@4 e2@4", L: "a2@6 a2@2 a2@7 ~", M: "a2@3 a2 e2@2 e2@2", N: "a1@3 a1 a1@3 a1", O: "d2@3 d2 d2@3 d2",
  P: "b1@3 b1 b1@3 b1", Q: "e2@3 e2 e2@3 e2", R: "a1@3 c#2 e2@2 c#2@2", S: "d2@3 f#2 a2@2 f#2@2", T: "b2@3 b2 f#2@3 b2",
  U: "a#2@3 a#2 a#2@3 a#2", V: "b1@3 d#2 f#2@2 d#2@2", W: "a1@7 ~ e2@6 e2@2", X: "a1@7 ~ e2@7 ~",
})).s("gm_fretless_bass").gain(0.54).pan(0.6)

// chords · piano
const piano = note("<A B@2 C ~@13 A B D ~@15 E@2 F G H E F G I ~@15 E@2 F G H E F G I ~@15 A B@13 J ~>".pickRestart({
  A: "~@14 a3!2", B: "a3@14 a3!2", C: "a3@3 ~", D: "a3@15 ~", E: "[c#5,e5,g5,a5]!8", F: "[a4,d5,f#5]!8",
  G: "[d#5,f#5,b5]!8", H: "[b4,e5,g#5]!8", I: "[d5,f5,a#5]!8", J: "a3@14 a3 ~",
})).s("gm_piano").gain(0.17).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B@9 A B@16 A B@6 A@9 B@8 A B@6 A@9 B@8 A B@6 A C D C@2 D C D C D@2 C D C D ~
>`.pickRestart({
  A: "x ~@3 x!2 ~ x", B: "x!2", C: "x ~@3 x ~@2 x", D: "x ~@3 x!2 ~@2",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~ [~ x ~ x]!42 [~@4 x ~@7 x ~ x!2] [~ x ~ x]!23 [~@4 x ~@7 x ~ x!2] [~ x ~ x]!30 ~>")
  .gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<~ A@34 ~@9 B A@11 B A@2 ~@9 B A@29 ~>".pickRestart({
  A: "x!8", B: "~ x!7",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@35 [x!8]!8 [x!7 ~] ~@15 [x!8]!8 [x!7 ~] ~@31>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@44 x ~@11 x ~@11 x ~@30>").gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct("<~@35 [x!8]!9 ~@15 [x!8]!9 ~@16 [~ x ~@2]!14 ~>").gain(0.4)

stack(
  rock_organ, acoustic_guitar_nylon, acoustic_guitar_nylon_2, acoustic_guitar_nylon_3, bass, piano, kick, snare, hihat,
  open_hat, crash, tambourine
)

More by The Beatles