Strudelify

There's A Kind Of Hush

Carpenters

KeyC majorTempo121 bpm
0:00/0:00
// There's A Kind Of Hush — Carpenters
// 121 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(121/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
const bass = note(`<
  A B C D E F G E H I J K E L M N O P J Q R S O H J@2 T U S@3 H V P V W E F G N H X J Y E F G N H X J@2 R S@2 H J@2 T U
  S@2 O H V P V W E F G N H X J Z J Y AA AB ~
>`.pickRestart({
  A: "f2@2 e2 ~@3 e2@7 ~@3", B: "e2@2 d2@2 ~@2 e2@2 ~@2 g2@5 ~", C: "f2@2 e2 ~@3 e2@8 ~@2",
  D: "e2 d2 ~ e2 ~@2 g1@2, ~@5 g2@2 ~", E: "c2@5 ~ c2@2 g1@5 ~@3", F: "e2@5 ~ e2@2 b1@5 ~@3", G: "a1@5 ~ a1@2 e2@5 ~@3",
  H: "f2@5 ~ f2@2 c2@5 ~@3", I: "g1@4 ~@2 g1@2 d2@5 ~@3", J: "c2@5 ~ c2@2 g1@6 ~@2", K: "g1@5 ~ g1@2 d2@4 g1@3 ~",
  L: "e2@5 ~ e2@2 b1@6 ~@2", M: "a1@5 ~ a1@2 e2@6 ~@2", N: "c2@5 ~ c2@2 g1@4 ~@4", O: "f2@5 ~ f2 ~ c2@6 ~@2",
  P: "g1@5 ~ g1@2 d2@5 ~@3", Q: "c2@5 ~ c2@2 d2@4 e2@3 ~", R: "f2@5 ~ f2@2 c2@7 ~", S: "f2@5 ~ f2@2 c2@6 ~@2",
  T: "c2@5 ~ c2 ~ g1@7 ~", U: "c2@5 ~ c2@2 d2@3 ~ e2@3 ~", V: "g1@5 ~ g1@2 d2@6 ~@2", W: "g1@5 ~ g1@2 a1@3 ~ b1@3 ~",
  X: "g1@2 ~ g1 d2@2 ~@2", Y: "g1@5 ~ g1@2 d2@4 ~@2 g1 ~", Z: "g1@5 ~ g1@2 d2@4 ~@2 g1@2", AA: "c2@5 ~ c2@2 c2@6 ~@2",
  AB: "c2 ~",
})).s("gm_electric_bass_finger").gain(0.36)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@4 A B C D E F G F A B H I J F A K J L M L N A N I O P M L Q F Q F N B H I J Q N Q N B H I J Q N I J L M L N A N I O
  P M L Q F Q F N B H I J Q N Q N Q N R ~
>`.pickRestart({
  A: "[g3,c4,e4]@5 ~ [g3,c4,e4] ~ [g3,c4,e4]@5 ~@3", B: "[g#3,b3,e4]@5 ~ [g#3,b3,e4] ~ [g#3,b3,e4]@5 ~@3",
  C: "[a3,c4,e4]@5 ~ [a3,c4,e4] ~ [a3,c4,e4]@5 ~@3", D: "[g3,a#3,c4,e4]@5 ~ [g3,a#3,c4,e4] ~ [g3,a#3,c4,e4]@5 ~@3",
  E: "[a3,c4,f4]@4 ~@2 [a3,c4,f4] ~ [a3,c4,f4]@4 ~@4", F: "[g3,b3,d4,f4]@5 ~ [g3,b3,d4,f4] ~ [g3,b3,d4,f4]@5 ~@3",
  G: "[g3,c4,e4]@5 ~ [g3,c4,e4] ~ [g3,c4,e4]@4 ~@4", H: "[a3,c4,e4]@5 ~ [a3,c4,e4] ~ [a3,c4,e4]@6 ~@2",
  I: "[g3,a#3,c4,e4]@5 ~ [g3,a#3,c4,e4] ~ [g3,a#3,c4,e4]@6 ~@2", J: "[a3,c4,f4]@5 ~ [a3,c4,f4] ~ [a3,c4,f4]@5 ~@3",
  K: "[g3,c4,e4]@5 ~ [g3,c4,e4] ~ [g3,a#3,c4,e4]@6 ~@2", L: "[a3,c4,d4,f4]@5 ~ [a3,c4,d4,f4] ~ [a3,c4,d4,f4]@5 ~@3",
  M: "[a3,c4,e4,f4]@5 ~ [a3,c4,e4,f4] ~ [a3,c4,e4,f4]@6 ~@2", N: "[g3,c4,e4]@5 ~ [g3,c4,e4] ~ [g3,c4,e4]@6 ~@2",
  O: "[a3,c4,f4]@5 ~ [a3,c4,f4] ~ [a3,c4,f4]@6 ~@2", P: "[a3,c4,d4,f4]@5 ~ [a3,c4,d4,f4] ~ [a3,c4,d4,f4]@6 ~@2",
  Q: "[g3,b3,d4,f4]@5 ~ [g3,b3,d4,f4] ~ [g3,b3,d4,f4]@6 ~@2", R: "[g3,c4,e4]@11 ~@5",
})).s("gm_acoustic_guitar_steel").gain(0.34)

// other · trumpet
const trumpet = note("<~@20 A B C B D E D F A B C B G H I J ~@16 A B C B D E K F A B C B G H I J ~@13>".pickRestart({
  A: "~@4 [a3,c4] ~@11", B: "~@4 [a3,d4] ~@11", C: "~@4 [a3,e4] ~@11", D: "~@8 e4@2 d4 ~ c4 ~ a#3 ~", E: "~ c4@5 ~@2",
  F: "~@2 g3@11 ~@3", G: "~@8 a4 ~ b4 ~@3 c5@2", H: "~@2 b4@7 ~@5 g3 ~", I: "f4@2 e4@2 ~@2 d4 ~@3 c4@2 ~@2 b3@2",
  J: "~ a3 ~ g3@5", K: "~@8 e4@2 d4@2 c4 ~ a#3 ~",
})).s("gm_trumpet").gain(0.42)

// chords · vibraphone
const vibraphone = note("<A B A C ~@21 D@2 ~@6 E F ~@22 D@2 ~@6 E F ~@14>".pickRestart({
  A: "[d4,f4]@2 [c4,e4] ~@3 [c4,e4]@8 ~@2", B: "[c4,e4] [b3,d4] ~ c4 ~ [e4,g4]@2 ~, ~@6 e4 ~@9",
  C: "[c4,e4]@2 [b3,d4] ~@3 c4@2 ~@2 [e4,g4]@4 ~@2, ~@6 e4 ~@9", // C Bm Em
  D: "[~@6 [f4,a4] ~ [f4,a4] ~ [e4,g4] ~ [d4,f4] ~ [e4,g4]@6 ~@12]/2", // F Em Dm Em
  E: "~@6 [g4,b4] ~ [f5,a5] ~ [e5,g5] ~ [f5,a5] ~ [e5,g5] ~", F: "~ [d5,f5]@3 ~@4",
})).s("gm_vibraphone").gain(0.4)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  A B A B@2 C D E D F G H B C D E D F I@2 A J K J L ~@3 A J K J ~ M N O B C D E D F A B P@2 Q@2 R@2 S@2 A J K T ~@4 A J
  K T ~ M N O B C D E D F A B A B U@2 ~
>`.pickRestart({
  A: "c4", B: "g3", C: "g#3", D: "a3", E: "a#3", F: "b3", G: "e3", H: "d3@7 ~", I: "c4/2", J: "d4", K: "e4", L: "c4 ~",
  M: "~@14 [g4,g5] ~", N: "[f5,f6]@2 [e5,e6]@2 ~@2 [d5,d6] ~@3 [c5,c6]@2 ~@2 [b4,b5]@2", O: "~ [a4,a5] ~ [g4,g5]@5",
  P: "[e5@7 ~ f5@2 e5@2 ~@2 d5@17 ~]/2", Q: "[c5@7 ~ d5@2 c5@3 ~ a#4@15 ~@3]/2",
  R: "[a4@6 f4 ~ a4@2 b4@2 c5@2 b4@8 g4 ~ b4@2 c5@2 d5@3 ~]/2", S: "[d5 c5 ~ c5@13]/2", T: "d4@15 ~", U: "[c4@5 ~@3]/2",
})).s("gm_string_ensemble_1").gain(0.37)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@7 B A@7 C A@7 D A@7 E A@7 E A F A@2 C A@2 E A@7 G A@3 F A@3 E A@4 F A@2 F A F E ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@5 x ~ x!3 ~", C: "~@4 x ~@7 x!3 ~", D: "~@4 x ~ x!5 ~ x!4", E: "~@4 x ~ x!3 ~ x ~ x!3 ~",
  F: "~@2 x ~@2 x!3", G: "~@4 x ~ x!7 ~ x ~",
})).gain(0.35)

// drums · hihat
const hihat = s("hh").struct("<~@4 [x!8]!75 ~@2>").gain(0.35)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@5 A@6 ~>".pickRestart({
  A: "x",
})).gain(0.35)

// drums · ride
const ride = s("rd").struct("<[x!2 ~ x ~@4] [x!2 ~ x ~ x ~@2] [x!2 ~ x ~@4] [x!2 ~ x ~ x ~@2] ~@77>").gain(0.31)

// drums · tambourine
const tambourine = s("tb").struct("<~@12 [~ x ~ x]!67 ~@2>").gain(0.35)

stack(bass, acoustic_guitar_steel, trumpet, vibraphone, string_ensemble_1, kick, snare, hihat, crash, ride, tambourine)

More by Carpenters