Strudelify

Two Out Of Three Ain't Bad

Meat Loaf

KeyA majorTempo78 bpm
0:00/0:00
// Two Out Of Three Ain't Bad — Meat Loaf
// 78 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Bass" named as a bass, played on electric bass finger (its harpsichord patch is not one); ch 6 "Strings" named as a string part, played on string ensemble 1 (its acoustic guitar nylon patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(78/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 · electric bass finger · "Bass"
const bass = note(`<
  ~@3 A B C D E F G H I B C D E F G H@2 J K J L J M N@2 O@2 P@2 Q R S T U V W X U V W X Y J K J L J M N@2 Z AA AB AC AD
  AE AF AG AH AI AJ AK AL AM AN AO AP AQ AJ AK AL AM AN AO AP@2 AR@2 AS Q R S T U V W X Q R S T U V W X U V W E AT@4 ~@2
>`.pickRestart({
  A: "~@8 e3@4 e2@3 [f2,f#2,g2]", B: "a2, g#2 ~@15", C: "g#2", D: "d3", E: "a2", F: "a2 g#2", G: "f#2", H: "e2",
  I: "e2@15 [f2,f#2,g2]", J: "d3@6 d3 ~ d3@3 ~ e3@3 ~", K: "a2@3 a2 b2@2 c#3@2", L: "a2@5 ~ a2@2 b2@4 c#3@4",
  M: "a2@5 ~ f#2@2 f#2@4 f#2@4", N: "g2@5 ~ g2 ~ g2@5 ~ g2@2", O: "[d3@5 ~ d3@2 d3@6 e3@8 e3@2 e3@5 ~ e3 ~]/2",
  P: "d3@6 e3 ~ e3@6 e3 ~", Q: "a2@6 a2 ~ a2@3 ~ g#2@3 ~", R: "f#2@5 ~ f#2 ~ f#2@3 ~ e3@3 ~", S: "d3@6 d3 ~ e3@4 d3@4",
  T: "c#3 g#2 f#2 a2", U: "b2@5 ~ b2 ~ b2@3 ~ b2@4", V: "b2@3 b2 b2@2 b2@2", W: "d3!2 f3!2",
  X: "a2@6 a2 ~ a2@3 ~ a2@3 ~", Y: "a2@6 a2 ~ b2@3 ~ c#3@3 ~", Z: "d3 e3 e3@2 e3@4", AA: "e3@3 e3@3 e3@2",
  AB: "c#3@5 ~ c#3 ~ c#3@5 ~ c#3 ~", AC: "c#3@5 ~ c#3 ~ c#3@6 g#2 a2", AD: "d3@5 ~ d3 ~ d3@5 ~ d3 ~",
  AE: "d3@7 a2 d3 ~ d3@3 ~ d3 ~", AF: "c#3@5 ~ c#3 ~ c#3@5 ~ g#2 a2", AG: "c#3@6 ~ c#3!2 ~ c#3@3 ~ c#3 ~",
  AH: "d3@5 ~ d3 ~ d3 ~ d3@3 ~ d3 ~", AI: "e3@5 ~ e3 ~ e3 ~ e3@3 ~ e3 ~", AJ: "a2@3 a2 a2@3 a2",
  AK: "c#3@3 c#3 c#3@3 c#3", AL: "d3@3 d3 d3@2 e3@2", AM: "a2@3 a2 a2@2 e3@2", AN: "a2@3 a2 g#2@3 g#2",
  AO: "f#2@3 f#2 f#2@3 f#2", AP: "e2@3 e2 e2@3 e2", AQ: "e2@3 e2 f#2@2 g#2@2", AR: "d2@3 e2 e2@3 e2",
  AS: "d2@2 d2@2 e2@3 e2", AT: "[~ c#3@17 d3@19 ~ a2@22 ~@4]/4",
})).s("gm_electric_bass_finger").gain(0.04)

// chords · piano
const piano = note(`<
  A B C D E F G H I J K@2 E F G H I J K@2 L M N M O P Q@2 R@3 S T U V W X@2 Y Z@3 Y AA AB@2 M AC M O P Q@2 AD@2 AE@2
  AF@2 AG@2 AH AI E AJ G H I J K@2 E F G H I J K@2 AK@2 AL@2 U V W X@2 AM AA T U AN W X@2 AO Z@3 AM AP AQ@2 AR@3 ~
>`.pickRestart({
  A: "~@7 e5, [a5,a6], a4 [a4,e6,e7], ~ e5@2 e5@2 e5 f#5@2, ~ c#5@3", // A A5
  B: "~@7 b4, [f#6,f#7], g#4@3 e5@2 b4 [e5,d6,d7]@2, ~ e5 b4@2 [g#4,c#6,c#7]@4, ~ [e6,e7]@3", // F# E7 C#5 E
  C: "~@7 d4, [e6,e7]@3 f#4, f#4@5 a4@3, ~ a4@3 [d5,a5,a6]@4, ~@2 d5 e5@5", // E D5
  D: "[d3,d4,d5,f#5,a5]@3 [e3,g#4,b4,e5,g#5] [e3,g#4,b4,e5,g#5]@4", // D E
  E: "c#5 ~@6 a4, a3@15 ~, a4@3 a4@4 ~, e5@2 e5@3 e5@3, ~ c#5@3 c#5@2 c#5@2",
  F: "c#5 ~@5 g#4 c#5, [g#2,g#3,g#5]@15 ~, e5@6 e5@4 e5@5 ~, g#4 g#4@2 ~, ~ c#5@3 c#5@3 ~", // G#
  G: "d4@2 ~@2 a4@2 [d5,f#5] ~ [d3,d5,f#5]@2 [d4,a4]@2 ~@2 [b4,e5]@2, [d3,d5,f#5]@3 ~@3 [e3,e4]@2, a4 ~@3, ~ d4@2 ~@5", // D D5 E5 D E
  H: "~@7 [a4,c#5], a3@3 a5@5, ~ e4@2 c#5 a4 c#5 [a3,e4,b4,d5]@2, ~ c#5 a4@2 f#5@4, ~@2 e5@2 [a3,e4,d5] e5@3", // A Asus4
  I: "a3@2 ~@2 e4@2 [a4,c#5] ~@5 [a4,c#5,e5]@2 e4 ~, [a4,c#5]@3 ~@5, e4@2 ~@3 e4@2 ~, ~@2 a3@4 ~@2 g#3@7 ~", // A
  J: "~@3 a4@2 ~ f#5 a5, f#3@15 ~, ~@2 a4@4 ~@4 a4@4 a4 ~, ~@2 a5@5 ~, ~@4 [c#5,f#5]@7 c#5@4 ~", // F#5
  K: "[[e3,e4,a4,d5,f#5]@4 e4 ~ [a4,d5,f#5] [a4,d5,f#5,a5]@2 [g#4,b4,e5,g#5] [g#4,b4,e5,g#5]@6, ~@4 e3@3 e3@9, ~@2 [a4,d5,f#5] ~@5, ~@10 e4@7 ~@15]/2", // D E D
  L: "[d3,d4,a4,d5,f#5]@2 [d3,d4,a4,d5,f#5] [e3,e4,b4,e5]", // D E5
  M: "a3@3 ~ e5@2 [c#4,a4,c#5,e5]@2, [a4,c#5]@3 ~, e5 [b3,b4,d5], ~@3 a3@5", // A Bm
  N: "[f#4,a4,d5,f#5]@3 [a4,d5,f#5] [d3,d4,a4,d5,f#5]@2 [e3,e4,b4,e5]@2, d3 ~, ~@6 f#4@5 ~@5", // D E5
  O: "d4 ~@2 [d5,f#5] [d3,d4,a4,d5,f#5]@2 [e3,e4,b4,e5,g#5]@2, d3 ~, [d5,f#5]@3 ~@5, a4!2 ~@2, ~ d4@3 ~@4", // D E D
  P: "[a3,a4,c#5,e5] [a3,a4,c#5,e5]@2 [f#3,f#4,a4,c#5]@5", // A F#m
  Q: "[~@5 b5 ~@14 b4@2 ~@6 [b4,d5,g5]@4, g3@3 g5@5 [g3,d5,d6] g4@2 [b4,d5]@2 g4@3, [g5,b5]@3 b5@13, d5@2 d5 d6@2 g6@11, ~ b4@6 b6@9]/2", // G G5 Bm G
  R: "[d3 ~ [a4,d5,f#5] [a4,d5,f#5]@2 [d3,f#4,a4,d5,f#5]@2 e4@4 ~@3 [g#5,b5]@2 [f#4,a4,d5,f#5] [f#4,a4,d5,f#5]@2 [e3,e4,b4,e5,g#5]@5, [f#4,a4,d5,f#5]@2 f#4@3 ~@2 [g#5,b5]@7 ~@10, ~ d3@4 ~@2 e3@12 ~@5, ~@7 e5@6 e5@3 ~@8, ~@11 e4@5 d3@3 ~@5]/3", // D G#m D E D G#m
  S: "[f#4,a4,d5,f#5] ~@2 [e3,e4,b4,e5,g#5]@5, d3, ~ [f#4,a4,d5,f#5]@7", // D E D
  T: "a3 ~@2 [a4,c#5] [e4,a4,c#5]@2 [g#3,e4,a4,c#5]@2, [a4,c#5]@3 ~@5, e4!2 ~@2, ~ a3@3 a3@4", // A Amaj7 A
  U: "f#4 ~@2 [f#5,a5] [c#5,f#5,a5]@2 [e3,e4,c#5,f#5,a5]@2, f#3 [f#3,f#4], [f#5,a5]@3 ~@5, c#5!2 ~@2, ~ f#4@3 ~@4", // F#m F#m7 F# F#m
  V: "d4 ~@2 [d5,f#5] e4 ~@2 [e5,g#5], d3 e3, [d5,f#5]@3 ~ [e5,g#5]@3 ~, a4!2 b4!2, ~ d4@3 ~ e4@3", // D E D E
  W: "[c#3,c#4,g#4,c#5,e5]@4 f#4 ~@2 [f#5,a5], ~ c#3, ~@4 [f#5,a5]@3 ~, ~@2 c#5!2, ~@5 f#4@3", // C#m F#m
  X: "[~@6 b4@7 ~@15 [f#4,b4,d5]@4, b3@7 b4 d5@2 b4@3 b3@3, [b4,d5]@3 d5@5 b3@3 d5@3 ~@2, f#4@4 f#4@9 f#4@15 ~@4, ~ b2@15]/2", // Bm
  Y: "~@4 d4 ~@2 [d5,f5], d3@2 d3 a4, ~@3 f#4@3 f#4@10, ~ f#5@3, ~@2 [a4,d5]@2 [a4,d5,f5] d4@3", // Dm D5 Dm
  Z: "[a3@2 ~@4 [a4,c#5]@2 ~@14 b4@7 ~@15 [f#4,b4,d5]@4, [a4,c#5]@6 ~@10 [b4,d5]@4 f#4@2 d5@7 f#4@13 b3@6, e4@2 e4@2 ~@4 b3@7 b4 b3@3 d5@3 ~@2, ~ a3@3 [a3,e4,a4,c#5]@12 d5@2 b4@4 ~@2, ~@8 f#4 b2@15]/3", // A Bm A Bm A
  AA: "a3 ~@2 [a4,c#5] [a3,e4,a4,c#5]@4, [a4,c#5]@3 ~@5, e4!2 ~@2, ~ a3@3 ~@4", // A
  AB: "[a3 ~@2 [a4,c#5] a4@4 [d3,d4,a4,d5,f#5]@4 [d3,d4,a4,d5,f#5]@2 [e3,e4,b4,e5]@2, [a4,c#5]@3 ~@13, e4!2 ~@6, ~ a3@3 [a3,e4,c#5]@10 ~@2]/2", // A D E5 A
  AC: "[f#4,a4,d5,f#5]@3 [a4,d5,f#5] [d3,d4,a4,d5,f#5]@2 [e3,e4,b4,e5]@2, d3 ~, ~@3 f#4@3 ~@2", // D E5
  AD: "[[d3,d4,d5,f#5,a5] [e3,e4,e5,g#5,b5] [e4,e5,g#5,b5]@2 e4@4 e4 [e4,b4]@2 [e3,e4,b4]@2 [e3,e4,b4] [e3,e4,b4,d5]@2, ~@2 e3@6 a5@3 d5@2 e5@3, ~ b5@3, ~@4 [e5,g#5]@5 g#5@7, ~@8 [e3,d5,f#5] e5@2 f#5@5]/2", // D E E5 E7 E D
  AE: "[~@5 c#6 ~@14 c#5@2 ~@6 [c#5,e5,g#5]@4, c#4@15 c#6@17, [g#5,c#6]@3 ~@3 g#4@2 g#5@5 g#4@3, e5@2 e5 [e5,g#5,c#6]@5 c#4@8, ~ c#5@7 e5 g#4@2 [c#5,e5]@3 ~@2]/2", // C#m C#5 C#m
  AF: "[~@8 d4@3 ~@4 d5, d3@15 [d5,f#5]@7 d4@2 [a4,d5,f#5]@2 d4@2 a4@4, [d4,d5,f#5]@15 a5@17, a5 d6@3, ~@7 [f#6,a6]@25]/2", // D F#m
  AG: "[~@6 c#5@7 ~@15 [g#4,c#5,e5]@4, c#4@7 c#5 e5@2 c#5@3 c#4@3, [c#5,e5]@3 e5@5 c#4@3 e5@3 ~@2, g#4@4 g#4@9 g#4@15 ~@4, ~ c#3@15]/2", // C#m
  AH: "d3 ~@6 f#5, [a4,d5,f#5]@6 [d5,f#5]@7 d5@3, f#4@4 f#4@7 f#4@5, ~ d3@4 d3@3, ~@3 a4@3 a4@2", // D
  AI: "e3 ~@6 g#5, [b4,e5,g#5]@6 [e5,g#5]@7 e5@3, g#4@4 g#4@7 g#4@5, ~ e3@4 e3@3, ~@3 b4@3 b4@2", // E
  AJ: "c#5 ~@5 g#4 c#5, [c#3,c#4,g#5]@15 ~, e5@6 e5@4 e5@5 ~, g#4 g#4@2 ~, ~ c#5@3 c#5@3 ~", // C#5
  AK: "[f#4,a4,d5,f#5] [f#4,a4,d5,f#5]@2 [e3,e4,b4,e5,g#5]@5, d3@3 ~@5", // D E
  AL: "[[f#4,a4,d5,f#5]@2 [f#4,a4,d5,f#5]@2 e4@4 a3 ~@2 [a4,c#5] [e4,a4,c#5]@2 [g#3,e4,a4,c#5]@2, d3 [e3,b4,e5,g#5]@3, ~@8 [a4,c#5]@3 ~@5, ~@4 e4!2 ~@2, ~@9 a3@3 a3@4]/2", // D A Amaj7 E A
  AM: "~@3 f#4 d4 ~@2 [d5,f5], d3!2, ~@3 f#4@3 ~@2 a4@4 a4@4, ~@2 [a4,d5,f#5]@2 [d5,f5]@3 ~, ~@5 d4@3", // Dm D Dm
  AN: "d4 ~ a4 d5 e4 ~@2 [e5,g#5], d3 e3, [d5,f#5]@6 f#5 ~ [e5,g#5]@6 ~@2, a4 ~ b4!2, ~@2 d4@5 ~@3 e4@6", // E D E
  AO: "~@6 f#4 ~ d4@2 ~@4 [d5,f5]@2, d3!2, ~@3 f#4@3 ~@2 a4@4 a4@4, ~@2 [a4,d5,f#5]@2 [d5,f5]@3 ~, ~@5 d4@3", // Dm D Dm
  AP: "c#5 ~@6 a4, a3, a4@3 a4@4 ~, e5@2 e5@3 e5@3, ~ c#5@3 c#5@2 c#5@2",
  AQ: "[~ c#5@2 ~@11 g#4@2 c#5@2 d4@3 ~@4 [d5,f#5] ~@4 [d4,a4]@2, ~ [c#3,g#5]@17 [d3,d5,f#5]@7 ~@3 [d3,d5,f#5]@4, ~ e5@6 e5@5 e5@6 ~@14, ~ g#4@4 g#4@9 ~@4 a4@5 a4@4 ~@5, ~@3 c#5@6 c#5@7 ~@5 d4@5 ~@6]/2", // D D5 C#5 D
  AR: "[~@3 [b4,e5]@2 ~@8 a5@3 ~ [a5,e6,a6]@31, ~ [e3,e4]@4 a3@10 ~ [a3,e4,a4,e5]@32, ~ e4 ~@4, ~@8 c#5@5 c#5@32 ~@3, ~@11 [a4,e5]@5 ~@32]/3", // E5 A5 E A5
})).s("gm_piano").gain(0.34).pan(0)

// drums · snare
const snare = s("sd").struct("<~@20 A@24 ~ A@33 ~ A@10 ~ A@11 ~@7>".pickRestart({
  A: "~ x ~ x",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@20 [~ x ~ x]!81 ~@7>").gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@44 A ~@9 B ~@23 A ~@10 A ~@18>".pickRestart({
  A: "~@14 x!2", B: "~@7 x",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@44 A ~@9 B ~@23 A ~@10 A ~@18>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@3 x",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct("<~@53 [x!3 ~ x ~@3] [x!2 ~ x ~ x!2 ~] ~@53>").gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@44 A ~@9 B ~@23 A ~@10 A ~@18>".pickRestart({
  A: "~@6 x ~@3 x!2 ~@4", B: "~@3 x ~ x ~@2",
})).gain(0.8)

// drums · ride
const ride = s("rd").struct("<~@20 [x!8]!33 ~@2 [x!8]!46 ~@7>").gain(0.8)

stack(bass, piano, snare, hihat, low_tom, mid_tom, crash, high_tom, ride)

More by Meat Loaf