Strudelify

Baby's In Black

The Beatles

KeyG majorTempo99 bpm
0:00/0:00
// Baby's In Black — The Beatles
// 99 bpm, 12/8, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (12/8 at bar 1, 6/8 at bar 7, 12/8 at bar 7, 6/8 at bar 13, ...) are rendered on a constant 12/8 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 36 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(99/6)

// 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 · "Fingered Bass"
const bass = note("<~ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH ~>".pickRestart({
  A: "~@10 f#2 g#2, ~@19 e2@2 ~@3", B: "a2@5 ~ a2@4 ~@3 e2@5 b2@5 ~", C: "d2@6 a2@5 ~ e2@4 ~@4 f#2@2 g#2@2",
  D: "a2@6 d2@6 a2@6 e2@2 f#2 ~ g#2 ~", E: "a2@3 e2@3 a2@3 e2@2 ~", F: "~ a2@6 ~@3 c#3@2 d3@6 a2@6",
  G: "d3@6 a2@4 d3 ~ a2@4 ~@2 e2@2 f#2@2 g#2 ~", H: "a2@5 ~ e2 ~ f#2 ~ g#2 ~ a2@6 ~ a2@4 ~",
  I: "e2@5 ~ b2@4 e2 ~ d2@6 a2@5 ~", J: "e2@2 ~ e2 f#2 g#2 a2@3 d2@3", K: "a2@7 e2@5 a2@6 e2@5 ~",
  L: "a2@6 e2@6 a2@6 ~ c#3@5", M: "d3@6 a2@6 d3@5 ~ d3@4 ~@2",
  N: "~ a2@3 ~@2 e2@2 f#2 ~ g#2 ~ a2@5 ~@2 e2@2 ~ g#2 ~, ~@21 a2@2 ~", O: "f#2@5 ~ f#2@4 ~@2 b2@5 ~ b2@4 ~@2",
  P: "d2@5 ~ d2@5 ~ e2@6 b2@4 e2@2", Q: "a2@5 ~ a2@6 e2@5 ~ e2@5 ~", R: "d2@6 a2@4 d2@2 e2@5 ~ e2 ~ f#2@2 g#2 ~",
  S: "a2@7 d2@5 a2@5 ~ e2@2 f#2@2 g#2 ~", T: "a2@6 e2@4 a2@2 e2@5 ~ b2@4 e2@2",
  U: "d2@6 a2@4 d2 ~ e2@5 ~ e2@2 f#2@2 g#2 ~", V: "a2@5 ~@2 d2@4 ~ a2@6 ~@2 a2 ~ g#2 ~",
  W: "f#2@5 ~ f#2@4 ~@3 b2@5 b2@4 ~@2", X: "d2@5 ~ d2@5 ~ e2@5 ~ e2@3 ~@3", Y: "~ a2@5 e3@4 a2 ~ e2@6 b2@4 e2 ~",
  Z: "d2@6 a2@4 d2 ~ e2@5 ~ e2 ~ f#2@2 g#2 ~", AA: "a2@5 ~ d2@5 ~ a2@4 ~@2 e2@2 f#2@2 g#2 ~",
  AB: "a2@6 e2@5 ~ a2@6 e2@5 ~", AC: "~ a2@5 a2@2 ~ c#3@3 d3@6 a2@6", AD: "~ d3@5 d3 ~ c#3 ~ b2 ~ a2@4 ~@2 e2@5 ~",
  AE: "a2@6 ~@2 f#2 ~ g#2 ~ a2@6 e2@4 a2 ~, ~@3 e2@2 ~@7", AF: "e2@6 b2@4 e2 ~ d2@6 a2@4 d2 ~",
  AG: "e2@5 ~ e2@2 f#2 ~ g#2 ~ a2@6 d2@6", AH: "a2@6 e2@2 f#2@2 g#2 ~ a2@9 ~@3",
})).s("gm_fretless_bass").gain(0.64)

// chords · acoustic guitar steel · "Steel String"
const acoustic_guitar_steel = note(`<
  ~ A B C D E F@2 G H I J K L M N O P Q R S T U V W X Y Z AA AB@2 AC AD AE AF@2
>`.pickRestart({
  A: "~@8 [a2,e3,a3]@3 ~ [a2,e3,a3] ~@2 [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3] ~ [a2,e3,a3]@3", // A5
  B: "[a2,e3,a3] [e2,b2,e3]", C: "[d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@3 [e2,b2,e3]@2 [e2,b2,e3]@4",
  D: "[a2,e3,a3]@3 [d3,a3,d4]@3 [a2,e3,a3] [a2,e3,a3]@2 [e2,b2,e3]@3", // A5 D5 A5 E5
  E: "[a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@3 [a2,e3,a3]@2 ~@4", // A5
  F: "[[a2,e3,a3]@6 [d3,a3,d4]@12 [a2,e3,a3]!3 [e2,b2,e3]!3]/2", G: "[a2,e3,a3]!6 [a2,e3,a3]@6",
  H: "[e2,b2,e3]!3 [d3,a3,d4] ~@2", // E5 D5
  I: "[e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [a2,e3,a3]@2 [a2,e3,a3] [d3,a3,d4]@2 [d3,a3,d4]", // E5 A5 D5
  J: "[a2,e3,a3]@2 [a2,e3,a3] [e2,b2,e3] ~ [e2,b2,e3] [a2,e3,a3]!6", K: "~@6 [a2,e3,a3]!6", L: "[d3,a3,d4]!2 ~@10",
  M: "[a2,e3,a3]!3 [e2,b2,e3]!3 [a2,e3,a3]@6", // A5 E5 A5
  N: "[f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]!2", // F#5 B5
  O: "[d3,a3,d4]!2 ~ [e2,b2,e3]@3", P: "[a2,e3,a3]!6 [e2,b2,e3]!2 [e2,b2,e3]@2 [e2,b2,e3]!2",
  Q: "[d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [e2,b2,e3] [e2,b2,e3]@3 [e2,b2,e3]@2", // D5 E5
  R: "[a2,e3,a3]@2 [a2,e3,a3] [d3,a3,d4]@2 ~ [a2,e3,a3]@2 ~ [e2,b2,e3]@2 [e2,b2,e3]", // A5 D5 A5 E5
  S: "[a2,e3,a3]@3 [a2,e3,a3]@2 [a2,e3,a3] [e2,b2,e3]!6", // A5 E5
  T: "[d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@2 [e2,b2,e3]@3 [e2,b2,e3]!3", // D5 E5
  U: "[a2,e3,a3]!3 [d3,a3,d4]!2 ~ [a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@3", // A5 D5 A5
  V: "[f#2,c#3,f#3]@2 [f#2,c#3,f#3]@2 [f#2,c#3,f#3]!2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 ~@2", W: "[d3,a3,d4]!6 [e2,b2,e3]!6",
  X: "[a2,e3,a3]!6 [e2,b2,e3]!6", Y: "[d3,a3,d4]@3 [e2,b2,e3]!3",
  Z: "[a2,e3,a3]@2 ~ [d3,a3,d4]@2 [d3,a3,d4] [a2,e3,a3]@2 ~ [e2,b2,e3]@2 [e2,b2,e3]", // A5 D5 A5 E5
  AA: "[a2,e3,a3]!7 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]", // A5
  AB: "[[a2,e3,a3]@2 ~ [a2,e3,a3]@2 [a2,e3,a3] [d3,a3,d4]@3 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4] [d3,a3,d4]@3 [d3,a3,d4] [a2,e3,a3] ~@2 [e2,b2,e3]@3]/2", // A5 D5 A5 E5
  AC: "[a2,e3,a3]@2 [a2,e3,a3] [a2,e3,a3]@3 [a2,e3,a3]!6", AD: "[e2,b2,e3]!6 [d3,a3,d4]!4 [d3,a3,d4]@2",
  AE: "[e2,b2,e3]@2 [e2,b2,e3]@2 [e2,b2,e3]@2 [a2,e3,a3]@3 [d3,a3,d4]@3", AF: "[[a2,e3,a3] [a2,e3,a3]@2 ~]/2",
})).s("gm_acoustic_guitar_steel").gain(0.42).pan(0.9)

// chords · electric guitar clean · "Steel String"
const electric_guitar_clean = note(`<
  A@2 B C D E F@2 G H I J@2 K L M N B O P Q R S M T U O D V W@2 G X Y Z ~
>`.pickRestart({
  A: "[~@20 a2@5 e2@6 ~ a2@6 e2@5 ~@5]/2",
  B: "[e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4] [d3,g#3,b3]@2 [d3,g#3,b3]@3 [d3,g#3,b3]", // A G#dim
  C: "[f#3,a3,c4]@3 [f#3,a3,c4] [f#3,a3,c4]@2 [d3,g#3,b3]@3 [d3,g#3,b3]@2 [d3,g#3,b3]", // F#dim G#dim
  D: "[e3,a3,c#4]@3 [f#3,a3,d4]@2 [f#3,a3,d4] [e3,a3,c#4]@2 [e3,a3,c#4] [e3,g#3,b3]@2 [e3,g#3,b3]", // A D A E
  E: "[e3,a3,c#4]@3 [e3,a3,c#4] [e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4]@2 [e3,a3,c#4]", // A
  F: "[[e3,g3,c#4]@3 [e3,g3,c#4]@2 [e3,g3,c#4] [d3,f#3,a3]@2 [d3,f#3,a3]@3 [d3,f#3,a3]@2 [d3,f#3,a3]@2 [d3,f#3,a3] [d3,f#3,a3]@2 [e3,a3,c#4]@3 [e3,g#3,b3]@2 [e3,g#3,b3]]/2", // C#dim D A E
  G: "[e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4] [e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4]", // A
  H: "[d3,g#3,b3]@2 [d3,g#3,b3]@3 [d3,g#3,b3] [f#3,a3,c4]@3 [f#3,a3,c4] [f#3,a3,c4]@2", // G#dim F#dim
  I: "[g#3,b3,d4]@3 [g#3,b3,d4]@2 [g#3,b3,d4] [e3,a3,c#4]@3 [f#3,a3,d4]@2 [f#3,a3,d4]", // G#dim A D
  J: "[[e3,a3,c#4]@2 [e3,a3,c#4] [e3,g#3,b3]@2 [e3,g#3,b3] [e3,a3,c#4]@3 [e3,a3,c#4] [e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4]@2 [e3,a3,c#4] [e3,g3,c#4]@3 [e3,g3,c#4]@2 [e3,g3,c#4]]/2", // A E A C#dim
  K: "[d3,f#3,a3]@2 [d3,f#3,a3]@3 [d3,f#3,a3]@2 [d3,f#3,a3]@2 [d3,f#3,a3] [d3,f#3,a3]@2", // D
  L: "[e3,a3,c#4]@3 [e3,g#3,b3]@2 [e3,g#3,b3] [e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4]", // A E A
  M: "[e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4] [d#3,f#3,a3]@2 [d#3,f#3,a3]@3 [d#3,f#3,a3]", // A D#dim
  N: "[d3,f#3,a3]@4 [d3,f#3,a3]@2 [g#3,b3,d4]@3 [g#3,b3,d4]@3", // D G#dim
  O: "[f#3,a3,c4]@3 [f#3,a3,c4] [f#3,a3,c4]@2 [g#3,b3,d4]@3 [g#3,b3,d4]@2 [g#3,b3,d4]", // F#dim G#dim
  P: "[e3,a3,c#4]@3 [d3,f#3,a3]@2 [d3,f#3,a3] [e3,a3,c#4]@2 [e3,a3,c#4] [e3,g#3,b3]@2 [e3,g#3,b3]", // A D A E
  Q: "[e3,a3,c#4]@3 [e3,a3,c#4] [e3,a3,c#4]@2 [e3,g#3,b3]@3 [e3,g#3,b3]@2 [e3,g#3,b3]", // A E
  R: "[f#3,a3,c4]@3 [f#3,a3,c4]@2 [f#3,a3,c4] [d3,g#3,b3]@2 [d3,g#3,b3]@3 [d3,g#3,b3]", // F#dim G#dim
  S: "[e3,a3,c#4]@3 [d3,f#3,a3] [d3,f#3,a3]@2 [e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4]", // A D A
  T: "[d3,f#3,a3]@3 [d3,f#3,a3] [d3,f#3,a3]@2 [g#3,b3,d4]@3 [g#3,b3,d4]@2 [g#3,b3,d4]", // D G#dim
  U: "[e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4] [g#3,b3,d4]@2 [g#3,b3,d4]@3 [g#3,b3,d4]", // A G#dim
  V: "[e3,a3,c#4]@3 [e3,a3,c#4] [e3,a3,c#4]@3 [e3,a3,c#4]@2 [e3,a3,c#4]@3", // A
  W: "[[e3,g3,c#4]@3 [e3,g3,c#4]@2 [e3,g3,c#4] [f#3,a3,d4]@2 [f#3,a3,d4]@3 [f#3,a3,d4]@2 [f#3,a3,d4]@2 [f#3,a3,d4] [f#3,a3,d4]@2 [e3,a3,c#4]@3 [d3,g#3,b3]@2 [d3,g#3,b3]]/2", // C#dim D A G#dim
  X: "[g#3,b3,d4]@2 [g#3,b3,d4]@3 [g#3,b3,d4] [f#3,a3,c4]@3 [f#3,a3,c4] [f#3,a3,c4]@2", // G#dim F#dim
  Y: "[g#3,b3,d4]@3 [g#3,b3,d4]@3 [e3,a3,c#4]@3 [f#3,a3,c4]@2 [f#3,a3,c4]", // G#dim A F#dim
  Z: "[e3,a3,c#4]@2 [e3,a3,c#4]@3 [e3,a3,c#4] [e3,a3,c#4]@3 ~@3", // A
})).s("gm_electric_guitar_clean").gain(0.41).pan(0.2)

// other · electric guitar clean · "Guitar/Solo"
const electric_guitar_clean_2 = note("<A@2 ~@2 B C ~@13 B D E F ~@4 B C ~@5 G ~>".pickRestart({
  A: "[~@20 c#4@6 b3@2 a3@2 f3@2 ~ a2@6 ~@9]/2", B: "~@12 c#4@4 ~@2 b3@3 a3 f3@2", C: "a2 ~@5",
  D: "a2@4 ~@2 b3@3 a3@2 f#3 g#3@2 f#4@3 ~ b3@3 ~@2 e3, ~@17 e4@2 ~@5",
  E: "f#3 ~ d4@2 ~ d4 c4@3 ~@2 d4@4 b4@3 d4 b4@3 ~@2", F: "~ b3@5 b3@2 a3@2 f#3@2 a2@6 ~@6",
  G: "c#4@4 ~@2 b3@3 a3 f3@2 e3@10 ~@2",
})).s("gm_electric_guitar_clean").gain(0.69).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@2
  [x ~@2 x!2 ~]
  [x ~@3 x ~@8 x ~@2 x ~@7]!25
  [x!3 ~@3 x!3 ~@3]!3
  [x ~ x ~ x ~@8 x ~@2 x ~@7]
  [x ~@3 x ~@8 x ~@2 x ~@7]!2
  [x ~@3 x ~@8 x ~@10]
  ~
>`).gain(0.41)

// drums · snare
const snare = s("sd").struct("<~@2 A B@25 A B@2 C B@2 D ~>".pickRestart({
  A: "~@7 x ~@10 x ~@5", B: "~ x ~ x", C: "~@3 x", D: "~ x ~@2",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@31 [~@8 x!3 ~@13] ~@4>").gain(0.46)

// drums · mid tom
const mid_tom = s("mt").struct("<~@31 [~@6 x!2 ~@16] ~@4>").gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct("<~@2 [x!24]!32 [x!22 ~@2] ~>").gain(0.27)

// drums · ride
const ride = s("rd").struct("<~@2 A B C B C D A E D E D F G A G E A G A G A G A G H I ~@3 J K L M ~>".pickRestart({
  A: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~", B: "x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x!3 ~",
  C: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2", D: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~",
  E: "x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~", F: "x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x!3 ~ x ~ x ~", G: "x!12",
  H: "x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~", I: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~", J: "~@6 x!6",
  K: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~", L: "x!3 ~ x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~ x ~",
  M: "x!3 ~ x ~ x ~ x!3 ~ x ~@11",
})).gain(0.32)

stack(
  bass, acoustic_guitar_steel, electric_guitar_clean, electric_guitar_clean_2, kick, snare, low_tom, mid_tom,
  tambourine, ride
)

More by The Beatles