Strudelify

counting stars

OneRepublic

KeyE majorTempo120 bpm
0:00/0:00
// counting stars — OneRepublic
// 120 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/472116; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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
const piano = note(`<
  A B C D A B E F G@2 H I J K L M N O P Q R S P T R U V@2 W@2 V@2 W@2 X Y Z AA AB AC AD AE AB AC AD AF AB AC AD AE AB AC
  AD AF H I J K L M N O P Q R AG P T R U V@2 W@2 V@2 W@2 X Y Z AH@2 AB AC AD AE AB AC AD AF AB AC AD AE AB AC AD AI AJ
  AK AL AM AN AO AP@2 Z AH@2 AB AC AD AE AB AC AD AF AB AC AD AE AB AC AD AF AQ AR
>`.pickRestart({
  A: "c#3 e3 g#4@2 b4@2 g#4@2, f#4 g#3@3", B: "[e3,f#4]@2 [g#3,g#4]@2 f#4 e4@2 g#4@9, ~ b3@3",
  C: "b2@2 [d#3,f#4]@2 f#4@2 g#4 a4@3 g#4@2 f#4@2 e4@2, ~ f#3@3", D: "a2 c#3 c#4@2 e4@3 c#4, g#4 e3@3",
  E: "b2@2 [d#3,f#4]@2 f#4@2 g#4@2 a4@2 g#4@2 f#4 e4@3, ~ f#3@3", F: "[a2,g#4] [c#3,f#4] f#4 c#4 e4@4, ~ e3@3",
  G: "[~@2 c#4 g#4 f#4!2 ~@6 e4 c#4@3, [c#3,e3,g#3] [a2,c#3,e3], ~@6 e4@5 ~@5]/2", H: "[c#2,c#3,g#3,c#4]!4",
  I: "[b1,b2,b3,e4]!4", J: "[a1,a2,b3,d#4]!4", K: "[c#3,g#3,a3,c#4]!4",
  L: "[e3,b3]@4 [e3,b3]@4 [e3,b3]@4 [e3,b3,b4,b5]@3 [g#4,g#5], [g#4,g#5]@3 ~", // E5 G#
  M: "[b2,f#3]@4 [b2,f#3]@4 [b2,f#3]@4 [b2,f#3,b4,b5]@3 [g#4,g#5], [f#4,f#5]@3 ~", // B5 G# F#
  N: "[a2,e3]@4 [a2,e3]@4 [a2,e3]@4 [a2,e3,b4,b5]@3 [g#4,g#5], [f#4,f#5]@3 ~", // A5 Asus2 G# F#
  O: "[a2,e3]@2 [a2,e3]@2 ~ g#4!3, f#4@2 [a2,e3]!2", P: "g#4@6 g#4 f#4 g#4@2 g#4@2 g#4@4, [c#3,e3,g#3]",
  Q: "g#4@2 g#4@2 g#4@2 g#4@2 b4@2 b4 f#4@4 ~, [e3,g#3,b3]", // E
  R: "g#4@2 f#4@2 e4@2 c#4@2 g#4@2 f#4@2 e4 f#4@2 ~, [b2,d#3,f#3]", // B
  S: "~@2 g#4 f#4 e4@2 c#4@2 g#4@2 f#4@2 e4 f#4@2 ~, [a2,c#3,e3]", T: "g#4@6 g#4 f#4 g#4@2 b4@2 f#4@3 g#4, [e3,g#3,b3]",
  U: "~ c#4 g#4@2 f#4@2 c#4@2 g#4@2 f#4@2 e4 f#4@2 ~, [a2,c#3,e3]", // A
  V: "[[c#2,c#3,g#4]@4 [c#2,c#3,c#4]@3 b3 c#4@2 e4@2 c#5@2 ~@2 [e2,e3]@4 [e2,e3,g#4]@4 e4@2 f#4@2 [e2,e3,g#4]@4, ~@2 [c#2,c#3]!2 ~@2 [e2,e3] ~, ~@7 b4@3 ~@6]/2", // C#5 C# E C# E
  W: "[[b1,b2]@4 [b1,b2]@4 d#4@2 c#4@2 d#4@2 ~@6 [a1,a2]@3 b3 c#4 b3 ~@2 [a1,a2]@4, f#4@2 [b1,b2]!2 [a1,a2] ~ [a1,a2] ~, ~@14 e4@4 c#4@5 ~@3 a3@4 ~@2]/2", // B A B A
  X: "~@4 c#4@3 b3 c#4@2 ~@2 c#4@3 b3, [a2,e3,a3]", Y: "c#4@2 ~@2 c#4@3 b3 c#4@2 b3@4 ~@2", Z: "c#4 b3 g#3 e3",
  AA: "f#3@4 g#3@4 f#3@2 e3@2 c#3 b2@3", AB: "f#4 g#4 b4 g#4, [c#3,e3,g#3]",
  AC: "f#4@2 g#4@2 f#4 e4@2 g#4@9, [e3,g#3,b3]", AD: "~@2 f#4@2 f#4@2 g#4 a4@3 g#4@2 f#4@2 e4@2, [b2,d#3,f#3]",
  AE: "g#4@2 c#4@2 e4@3 c#4, [a2,c#3,e3]", AF: "g#4 f#4!2 c#4 e4@3 ~, [a2,c#3,e3]",
  AG: "g#4@2 f#4@2 e4 c#4@3 g#4@2 f#4@2 e4 f#4@2 ~, [a2,c#3,e3]", AH: "[f#3@4 g#3@18 f#3@2 e3@2 c#3@2 b2 c#3@2 ~]/2",
  AI: "g#4@2 f#4@2 f#4@2 c#4@2 e4@6 [f#4,g#4] [b3,c#4,d#4,e4]", AJ: "[g#3,a3] ~@15",
  AK: "c#5@4 c#5@3 b4 c#5 b4 g#4@4 c#4 e4", AL: "g#4@4 g#4@3 f#4 g#4 e4 c#4@4 d#4@2", AM: "e4 d#4 c#4 b3 e4 d#4 c#4 b3",
  AN: "[f#4,a4] [e4,g#4] [d#4,f#4] [c#4,e4] [f#4,a4] [e4,g#4] [d#4,f#4] [c#4,e4]", // F#m E D#m C#m F#m E D#m C#m
  AO: "[g#4,d#5] [f#4,c#5] [e4,b4] [d#4,a4] [g#4,d#5] [f#4,c#5] [e4,b4] [d#4,a4]", // G#5 F#5 E5 D#dim G#5 F#5 E5 D#dim
  AP: "[[g#4,d#5]@6 [g#4,d#5]!2 [g4,d#5]@24]/2", AQ: "g#4@2 f#4@2 e4 c#4@2 ~ g#4@2 f#4@2 e4 f#4@2 ~",
  AR: "g#4@2 f#4!2 e4!2 c#4 g#4@2 f#4@2 c#4@5",
})).s("gm_piano").gain(0.5)

// chords · banjo
const banjo = note(`<
  A B C D A B C D@2 E F G H I F G H I ~@4 F G H I F G H I F G H I F G ~@2 F G H I F G H I F G H I F G H I F G H I F G H
  I F G H I F G H I F G H I F G H I F G ~@3 F G H I F G H I F G H I F G H I ~@11 F G H I F G H I F G H I F G H I ~@2
>`.pickRestart({
  A: "g#3 c#4 e4 c#4 g#3 c#4 e4 ~", B: "b3 e4 g#4 e4 b3 e4 g#4 e4", C: "b3 d#4 f#4 d#4 b3 d#4 f#4 d#4",
  D: "a3 c#4 e4 c#4 a3 c#4 e4 c#4", E: "a3 c#4 ~@6", F: "g#3 [c#4,e4] g#3 [c#4,e4] g#3 [c#4,e4] g#3 [c#4,e4]",
  G: "b3 [e4,g#4] b3 [e4,g#4] b3 [e4,g#4] b3 [e4,g#4]", H: "b3 [d#4,f#4] b3 [d#4,f#4] b3 [d#4,f#4] b3 [d#4,f#4]",
  I: "a3 [c#4,e4] a3 [c#4,e4] a3 [c#4,e4] a3 [c#4,e4]", // C#m
})).s("gm_banjo").gain(0.2)

stack(piano, banjo)