Strudelify

Hey Soul Sister

Ethan Luong

KeyE majorTempo97 bpm
0:00/0:00
// Hey Soul Sister — Ethan Luong
// 97 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5914965; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · violin
const violin = note(`<
  A B@3 C D E F G H I F G H I F G H I J@8 K L M N O P Q R@2 Q@2 S T ~@4 F@2 H U V W V W A X@8 Y@4
>`.pickRestart({
  A: "~@3 g#5", B: "[f#5@8 e5@2 f#5@2 g#5@2 e5 c#5@9 e5@2 f#5@2 g#5@2 e5 c#5@3 ~@12 b4@2]/3", C: "g#5!2 g#5@2",
  D: "~@2 f#5 g#5 a5 g#5 f#5 e5", E: "g#5!3 ~",
  F: "[a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~", // A
  G: "[g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~", // G#m
  H: "[f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~", // B5
  I: "[g#4,c#5] ~ [g#4,c#5] ~ [g#4,c#5] ~ [g#4,c#5] ~ [g#4,c#5] ~ [g#4,c#5] ~ [g#4,c#5] ~ [g#4,c#5] ~", // C#5
  J: "[a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~", // A B5
  K: "[a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [f#4,b4]@2 ~@6", L: "e5!2", M: "b5!2", N: "c#6!2", O: "a5!2",
  P: "e4!2", Q: "b4!2", R: "c#5!2", S: "c#5 b4", T: "a4 b4",
  U: "[f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4]@2 ~@6", // B5
  V: "~@2 [a4,c#5] ~@3 [a4,c#5] ~@3 [a4,c#5] ~@3 [a4,c#5] ~", // A
  W: "~@2 [f#4,b4] ~@3 [f#4,b4] ~@3 [f#4,b4] ~@3 [f#4,b4] ~", // B5
  X: "[f#5@8 e5@2 f#5@2 g#5@2 e5 c#5@9 e5@2 f#5@2 g#5@2 e5 c#5@3 ~@12 e5 e5@3 ~@10 g#5@4]/4",
  Y: "[f#5@8 e5@2 f#5@2 g#5@2 e5 c#5@9 e5@2 f#5@2 g#5@2 e5 c#5@3 ~@12 e5 e5@17]/4",
})).s("gm_violin").gain(0.25)

// chords · violin · soft notes · A B5
const violin_soft = note(`<
  ~@40
  [~@2 [a4,c#5] ~@3 [a4,c#5] ~@3 [a4,c#5] ~@3 [a4,c#5] ~]!2
  [~@2 [f#4,b4] ~@3 [f#4,b4] ~@3 [f#4,b4] ~@3 [f#4,b4] ~]!2
  ~@21
>`).s("gm_violin").gain(0.15)

// chords · violin
const violin_2 = note(`<
  A B C D A B C E F@3 G H I J@2 K L@2 ~ M N M N M N M O P Q R S A B C D A B C D ~@4 T@2 U V W X W Y A B C D A B C D A B
  C Z AA
>`.pickRestart({
  A: "[g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~", // G#m
  B: "[f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~ [f#4,b4] ~", // B5
  C: "[g#4,c#5] ~ [g#4,c#5] ~ [g#4,c#5] ~ [g#4,c#5] ~ [g#4,c#5] ~ [g#4,c#5] ~ [g#4,c#5] ~ [g#4,c#5] ~", // C#5
  D: "[a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~", // A
  E: "~@6 f#5 a5@2 g#5@2 f#5@2 f#5@2 e5", F: "[a5@2 e5@4 f#5@2 a5 g#5@2 f#5@2 e5@2 d#5@5 b4@2 d#5@4 e5@4 c#5@6 ~@12]/3",
  G: "~@7 e5", H: "g#5 e5 b4@2", I: "~ b4 f#5 g#5 a5 g#5 f#5 e5",
  J: "[g#5@4 e5@4 e5@3 f#5@2 c#5@7 ~@2 f#5@2 a5@2 g#5@2 f#5@2 e5 g#5]/2", K: "e5@2 e5 f#5 a5 g#5 f#5 e5",
  L: "[d#5@2 b4@2 ~@2 b4@2 d#5@3 e5@2 c#5@7 ~@12]/2", M: "a3!2", N: "b3@2 e4 b3", O: "b3@2 b3 ~",
  P: "~@2 [g#4,b4] ~@3 [g#4,b4] ~@3 [g#4,b4] ~@3 [g#4,b4] ~", // G#m
  Q: "~@2 [f#4,b4] ~@3 [f#4,b4] ~@3 [f#4,b4] ~@3 [f#4,b4] ~", // B5
  R: "~@2 [g#4,c#5] ~@3 [g#4,c#5] ~@3 [g#4,c#5] ~@3 [g#4,c#5] ~", // C#5
  S: "~@2 [a4,c#5] ~@3 [a4,c#5] ~@3 [a4,c#5] ~@3 [a4,c#5] ~", // A
  T: "[e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~", // A5
  U: "[d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~", // D#m
  V: "[d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4]@2 ~@6", W: "a4!2", X: "b4@2 e5 b4", Y: "b4!2",
  Z: "[a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5] ~ [a4,c#5]@8", AA: "[b3,e4]",
})).s("gm_violin").gain(0.25)

// chords · violin · soft notes · A5 D#m
const violin_soft_2 = note(`<
  ~@40
  [~@2 [e4,a4] ~@3 [e4,a4] ~@3 [e4,a4] ~@3 [e4,a4] ~]!2
  [~@2 [d#4,f#4] ~@3 [d#4,f#4] ~@3 [d#4,f#4] ~@3 [d#4,f#4] ~]!2
  ~@21
>`).s("gm_violin").gain(0.15)

// chords · viola
const viola = note(`<
  A B A C A B A C A B A C A B A C A B A D E@2 F G E@2 H@3 I J K A B A C A B A C E@2 F G E@2 L@2 E@2 M@3 N O P Q N O P Q
  N O P R
>`.pickRestart({
  A: "[e4,g#4] ~ [e4,g#4] ~ [e4,g#4] ~ [e4,g#4] ~ [e4,g#4] ~ [e4,g#4] ~ [e4,g#4] ~ [e4,g#4] ~", // E
  B: "[d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~", // D#m
  C: "[e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~", // A5
  D: "[e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~ [d#4,f#4] ~", // A5 D#m
  E: "[b4@2 g#4@2 f#4 e4@2 b4@2 b4 g#4!2 f#4 e4!2 f#4]/2", F: "g#4@2 e4 e4@3 ~@2 g#4@2 e4 e4@3 g#4@2",
  G: "g#4@2 g#4@2 g#4@2 g#4@2 f#4@2 e4 e4@5",
  H: "[g#4@4 c#4@2 e4@4 f#4@14 ~@6 e4 e4@3 ~@4 [e4,g#4] ~@3 [e4,g#4] ~@3 [e4,g#4] ~]/3", // E
  I: "~@2 [d#4,f#4] ~@3 [d#4,f#4] ~@3 [d#4,f#4] ~@3 [d#4,f#4] ~", // D#m
  J: "~@2 [e4,g#4] ~@3 [e4,g#4] ~@3 [e4,g#4] ~@3 [e4,g#4] ~", K: "~@2 [e4,a4] ~@3 [e4,a4] ~@3 [e4,a4] ~@3 [e4,a4] ~",
  L: "[g#4@2 c#4 e4@2 f#4@11]/2", M: "[g#4@4 c#4@2 e4@4 f#4@14 ~@6 e4 e4@3 ~@6 e4@8]/3", N: "b4!2", O: "c#4!2",
  P: "a4!2", Q: "e4!2", R: "e4",
})).s("gm_viola").gain(0.25)

// chords · cello · "Violoncello"
const cello = note(`<
  ~@4 A@3 B C D E F C D E F C D E F G@7 H I J@3 K L@2 M@2 N O P ~@3 Q R S R T U V U V W X W Y W X W Y W X W Z AA
>`.pickRestart({
  A: "g#3@2 g#3!4 g#3@2 g#3@2 g#3!4 g#3@2", B: "g#3@2 g#3!4 g#3@2 ~@8", C: "e3!2", D: "b3!2", E: "c#4!2", F: "a3 b3",
  G: "[e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [d#3,f#3] ~ [d#3,f#3] ~ [d#3,f#3] ~ [d#3,f#3] ~", // A5 D#m
  H: "[e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [d#3,f#3]@2 ~@6", I: "~@3 g#3",
  J: "[f#3@4 ~@4 e3@2 f#3@2 g#3@2 e3 c#3@5 ~@4 e3@2 f#3@2 g#3@2 e3 c#3@5 ~@12]/3",
  K: "~@2 g#3@2 g#3@2 g#3@2 g#3 g#3@2 g#3@5",
  L: "[f#3@2 e3@2 f#3@2 e3@2 f#3@2 b3@2 b3@2 g#3@4 g#3@4 e3@2 g#3@2 g#3@2 g#3@2 e3 f#3]/2",
  M: "[g#3@2 e3@2 e3@2 f#3@2 g#3 e3@2 e3@3 e3 e3@3 g#3!2 g#3@2 g#3@2 b3@2 b3@2 b3@2 b3 f#3]/2",
  N: "f#3@2 e3 f#3!2 e3@3 f#3@2 e3@2 g#3@2 e3!2", O: "~@5 c#3 e3 f#3 g#3@2 e3 e3@2 f#3@3", P: "e3@5 f#3@3 f#3@8",
  Q: "~@2 e3 b2", R: "a2!2", S: "b2@2 e3 b2", T: "b2@2 b2 ~", U: "~@2 [e3,a3] ~@3 [e3,a3] ~@3 [e3,a3] ~@3 [e3,a3] ~",
  V: "~@2 [d#3,f#3] ~@3 [d#3,f#3] ~@3 [d#3,f#3] ~@3 [d#3,f#3] ~", // D#m
  W: "[e3,g#3] ~ [e3,g#3] ~ [e3,g#3] ~ [e3,g#3] ~ [e3,g#3] ~ [e3,g#3] ~ [e3,g#3] ~ [e3,g#3] ~", // E
  X: "[d#3,f#3] ~ [d#3,f#3] ~ [d#3,f#3] ~ [d#3,f#3] ~ [d#3,f#3] ~ [d#3,f#3] ~ [d#3,f#3] ~ [d#3,f#3] ~", // D#m
  Y: "[e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~", // A5
  Z: "[e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3] ~ [e3,a3]@8", AA: "[g#3,b3]",
})).s("gm_cello").gain(0.25)

stack(violin, violin_soft, violin_2, violin_soft_2, viola, cello)

More by Ethan Luong