Strudelify

New York Minute

Don Henley

KeyC minorTempo66 bpm
0:00/0:00
// New York Minute — Don Henley
// 66 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 13 "Strngs Rh" string ensemble 2 (copy of ch 12 "Strngs Lf" string ensemble 2); ch 13 "Strngs Rh" string ensemble 1 (copy of ch 12 "Strngs Lf" string ensemble 1); ch 16 "Vocals Rg" choir aahs (copy of ch 15 "Vocals Lf" choir aahs)
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(66/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 · fretless bass · "Fretless"
const bass = note(`<
  ~@10 A B@2 C D ~ E@2 F G ~@2 H I J K L@2 M ~ N ~@8 O P ~ Q ~@3 R ~@10 S T ~@4 U V W X Y X Z ~@3 AA AB ~@2 AC AD@3 AE
  AB ~@2 AF ~@18
>`.pickRestart({
  A: "~@12 g3@3 bb3", B: "[g3@27 eb3 d3 ~ eb3 f3]/2", C: "c3@12 f2@3 eb2", D: "c2@3 ~", E: "[~@3 bb2@3 ~@2]/2",
  F: "~@13 ab2 eb3 d3", G: "c3 ~", H: "~@5 g2 bb2 eb3 c3@8", I: "~@11 eb2 ab2@4", J: "~@12 g3@3 eb3", K: "ab2@7 ~",
  L: "[~@12 c3@8 ~@6 eb3 d3 c3@2 g2 c2]/2", M: "g2 ~", N: "~@9 g3 bb3 c4 gb3 f3 eb3 c3", O: "~@3 eb3", P: "~@3 d3",
  Q: "~@11 [eb3,f3] eb3 d3 g2 eb2", R: "~@7 f3 eb3 f3 g3 eb3 c3@2 g2@2", S: "~@11 d3!2 c3 bb2 d2", T: "g2@3 ~@5",
  U: "~@12 g3 bb3 d3 eb3", V: "c3@10 ~ bb2 f2@3 eb2", W: "c2", X: "c2 g2 d3@6", Y: "c2 ab2 eb3@6",
  Z: "c2 ab2 eb3@4 ~@2", AA: "~@11 eb3@2 d3 bb2 g2", AB: "c3@6 c3 g2 ~@8", AC: "~@4 c2 d2 ~ eb2 c3@8",
  AD: "[~@3 bb2@4 ab2@4 ~]/3", AE: "~@12 eb3 d3 bb2 g2", AF: "~@9 g3 bb3 c4 gb3 f3 e3 eb3",
})).s("gm_fretless_bass").gain(0.2)

// bass · electric bass finger · "Bass"
const bass_2 = note(`<
  ~@14 A B C D C E F G H I J K L@2 M N O P Q R S P Q R S T U I V W X N Y P Q R S P Q R Z AA AB AC AD G AE AF AG@2 ~@5 A
  B C D AH AI X AJ AK AL@3 J AI X N O P Q R S P Q R S P Q R S P Q R S ~@2
>`.pickRestart({
  A: "~@3 c2", B: "ab1", C: "bb1", D: "ab1@7 c2", E: "~ c2", F: "g1@3 g1 ab1@4", G: "a1@3 a1 b1@4", H: "c2@5 ~@11",
  I: "ab1@13 ~ c2@2", J: "bb1@3 ~", K: "~@7 c2", L: "[bb1@3 c2@3 ~@2]/2", M: "~ ab1", N: "a1 b1", O: "c2 ~",
  P: "g1@2 ~ g1 ab1@4", Q: "ab1@5 ~ ab1@2 bb1@4 c2@4", R: "g1@2 ~ bb1 ab1@4", S: "~@2 eb2 bb2 ab2@2 c2 ab1 bb1@4 c2@4",
  T: "ab1@3 ~", U: "bb1@11 bb1 ~@4", V: "bb1@5 ~@3", W: "c2@15 ~", X: "g1 ab1", Y: "c2@3 ~@5",
  Z: "ab1@8 bb1@4 bb1 ab1 g1 gb1", AA: "f1@4 f2@2 f2 eb2 d2@4 ~ bb1 a1 ab1", AB: "g1@5 ~ d2 eb2 c2@4 ~ g1 c2 g1",
  AC: "f1@5 ~ f2 eb2 d2@3 ~@5", AD: "~@3 g1 c2@3 bb1", AE: "c2@6 bb1@2 ab1@4 ~ e2 ~ eb2", AF: "d2@3 ab1 g1@4",
  AG: "c2/2", AH: "bb1@11 ~@5", AI: "~@8 c2@7 ~", AJ: "a1@8 b1@5 eb2 ~ b1", AK: "c2 ~@3",
  AL: "[ab1@6 bb1@8 ab1@9 c2]/3",
})).s("gm_electric_bass_finger").gain(0.3)

// chords · piano · "Grnd Pian"
const piano = note(`<
  ~@11 A B A B C D C D E F G H C D C D E F G H I J I J I J I J C D C D E F G H I J I J I J I K L M L N O P Q A R A R S T
  S T C D C D E F G H C D C D E F G H I J I J I J I J I J I J I J I J ~@2
>`.pickRestart({
  A: "[g3,c4,eb4] [g3,bb3,d4]", B: "[ab3,d4,f4] [g3,c4,eb4]", C: "[ab3,c4,eb4]!4", D: "[bb3,c4,eb4]!4",
  E: "[g3,c4,eb4]!4", F: "[g3,c4,eb4]!2 [ab3,c4,eb4]!2", G: "[a3,c4,eb4]!2 [b3,d4,f4]!2",
  H: "[g3,c4,f4]!2 [g3,c4,eb4]!2", I: "[g3,bb3,eb4]!2 [ab3,c4,eb4]!2", J: "[ab3,c4,eb4]!2 [bb3,d4,f4] [g3,c4,eb4]",
  K: "[ab3,c4,eb4]!2 [f3,bb3,d4]@2", L: "[ab3,c4,g4] [ab3,d4,f4]", M: "[g3,c4,f4] [g3,b3,f4] [g3,c4,f4] [g3,c4,eb4]",
  N: "[g3,c4,f4] [g3,b3,f4] [g3,c4,eb4]@2", O: "[a3,c4,eb4]@3 [a3,c4,eb4] [b3,d4,f4]@3 [b3,d4,f4]",
  P: "[g3,c4,eb4]@6 [g3,bb3,eb4]@2 [ab3,bb3,eb4]@4 [g3,bb3,eb4] [g3,c4,eb4] ~ [g3,bb3,eb4]", // Cm Eb Absus2 Eb Cm Eb
  Q: "[ab3,c4,eb4]@3 [ab3,c4,eb4] [g3,b3,d4]@4", R: "[ab3,c4,f4] [g3,c4,eb4]", S: "[g4,c5,eb5] [g4,bb4,d5]",
  T: "[ab4,c5,f5] [g4,c5,eb5]", // Fm Cm
})).s("gm_piano").gain(0.12).pan(0.8)

// other · epiano2 · "Chrs Pian"
const epiano2 = note("<~@62 A B A B A B A B ~@34>".pickRestart({
  A: "c2 ~ g2 ~ d3 ~ eb3 ~@9", B: "c2 ~ ab2 ~ f3 ~ eb3 ~@9",
})).s("gm_epiano2").gain(0.26).pan(0.6)

// other · xylophone
const xylophone = note("<~@62 A B A B A B A B ~@34>".pickRestart({
  A: "c4 ~ g4 ~ d5 ~ eb5 ~@9", B: "c4 ~ ab4 ~ f5 ~ eb5 ~@9",
})).s("gm_xylophone").gain(0.33).pan(0.2)

// chords · string ensemble 2 · "Ensemble"
const string_ensemble_2 = note(`<
  A@5 B@2 ~@8 C@4 D E F G C@4 D E F G H I H I H I H I C@4 D E F G H I H I H I H J K L K M N O P Q R Q R Q R Q R C@4 D E
  F G C@4 D E F G H I H I H I H I H I H I H I H I ~@2
>`.pickRestart({
  A: "[~@5 g3@9 ab3@10 a3@10 ~ bb3@11 [f2,f3,ab3]@9 [eb2,eb3,g3]@11 [d2,d3,gb3]@14, ~ [c3,c4,eb4]@8 ~@7]/5", // Fm Eb D Cm
  B: "[[g2,d3,g3]@31 ~]/2", C: "[ab3,bb3,d4] ~ [ab3,bb3,d4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~",
  D: "[g3,bb3,d4] ~ [g3,bb3,d4] ~ [g3,c4,eb4] ~ [g3,c4,eb4] ~", // Gm Cm
  E: "[g3,bb3,d4] ~ [g3,bb3,d4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Gm Ab
  F: "[a3,c4,eb4] ~ [a3,c4,eb4] ~ [b3,d4,f4] ~ [b3,d4,f4] ~", // Adim Bdim
  G: "[g3,c4,f4] ~ [g3,c4,f4] ~ [g3,c4,eb4] ~ [g3,c4,eb4] ~", // Csus4 Cm
  H: "[g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~", // Eb Ab
  I: "[ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [bb3,d4,f4] ~ [g3,c4,eb4] ~", J: "[ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [f3,bb3,d4]@4",
  K: "[ab3,c4,g4] [ab3,d4,f4]", L: "[g3,c4,f4] [g3,b3,f4] [g3,c4,f4] [g3,c4,eb4]",
  M: "[g3,c4,f4] [g3,b3,f4] [g3,c4,eb4]@2", N: "[a3,c4,eb4]@3 [a3,c4,eb4] [b3,d4,f4]@3 [b3,d4,f4]",
  O: "[g3,c4,eb4]@6 [g3,bb3,eb4]@2 [ab3,bb3,eb4]@4 [g3,bb3,eb4] [g3,c4,eb4] ~ [g3,bb3,eb4]", // Cm Eb Absus2 Eb Cm Eb
  P: "[a3,c4,eb4]@3 [a3,c4,eb4] [g3,b3,d4]@4", Q: "[g3,c4,eb4] [g3,bb3,d4]", R: "[ab3,c4,f4] [g3,c4,eb4]",
})).s("gm_string_ensemble_2").gain(0.14).pan(0.4)

// other · electric guitar clean · "Guitar"
const electric_guitar_clean = note("<~@31 A@8 ~@8 A@8 ~@31 A@16 ~@2>".pickRestart({
  A: "[eb3 bb3 eb4 bb3 eb3 bb3 eb4@4 ~@6]/2",
})).s("gm_electric_guitar_clean").gain(0.13).pan(0.2)

// chords · vibraphone · "Vibraphon"
const vibraphone = note("<~@7 A B A B A B A B ~@89>".pickRestart({
  A: "[g6,c7,eb7] [f6,bb6,d7]", B: "[ab6,d7,f7] [g6,c7,eb7]",
})).s("gm_vibraphone").gain(0.11)

// other · string ensemble 2 · "Strngs Lf"
const string_ensemble_2_2 = note("<A@3 B@2 C@2 ~@4 D@4 ~@89>".pickRestart({
  A: "[~@2 g6@3 c7@7 gb6 f6 f6@7 eb6@3 c6@18 ~ c6@3 eb6@2, ~@14 eb6 ~@33]/3",
  B: "[c6@2 c6@2 ~ c6@2 eb6@3 c6@3 c6@2 c6@3 eb6@3 c6@3 c6@3 bb5@5]/2", C: "[g5@7 ~]/2", D: "[c2,c7]/4",
})).s("gm_string_ensemble_2").gain(0.18)

// other · string ensemble 2 · "Strngs Lf" · soft notes
const string_ensemble_2_soft = note("<A@3 B@2 C@2 ~@97>".pickRestart({
  A: "[~@2 g5@3 c6@7 gb5 f5 f5@7 eb5@3 c5@18 ~ c5@3 eb5@2, ~@14 eb5 ~@33]/3",
  B: "[c5@2 c5@2 ~ c5@2 eb5@3 c5@3 c5@2 c5@3 eb5@3 c5@3 c5@3 bb4@5]/2", C: "[g4@7 ~]/2",
})).s("gm_string_ensemble_2").gain(0.09)

// other · string ensemble 1 · "Strngs Lf"
const string_ensemble_1 = note("<~@30 A B@8 ~@7 C@3 B@4 D@2 E@2 F@3 G H I@2 J@2 I@2 K@2 ~@15 L B@16 ~@2>".pickRestart({
  A: "d4@4 f4@4 eb4@2 g4@2 bb4 eb5 g5 bb5", B: "[eb6@6 f6 g6]/2",
  C: "[~@4 eb6@6 f6 g6, ~@13 eb5@2 bb5@2 ~@31, ~@7 g5 ~@16]/3", D: "[eb6@3 f6]/2", E: "[g6@5 ab6@3 f6@20 eb6@4]/2",
  F: "[g6@5 ab6@3 f6@16 eb6@16 d6@8]/3", G: "c6@9 bb5 ~ c6 eb6 f6 ~ gb6", H: "f6 g6", I: "[c7@30 gb6 [eb6,f6]]/2",
  J: "[c6@29 d6 ~ eb6]/2", K: "c6/2", L: "~@12 bb4 eb5 g5 bb5",
})).s("gm_string_ensemble_1").gain(0.06)

// drums · kick
const kick = s("bd").struct("<~@11 A ~@3 A B@15 C@7 B ~ B@6 A C@13 D C B@24 C@16 ~@2>".pickRestart({
  A: "x", B: "x!2", C: "x ~@2 x!2 ~@3", D: "x ~@5 x ~ x ~@4 x ~ x",
})).gain(0.21)

// drums · rim
const rim = s("rim").struct("<~@22 A B@7 ~@9 B C B@5 ~@32 B@7 ~@19>".pickRestart({
  A: "~@11 x!3 ~@2", B: "~@3 x", C: "~@12 x!2 ~ x",
})).gain(0.21)

// drums · snare
const snare = s("sd").struct("<~@30 A B@8 ~@7 C B@15 ~@24 B@7 D B@8 ~@2>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x", D: "~@2 x ~@2 x ~@2",
})).gain(0.21)

// drums · low tom
const low_tom = s("lt").struct("<~@30 A ~@3 B ~@11 C ~@3 D ~@3 B ~@3 D ~@26 E ~@3 B ~@3 B ~@3 F ~@6>".pickRestart({
  A: "~@5 x ~@2", B: "~@14 x!2", C: "~@11 x ~@2 x ~", D: "~@7 x", E: "~@4 x ~ x!2", F: "~@10 x ~@2 x!2 ~",
})).gain(0.25)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@6 A@5 ~@3 B ~@16 C D E F C D E F B G B@5 ~ C D E F C D E F D@3 F D F@2 H@23 I C D E F C D E J C D E K E D E F ~@2
>`.pickRestart({
  A: "x!4", B: "~@3 x", C: "~@2 x!6", D: "x!8", E: "~ x!7", F: "x!7 ~", G: "~@12 x!2 ~ x", H: "~ x ~ x", I: "~ x ~@2",
  J: "x!6 ~@2", K: "x!5 ~@3",
})).gain(0.11)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@15 A ~ A ~ A ~ A ~@3 A ~ A ~ A ~@9 A ~@3 A ~ A ~@16 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@19
>`.pickRestart({
  A: "x",
})).gain(0.04)

// drums · mid tom
const mid_tom = s("mt").struct("<~@30 A ~@3 B ~@11 C ~@7 D ~@3 B ~@26 C ~@3 B ~@3 E ~@10>".pickRestart({
  A: "~@14 x!2", B: "~@7 x", C: "~@11 x ~@4", D: "~@13 x ~@2", E: "~@6 x!2",
})).gain(0.25)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@11 A@3 B ~ C ~ C ~ C ~@3 C ~ C ~ C ~@9 C ~@3 C ~ C ~@16 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@20
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@4 x", C: "~@7 x",
})).gain(0.14)

// drums · high tom
const high_tom = s("ht").struct("<~@30 [~@13 x ~@2] ~@73>").gain(0.25)

// drums · crash
const crash = s("cr").struct(`<
  ~@31 A ~ A ~ A ~ A B ~@8 A ~ A ~ A ~ A ~ A ~@3 A C A ~@24 A ~ A ~ A ~ A B A ~ A B A B A B ~@2
>`.pickRestart({
  A: "x", B: "~ x", C: "~@13 x ~ x",
})).gain(0.14)

// drums · ride
const ride = s("rd").struct(`<
  ~@11 A@4 B@15 C D B D B D B D B@8 E D B D B D B D B D B@3 D B D ~@24 D B D B D B D C D B D B D B D B ~@2
>`.pickRestart({
  A: "x!2", B: "x!4", C: "x!3 ~", D: "~ x!3", E: "x!2 ~@2",
})).gain(0.21)

// drums · congas
const congas = s("conga:13").struct("<~@22 [~@11 x!3 ~@2] [~@3 x]!7 ~@74>").gain(0.91)

stack(
  bass, bass_2, piano, epiano2, xylophone, string_ensemble_2, electric_guitar_clean, vibraphone, string_ensemble_2_2,
  string_ensemble_2_soft, string_ensemble_1, kick, rim, snare, low_tom, hihat, hihat_soft, mid_tom, open_hat, high_tom,
  crash, ride, congas
)

More by Don Henley