Strudelify

Nobody Knows

The Tony Rich Project

KeyC majorTempo89 bpm
0:00/0:00
// Nobody Knows — The Tony Rich Project
// 89 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(89/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 · acoustic bass · "Warm Bass"
const bass = note(`<
  A B C D E D A F G H I J K J G L G H I J K J G@2 M J K J M J N O G H I J K J G L G H I J K J G L G H I J K J G@2 M J K
  J M J N O G H I J K J G P M J K J M J N O G H I J K J G@3 H I J K J G Q@2
>`.pickRestart({
  A: "f2", B: "e2", C: "d2", D: "c2", E: "a#1", F: "f2@14 c2 d2", G: "f2@5 ~ f2 ~ f2@8", H: "e2@5 ~ e2 ~ e2@8",
  I: "d2@5 ~ d2 ~ d2@8", J: "c2@5 ~ c2 ~ c2@8", K: "a#1@4 ~@2 a#1 ~ a#1@8", L: "f2@5 ~ f2 ~ f2@6 c2 d2",
  M: "d2@4 ~@2 d2 ~ d2@8", N: "a#1@5 ~ a#1 ~ a#1@8", O: "a#1@4 ~@2 a#1 ~ a#1@6 c2 d2", P: "f2@5 ~ f2 ~ f2@6 ~@2",
  Q: "[f2@3 ~]/2",
})).s("gm_acoustic_bass").gain(0.58)

// chords · acoustic guitar nylon · "Acoustic"
const acoustic_guitar_nylon = note(`<
  A@8 B@6 C@5 D E@4 F@6 G H B@6 I@2 B@6 I@2 J@3 D E@4 F@6 G H B@6 I@2 F@6 G H J@3 D E@4 B@6 K L@2
>`.pickRestart({
  A: "[~@7 g3 ~@7 e3 ~@7 d3 ~@7 e3 ~@7 f3 ~@23 g3, c3@2 c3@3 c3@3 c3@8 c3@8 c3@8 c3@5 c3@3 c3@5 c3@3 c3@7 g3@7 f3@2, ~ f3@5 f3@2 ~ e3@4 e3@2 ~@2 d3@2 c4@8 c4@5 ~@2 f3@5 ~@2 f3@5 f3@2 ~ f3@2 f3 c4@7 f3@2 c4@3, ~@3 c4@8 c4@7 f3@3 d3 f3@2 ~ e3@4 e3@2 ~@2 d3@5 d3@2 ~@2 g3@5 g3@7 f3@3 c3@7, ~@10 g3@4 g3@10 ~@2 g3@4 g3@5 c4@8 c4@6 ~ a3@14]/8",
  B: "[~@23 d3 ~@7 f3 ~@15 g3, c3@2 c3@3 c3@3 c3@8 c3@8 c3@8 c3@7 g3@3 g3@5 ~, ~@2 f3@10 f3@4 ~@2 e3@8 e3@6 ~@2 d3@4 c4@18 c4@14 c4@11 ~@5 c4@10, ~@3 c4@5 ~@3 c4@4 c4@3 f3@3 d3 f3@2 ~ e3@2 e3@2 e3@3 ~ d3@4 d3@3 c3@5 c3@3, ~@7 g3@3 g3@4 g3@9 g3@3 g3@4 g3@2 ~@2 f3@4 f3@2 ~ f3@5 f3@2]/6",
  C: "[~@15 f3 ~@23 c4, c3@5 c3@3 c3@8 c3@5 c3@3 c3@8 c3@8, ~ f3@5 f3@2 ~ f3@2 f3@2 f3@2 ~@2 f3@5 f3@2 ~ e3@4 e3@3 ~ d3@4 d3@3, ~@2 g3@5 g3@5 g3@4 ~@2 g3@5 g3@2 ~ g3@4 g3@3 ~ f3@4 f3@2, ~@6 c4@11 ~@3 c4@8 c4@6 ~@4 c4@10 ~@6 c4@8 c4@4 ~@4 c4@8 ~@2]/5",
  D: "~@7 c4, c3, ~ e3@4 e3@3, ~ g3@2 g3, ~@3 c4@4 ~",
  E: "[~@23 f3 ~@7 a3, c3@8 c3@4 c4@3 g3@6 f3 g3@2 ~ f3@2 f3@5, ~ d3@4 d3@3 ~@2 f3@3 c3@3 c3@8 c3@8, ~@2 f3@4 f3@2 ~ e3@7 ~@2 a3@6 ~@4 g3@4, ~@3 c4@4 c4@4 g3@3 f3@2 ~ f3@2 c4@7 c4@3 a3 c4@2]/4",
  F: "[~@7 f3 g3@2 ~@37 g3, c3@8 c3@8 c3@6 a3 c4@4 c4@4 c4@3 f3@3 d3@11, ~ f3@4 f3@2 ~@3 g3@3 g3@11 ~@2 g3@4 g3@9 c4@4 c4@3 c4@2, ~@2 a3@6 ~@4 e3@2 e3@2 ~ d3@2 c4@2 f3@3 ~ e3@7 ~ d3@2 c4@3 f3@2 g3@2 g3@3 g3@2 ~, ~@3 c4@3 c4@5 c4@4 c4@3 f3@2 d3@4 c3@5 c3@3 c3@8 ~ c3@3 c3@4]/6",
  G: "~@7 g3, c3, ~ d3@7, ~@2 f3@2 f3 g3 f3@2, ~@3 c4@5", H: "~@7 f3, [c3,c4], ~ f3@4 f3@2 ~, ~ d3@3, ~@3 g3@3 g3@2",
  I: "[~@15 f3, c3@5 c3@3 c3@8, ~ f3@5 f3@2 ~ f3@2 f3@2 f3@2 ~, ~@2 g3@5 g3@5 g3@4, ~@6 c4@11 ~@3 c4@8 c4@4]/2",
  J: "[~@23 c4, c3@5 c3@3 c3@8 c3@8, ~ f3@5 f3@2 ~ e3@4 e3@3 ~ d3@4 d3@3, ~@2 g3@5 g3@2 ~ g3@4 g3@3 ~ f3@4 f3@2, ~@3 c4@5 ~@3 c4@4 c4@2 ~@2 c4@4 ~]/3",
  K: "~@3 f3, c3@5 c3@3, ~ f3@5 ~@2, ~ g3@3, ~@3 c4@5", L: "[~ c4@23 ~@8, [f2,c3,f3,g3,a3]@3 ~]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.42)

// chords · epiano2 · "Elec Pian"
const epiano2 = note(`<
  A B C B C D A@3 B C B C D A@3 B C B C D A@2 C B C B C B C@2 A B C B C D A@3 B C B C D A@3 B C B C D A@2 C B C B C B
  C@2 A B C B C D A@2 C B C B C B C@2 A B C B C D A@3 B C B C D A E@2
>`.pickRestart({
  A: "[c4,f4,a4]", B: "[c4,e4,g4]", C: "[d4,f4,a4]", D: "[c4,f4,g4]", E: "[[c4,f4,a4]@3 ~]/2",
})).s("gm_epiano2").gain(0.38)

// other · whistle
const whistle = note("<~@3 A B@5 ~@26 A B@5 ~@26 A B@5 ~@18 A C@5>".pickRestart({
  A: "~@2 a5 a#5", B: "[c6@6 f6 c6@3 f6 c6@2 a#5 a5 a#5@2 a5 f5@8 ~ a#5@2 a5 g5 f5@7 ~@2]/5",
  C: "[c6@12 f6@2 c6@6 f6@2 c6@4 a#5@2 a5@2 a#5@4 a5@2 f5@31 ~@13]/5",
})).s("gm_whistle").gain(0.31)

// other · pad new age · "Fantasia"
const pad_new_age = note("<~@32 A B C ~@29 A B C ~@21 A B C ~@6>".pickRestart({
  A: "~@3 a4@2 c5@3", B: "~@6 g4@7 ~@3", C: "~ a4@2 g4 a4 c5@3",
})).s("gm_pad_new_age").gain(0.4)

// other · acoustic guitar nylon · "Classical"
const acoustic_guitar_nylon_2 = note("<~@72 A B C D E F G H I ~@16>".pickRestart({
  A: "~@5 a#3 ~ a#3 a3@5 ~ g3 a3", B: "g3@11 ~@5", C: "~ c3 d3 e3 f3 g3 a3 a#3 c4 ~ a#3 a3 a#3 ~ a3 g3",
  D: "a3@11 ~@2 e4 ~ e4", E: "~ c4@7 ~ a3!2 ~ a3 f3 ~ g3, e4 ~@7", F: "g3@10 ~@3 e3 ~ f3",
  G: "g3 ~ a3 g3 ~ f3@7 e3 f3 ~ g3", H: "a#3 ~ a3 g3 ~ f3@6 ~ a3 g3 ~ e3", I: "~ f3@12 ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.71)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@8 [~ x ~ x]!87 ~@2>").gain(0.75)

// drums · splash
const splash = s("cr").struct("<~@8 A ~@15 A ~@7 A ~@23 A ~@7 A ~@7 A ~@7 A ~@14 A ~>".pickRestart({
  A: "x",
})).gain(0.68)

// drums · congas
const congas = s("conga:13").struct("<[~ x ~ x]!95 ~@2>").gain(1.68)

// drums · congas
const congas_2 = s("conga:33").struct("<[x!2 ~ x ~ x ~ x]!95 x ~>").gain(1.68)

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

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct(`<
  ~@11 A B@2 A B A@2 B C B ~ D B A ~ B ~ A B A ~ E ~@5 E B C@2 ~@5 B C@3 B@2 C ~ B A F ~@2 B G A B ~ A ~ B ~ H A ~ A ~@2
  C ~@2 C A@2 ~@3 A@2 ~ B A@2 ~ B A C ~@3
>`.pickRestart({
  A: "~ x", B: "~@5 x ~@2", C: "~@4 x!2 ~@2", D: "~@3 x!2 ~@3", E: "~@3 x ~ x ~@2", F: "x!2", G: "~@3 x!3 ~@2",
  H: "~@3 x",
})).gain(1.14)

// drums · claves
const claves = s("clave:2").struct("<~@8 [~ x ~ x]!87 ~@2>").gain(2.94)

stack(
  bass, acoustic_guitar_nylon, epiano2, whistle, pad_new_age, acoustic_guitar_nylon_2, kick, tambourine, splash, congas,
  congas_2, cabasa, cabasa_soft, claves
)