Strudelify

Short People

Randy Newman

KeyA majorTempo117 bpm
0:00/0:00
// Short People — Randy Newman
// 117 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 85 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): Guitar2.
setcpm(117/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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 B C D A B C D E F G H E F I J K L M N K L M N O P O P O P Q B R D S T U V S T W X E F G H E F Y J K L M N K L M N K
  Z M N O P O P O P Q B AA AB Q B AA AB Q B AA AB Q B ~@3
>`.pickRestart({
  A: "[a1,a2,a3,c#4,a4]@2 [a3,c#4,a4]@2 [a3,c#4,a4] ~ a1@2, ~@5 [a3,e4,a4]@3", // A A5
  B: "[f#1,f#2,a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4] ~ [f#1,f#2]@2, ~@5 [a3,f#4,a4]@3", // F#m7 A5 F# D
  C: "[b1,b2,a3,d#4,a4]@2 [a3,d#4,a4]@2 [a3,d#4,a4] ~ b1@2, ~@5 [a3,e4,a4]@3", // B7 Adim A5
  D: "[e1,e2,a3,d4,a4]@2 [a3,d4,a4]@2 [a3,d4,a4] ~ [e1,e2]@2, ~@5 [a3,e4,a4]@3", // Dsus2 D5 E A5
  E: "[a1,a2,a3,c#4,a4]@2 [a3,c#4,a4]@2 [a3,c#4,a4]@2 ~ a1, ~@3 [a3,c#4,a4]", // A
  F: "[f#1,f#2,a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4]@2 ~ [f#1,f#2], ~@3 [a3,e4,a4]", // F#m7 A5 F# A5
  G: "[b1,a3,d#4,a4]@2 [a3,d#4,a4]@2 [a3,d#4,a4]@2 ~ b1, ~@3 [a3,d#4,a4]", // B7 Adim
  H: "[e1,e2,a3,d4,a4]@2 [a3,d4,a4]@2 [a3,d4,a4]@2 ~ e2, ~@3 [a3,d4,a4]", // Dsus2 D5
  I: "[b1,a3,d#4,a4]@2 [a3,d#4,a4]@2 [a3,d#4,a4]@2 ~ b2, ~@3 [a3,d#4,a4]", // B7 Adim
  J: "[e1,e2,a3,d4,a4]@2 [a3,d4,a4]@2 ~ e2 f#2 e2, ~@2 [a3,d4,a4]!2", // Dsus2 D5
  K: "[a1,a2,a3,c#4,a4]@2 [a3,c#4,a4]@2 [a3,c#4,a4]@2 ~ [a1,a2], ~@3 [a3,c#4,a4]", // A
  L: "[g1,g2,a3,c#4,g4,a4]@2 [a3,c#4,g4,a4]@2 [a3,c#4,g4,a4]@2 ~ [g1,g2], ~@3 [a3,c#4,g4,a4]", // A7 G A7
  M: "[f#1,f#2,a3,d4,a4]@2 [a3,d4,a4]@2 [a3,d4,a4]@2 ~ [f#1,f#2], ~@3 [a3,d4,a4]", // D D5 F# D5
  N: "[f1,f2,a3,d#4,a4]@2 [a3,d#4,a4]@2 [a3,d#4,a4]@2 ~ e2, ~@3 [a3,d#4,a4]", // F7 Adim
  O: "[a1,a2,a3,c#4,a4] [a3,c#4,a4] [f#1,f#2,a3,e4,a4] [a3,e4,a4]", // A F#m7 A5
  P: "[b1,b2,a3,d#4,a4]@2 [a3,d#4,a4]@2 e2 f#2 a2 f#2, ~@2 [a3,d4,a4]!2", // B7 Adim D5
  Q: "[a1,a2,a3,c#4,a4]@2 [a3,c#4,a4]@2 [a3,c#4,a4] ~ [a1,a2]@2, ~@5 [a3,e4,a4]@3", // A A5
  R: "[b1,a3,d#4,a4]@2 [a3,d#4,a4]@2 [a3,d#4,a4] ~ [f1,f2]@2, ~@5 [a3,e4,a4]@3", // B7 Adim F A5
  S: "[a3,d4,e4,f#4]@2 [a3,d4,e4,f#4]@2 [a3,d4,e4,f#4]@2 ~ d2, d2@3 [a3,d4,e4,f#4]", // D
  T: "[b3,e4]@2 [b3,e4]@2 [b3,e4]@2 ~ c#2, c#2@3 [b3,e4]", // E5
  U: "[a3,d4,e4,f#4]@2 [a3,d4,e4,f#4]@2 [a3,d4,e4,f#4]@2 ~ b1, b1@3 [a3,e4,f#4]", // D F#m7
  V: "e2 f#2 [a3,d4,e4,f#4]@2 [a3,d4,e4,f#4]@2 [e2,a3,d4,f#4]@2, [a3,d4,e4,f#4]@2 e2 ~@5", // D
  W: "[a3,d4,e4,f#4]@2 [a3,d4,e4,f#4]@2 [a3,d4,e4,f#4]@2 ~ b1, b1@3 [a3,d4,e4,f#4]", // D
  X: "[e2,a3,d4,e4,f#4] [d2,a3,d4,e4,f#4] [c#2,a3,d4,e4,f#4] [b1,a3,d4,e4,f#4]", // D Dmaj7 Bm7
  Y: "[b1,a3,d#4,a4] [a1,a2,a3,d#4,a4] [g#1,g#2,a3,d#4,a4] [f#1,f#2,a3,d#4,a4]", // B7 Adim G# D#dim
  Z: "[g1,g2,a3,c#4,g4,a4]@2 [a3,c#4,g4,a4]@2 [a3,c#4,g4,a4]@2 ~ [g#1,g#2], ~@3 [a3,c#4,g4,a4]", // A7 G# A7
  AA: "[b1,b2,a3,d#4,a4]@2 [a3,d#4,a4]@2 [a3,d#4,a4] ~ [b1,b2]@2, ~@5 [a3,e4,a4]@3", // B7 Adim B A5
  AB: "[e1,e2,a3,d4,a4]@2 [a3,d4,a4]@2 [a3,d4,a4] ~ e2@2, ~@5 [a3,e4,a4]@3", // Dsus2 D5 A5
})).s("gm_piano").gain(0.36).pan(0.4)

// bass · fretless bass · "Bass"
const bass = note(`<
  A B C D A B C D A B C D A B C D A E F G A E F G H I H I H I A B J D K L M N K L M N A B J D A B J D A E F G A E F G A
  E F G H O H O H O A B C D A B C D A B C D A B ~@3
>`.pickRestart({
  A: "a1@6 ~ a1 a1@6 ~ e1", B: "f#1@6 ~ f#1 f#1@6 ~ c#1", C: "b1@6 ~ b1 b1@6 ~ f#1", D: "e1@6 ~ e1 e1@6 ~ b0",
  E: "g1@6 ~ g1 g1@6 ~ e1", F: "f#1@6 ~ f#1 f#1@6 ~ a1", G: "f1@6 ~ f1 f1@6 ~ c1", H: "a1@4 ~@3 e1 f#1 ~ f#1@4 ~ c#1",
  I: "b0@4 ~@3 f#0 e1 ~ e1@4 ~ b0", J: "b0@6 ~ b0 b0@6 ~ f#0", K: "d1@4 ~@3 a0 d1 ~ d1@4 ~ a0",
  L: "c#1@4 ~@3 g#0 c#1 ~ c#1@4 ~ g#0", M: "b0@4 ~@3 f#0 b0 ~ b0@4 ~ f#0", N: "e1@4 ~@3 a1 e1 ~ e1@4 ~ a1",
  O: "b1@4 ~@3 f#1 e1 ~ e1@4 ~ b0",
})).s("gm_fretless_bass").gain(0.4)

// chords · electric guitar muted · "Guitar1"
const electric_guitar_muted = note(`<
  ~@16 A B C D A B C D E F E F E F ~@20 A B C D A B C D A B C D E F E F E F ~@17
>`.pickRestart({
  A: "~@7 a3, [e4,a4,c#5]!4, ~ a3@2 a3@2 a3@2 ~", B: "a3 ~@6 a3, [g4,a4,c#5]!4, ~ a3@2 a3@2 a3@2 ~",
  C: "~@7 d3, [a3,d4,f#4]!4, ~ d3@2 d3@2 d3@2 ~", D: "f3 ~@6 f3, [d#4,f4,a4]!4, ~ f3@2 f3@2 f3@2 ~",
  E: "~@4 [e4,a4,c#5] ~@7 [c#4,f#4,a4,e5] ~@3", F: "~@4 [f#4,b4,d#5,a5] ~@7 [b3,d4,e4,a4] ~@3",
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.4)

// chords · electric guitar clean · "Guitar2"
const electric_guitar_clean = note("<~@17 A ~ B ~ A ~ B ~@27 A ~ B ~ A ~ B ~ A ~ B ~@23>".pickRestart({
  A: "~@4 e4 ~@7 e4 ~@3", B: "~@4 c4 ~@7 c4 ~@3",
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.6)

// chords · string ensemble 2 · "Guitar2"
const string_ensemble_2 = note("<~@24 A B A B A B ~@32 A B A B A B ~@17>".pickRestart({
  A: "c#5 a4 ~ c#4, e5 [f#4,a4]", B: "a4!3 d5, b4 e4",
})).s("gm_string_ensemble_2").gain(0.28).pan(0.6)

// chords · acoustic guitar nylon · "Guitar3"
const acoustic_guitar_nylon = note(`<
  A B C D A B E D A B E D A B E D ~@14 A B F D ~@8 A B E D A B E D ~@18 A B F D A B C G A B F D A B ~@3
>`.pickRestart({
  A: "~@7 a3, a2 c#4 a4 e4, ~ a3@2 a3@2 c#4@2 ~",
  B: "e3 ~@2 e3 ~@3 [e3,f#3], f#2 a3 [e3,f#4] c#4, ~ [e3,f#3]@2 f#3@2 a3@2 ~", // Esus2
  C: "a3!4 ~@3 [a3,b3], b2 d#4 [a3,b4] f#4, ~ b3@2 b3@2 d#4@2 ~", // Asus2
  D: "d3 ~@2 d3 ~@3 [d3,e3], e2 a3 [d3,e4] b3, ~ [d3,e3]@2 e3@2 a3@2 ~", // Dsus2
  E: "a3 ~@2 a3!2 ~@2 [a3,b3], b2 d#4 b4 f#4, ~ [a3,b3]@2 b3@2 [a3,d#4]@2 ~", // Asus2 Adim
  F: "a3 ~@2 a3 ~@3 [a3,b3], b2 d#4 [a3,b4] f#4, ~ [a3,b3]@2 b3@2 d#4@2 ~", // Asus2
  G: "d3 ~@2 d3 ~@2 d3 [d3,e3], e2 a3 [d3,e4] b3, ~ [d3,e3]@2 e3@2 a3@2 ~", // Dsus2
})).s("gm_acoustic_guitar_nylon").gain(0.4)

// chords · string ensemble 1 · "Guitar3"
const string_ensemble_1 = note("<~@34 A B C A@2 B C A ~@43>".pickRestart({
  A: "d3@2 ~@4 d3 a2 d3@2 ~@4 d3 a2, [a3,d4,f#4]!4, ~ d3@2 ~@2 d3@2 ~", // D
  B: "c#3@2 ~@4 c#3 g#2 c#3@2 ~@4 c#3 g#2, [g#3,c#4,e4]!4, ~ c#3@2 ~@2 c#3@2 ~", // C#m
  C: "b3@2 ~@4 b3 f#3 b3@2 ~@4 b3 f#3, [f#4,b4,d5]!4, ~ b3@2 ~@2 b3@2 ~", // Bm
})).s("gm_string_ensemble_1").gain(0.3)

// drums · kick
const kick = s("bd").struct("<[x ~@6 x!2 ~@6 x]!82 ~@3>").gain(0.45)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!24 ~@6 [~ x ~ x]!4 ~@8 [~ x ~ x]!20 ~@6 [~ x ~ x]!14 ~@3>").gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@24 [~ x ~ x]!6 ~@4 [~ x ~ x]!8 ~@20 [~ x ~ x]!6 ~@17>").gain(0.45)

// 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 C@6 A B A B C@8 A B A B A B A B A B A B A B A B A B A B C@6 A B A B A
  B A B A B A B A B ~@3
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!16",
})).gain(0.2)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@7 A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@7 A ~ A ~ A ~ A
  ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@7 x",
})).gain(0.2)

stack(
  piano, bass, electric_guitar_muted, electric_guitar_clean, string_ensemble_2, acoustic_guitar_nylon,
  string_ensemble_1, kick, rim, snare, hihat, open_hat
)

More by Randy Newman