Strudelify

The Keeper of the Stars

Tracy Byrd

KeyD majorTempo81 bpm
0:00/0:00
// The Keeper of the Stars — Tracy Byrd
// 81 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "A.PIANO 1" piano (copy of ch 6 "ACOU BASS" acoustic bass)
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(81/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.

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D E F G H I J K L E M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG@2 C D E F G H I J K L E M N O P Q R S T U V
  W X Y Z AA AB AC AD AE AF AH@2 C D E M N AI AJ AK AL
>`.pickRestart({
  A: "~@2 a3 d4 e4@2 d4@2 e4 f#4 d4 a3 e4@2 d4@2", B: "~@2 a3 d4 e4@2 d4@2 ~ f#3 g3 d4 e4@4",
  C: "f#3@2 a3@2 d4@2 a3@2 f#4@3 g4@3 a4@2", D: "[c#4,e4,a4]@2 e4 [c#4,e4]@5 c#4@2 a3@2 e4@2 c#4@2",
  E: "b3@2 d4@2 f#4@2 b3@2 d4@3 e4@3 f#4@2", F: "~ d3 g3 d3 b3 a3 g3 d3, b3 ~", G: "~@2 b3@2 d4@2 b3@2 b3@3 d4@3 d4 e4",
  H: "[a3,d4]@2 a3 ~ e4 d4 a3 f#3, ~@3 a3@2 ~@3", I: "e3@2 g3@2 e4@2 f#4 g4@3 f#4@2 d4@2 f#4@2, ~@7 b3@9",
  J: "~ g3 d4 g3 c#4@2 a3@2, e4", K: "~@2 a3@2 d4@2 a3@2 f#4@3 g4@3 a4@2", L: "b4 a4!3 c#4 a3 e4 c#4, [c#4,e4] ~",
  M: "~ d3 g3 d3 b3 d3 g3 d3, b3 ~", N: "b3@2 d3@2 g3@2 d3@2 b3@2 [b3,d4]@4 d4 e4",
  O: "[a3,d4,f#4]@2 e4 d4@2 a3 f#3 a3", P: "g3@2 b3@2 e4 f#4@3 g4 f#4@2 d4@3 f#4@2, ~ b3",
  Q: "~ g3 d4 g3 d4 g3 e4 d4, e4 ~", R: "[a3,c#4]@8 [f#4,d5]@3 [e4,c#5]@2 [c#4,a4]@3", S: "[d4,g4,b4]",
  T: "[e4,c#5]@4 [e4,c#5]@2 [f#4,d5] [g4,e5]@3 [f#4,d5] [e4,c#5]@3 [d4,b4]@2", // C#m D C D C#m G
  U: "[c#4,a4]@4 [f#4,a4] [g#4,b4] [a4,c#5]@2", // F#m G#m A
  V: "[b4,d5]@4 [g4,b4]@2 [g4,b4]@2 [g4,b4]@2 [f#4,a4] [f#4,a4]@3 [e4,g4]@2", // Bm G F#m Em
  W: "[e4,g4]@2 [f#4,a4] [g4,b4]@3 [b4,g5] [a4,f#5]", X: "[g4,c#5,e5]@7 g4 b4 a4@3 f#4@2 b4@2, ~ [c#4,e4]",
  Y: "[d4,f#4,a4]@4 [d4,f#4]@2 [e4,g4] [g4,b4]", // D Em G
  Z: "[f#4,a4]@4 [f#4,d5]@2 [g4,e5]@2 [g4,e5] [a4,f#5]@3 [b4,g5]@2 [a4,f#5]@2", AA: "[d4,b4]@5 b3 d4 f#4",
  AB: "[c#4,e4]@4 [e4,c#5] [f#4,d5]@2 [g4,e5]@3 [f#4,d5]@2 [e4,c#5]@2 [d4,b4]@2", // C#m D C D C#m G
  AC: "[c#4,f#4,a4]@2 [f#4,a4] [a4,c#5]", AD: "[g4,b4]@4 [d4,b4]@2 [d4,b4] [d4,b4]@3 [e4,c#5]@2 [f#4,d5] [g4,e5]@3",
  AE: "[g4,b4,e5]@4 [g4,b4] [f#4,a4] [e4,g4] [d4,f#4]", // Em G F#m Em D
  AF: "[c#4,e4]@2 [g4,e5]@2 [g4,e5]@2 [a4,f#5] [b4,g5]@3 [a4,f#5] [g4,e5]@3 [g4,d5]@2", // C#m C D Em D C G5
  AG: "[[g4,b4]@16 [f#4,a4]@2 f#4 e4 d4@2 a3@2 ~ f#3 g3@2 d4@2 g3@2, d5@9 ~@7]/2", AH: "[f#4,a4,d5]/2",
  AI: "[f#3,a3,d4]@2 a3 ~ e4 d4 a3 f#3, ~@3 a3@2 ~@3", // D
  AJ: "e3@2 g3@2 [g3,e4]@2 [a3,f#4] [b3,g4]@3 [a3,f#4]@2 [g3,e4]@2 [g3,d4]@2", // C D Em D C G5
  AK: "[f#3,a3,d4]@2 a3 d4 e4 f#4 d4@2 ~ f#3 g3 d4 e4@2 g3@2", AL: "[f#3,d4]",
})).s("gm_piano").gain(0.8)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@2 A B C D E F G H A I J K L M N O P Q R S T U V S W Q X S Y Z AA AB@2 ~@42
>`.pickRestart({
  A: "~@8 f#4@3 g4@3 a4@2", B: "a4@2 e4 e4@9 ~@4", C: "~@8 d4@3 e4@3 f#4@2", D: "b3 ~", E: "~@8 b3@3 d4@3 d4 e4",
  F: "d4@2 a3 a3@3 ~@2", G: "~@4 e4@2 f#4 g4@3 f#4@2 d4@2 f#4@2", H: "e4@3 ~", I: "b4 a4!2 a4@3 ~@2",
  J: "~@6 d4@2 d4@3 e4@3 f#4@2", K: "b3@3 ~", L: "~@8 b3@2 d4@4 d4 e4", M: "f#4@2 e4 d4@5",
  N: "~@4 e4 f#4@3 g4 f#4@2 d4@3 f#4@2", O: "e4", P: "~@8 d5@3 c#5@2 a4@3", Q: "b4",
  R: "~@4 c#5@2 d5 e5@3 d5 c#5@3 b4@2", S: "a4", T: "~@4 b4@2 b4@2 b4@2 a4 a4@3 g4@2", U: "g4@2 a4 b4@5",
  V: "~@7 g4 b4 a4@3 f#4@2 b4@2", W: "~@8 e5 f#5@3 g5@2 f#5@2", X: "~@4 c#5 d5@2 e5@3 d5@2 c#5@2 b4@2",
  Y: "~@4 b4@2 b4 b4@3 c#5@2 d5 e5@3", Z: "e5", AA: "~@2 e5@2 e5@2 f#5 g5@3 f#5 e5@3 d5@2", AB: "[d5@3 ~]/2",
})).s("gm_electric_guitar_jazz").gain(0.37).pan(0.7)

// other · piano · "JAZZ GTR"
const piano_2 = note(`<
  ~@35 A B C D E F G H A I J K L M N O P Q R S T U V S W Q X S Y Z AA AB@2 A B C K L AC AD AE ~
>`.pickRestart({
  A: "~@8 f#4@3 g4@3 a4@2", B: "a4@2 e4 e4@9 ~@4", C: "~@8 d4@3 e4@3 f#4@2", D: "b3 ~", E: "~@8 b3@3 d4@3 d4 e4",
  F: "d4@2 a3 a3@3 ~@2", G: "~@4 e4@2 f#4 g4@3 f#4@2 d4@2 f#4@2", H: "e4@3 ~", I: "b4 a4!2 a4@3 ~@2",
  J: "~@6 d4@2 d4@3 e4@3 f#4@2", K: "b3@3 ~", L: "~@8 b3@2 d4@4 d4 e4", M: "f#4@2 e4 d4@5",
  N: "~@4 e4 f#4@3 g4 f#4@2 d4@3 f#4@2", O: "e4", P: "~@6 a3@2 d5@3 c#5@2 a4@3", Q: "b4",
  R: "~@4 c#5@2 d5 e5@3 d5 c#5@3 b4@2", S: "a4", T: "~@4 b4@2 b4@2 b4@2 a4 a4@3 g4@2", U: "g4@2 a4 b4@5",
  V: "~@7 g4 b4 a4@3 f#4@2 b4@2", W: "~@8 e5 f#5@3 g5@2 f#5@2", X: "~@4 c#5 d5@2 e5@3 d5@2 c#5@2 b4@2",
  Y: "~@4 b4@2 b4 b4@3 c#5@2 d5 e5@3", Z: "e5", AA: "~@2 e5@2 e5@2 f#5 g5@3 f#5 e5@3 d5@2", AB: "[d5@3 ~]/2",
  AC: "d4@2 a3 a3@5", AD: "~@4 e4@2 f#4 g4@3 f#4@2 e4@2 d4@2", AE: "d4",
})).s("gm_piano").gain(0.72).pan(1)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@19 A B C D E F G H I J K L M N O@2 ~@17 A B C D E F G H I J K L M N P@2 ~@9
>`.pickRestart({
  A: "[d4,g4,b4]", B: "[e4,c#5]@4 [e4,c#5]@2 [f#4,d5] [g4,e5]@3 [f#4,d5] [e4,c#5]@3 [d4,b4]@2",
  C: "[c#4,a4]@4 [f#4,a4] [g#4,b4] [a4,c#5]@2", // F#m G#m A
  D: "[b4,d5]@4 [g4,b4]@2 [g4,b4]@2 [g4,b4]@2 [f#4,a4] [f#4,a4]@3 [e4,g4]@2", // Bm G F#m Em
  E: "[e4,g4]@2 [f#4,a4] [g4,b4]@3 [b4,g5] [a4,f#5]", F: "[g4,c#5,e5]@7 g4 b4 a4@3 f#4@2 b4@2, ~ [c#4,e4]",
  G: "[d4,f#4,a4]@4 [d4,f#4]@2 [e4,g4] [g4,b4]", // D Em G
  H: "[f#4,a4]@4 [f#4,d5]@2 [g4,e5]@2 [g4,e5] [a4,f#5]@3 [b4,g5]@2 [a4,f#5]@2", I: "[d4,b4]@5 b3 d4 f#4",
  J: "[c#4,e4]@4 [e4,c#5] [f#4,d5]@2 [g4,e5]@3 [f#4,d5]@2 [e4,c#5]@2 [d4,b4]@2", K: "[c#4,f#4,a4]@2 [f#4,a4] [a4,c#5]",
  L: "[g4,b4]@4 [d4,b4]@2 [d4,b4] [d4,b4]@3 [e4,c#5]@2 [f#4,d5] [g4,e5]@3", // G C#m D C
  M: "[g4,b4,e5]@4 [g4,b4] [f#4,a4] [e4,g4] [d4,f#4]", // Em G F#m Em D
  N: "[c#4,e4]@2 [g4,e5]@2 [g4,e5]@2 [a4,f#5] [b4,g5]@3 [a4,f#5] [g4,e5]@3 [g4,d5]@2", O: "[[g4,b4] ~, d5@9 ~@7]/2",
  P: "[f#4,a4,d5]/2", // D
})).s("gm_string_ensemble_1").gain(0.47).pan(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E F@2 G H I C D E F@2 G H I J K L M K N L O P K L M Q R J S B C D E F@2 G H I C D E F@2 G H I J K L M K N L O
  P K L M Q R J T@2 A U V S@2 W X B Y
>`.pickRestart({
  A: "d3", B: "d3 a2", C: "d3!2", D: "c#3!2", E: "b2!2", F: "g2!2", G: "f#2!2", H: "e2!2", I: "a2!2", J: "a2",
  K: "g2@3 g2 g2@3 g2", L: "a2@3 a2 a2@3 a2", M: "f#2@3 f#2 f#2@3 f#2", N: "e2@3 e2 e2@3 e2", O: "d3@3 d3 a3@4",
  P: "d3@3 d3 e2@2 f#2@2", Q: "g2@3 g2 g2@2 f#2@2", R: "e2@3 e2 e2@3 g2", S: "g2", T: "d3@3 d3 a3@2 a3@2", U: "c#3",
  V: "b2", W: "f#2", X: "e2 a2", Y: "d2",
})).s("gm_acoustic_bass").gain(0.29).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~@19 [x ~@6 x!2 ~@7]!13 x ~ [x ~@6 x!2 ~@7]!32 x ~@10>").gain(0.63)

// drums · rim
const rim = s("rim").struct("<~@34 [~ x ~ x]!18 ~@25>").gain(0.63)

// drums · snare
const snare = s("sd").struct("<~@19 [~ x ~ x]!13 ~@20 [~ x ~ x]!14 ~@11>").gain(0.63)

// drums · hihat
const hihat = s("hh").struct("<~@19 [x!8]!13 x ~@19 [x!8]!14 x ~@10>").gain(0.63)

stack(piano, electric_guitar_jazz, piano_2, string_ensemble_1, bass, kick, rim, snare, hihat)

More by Tracy Byrd