Strudelify

thats how you know

Demi Lovato

KeyB♭ majorTempo120 bpm
0:00/0:00
// thats how you know — Demi Lovato
// 120 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/82077; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 70 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.

// other · flute
const flute = note(`<
  A B@2 C A D@2 E ~@12 F G ~@3 A B@2 C A D@2 E H I J K@2 I L M N O P Q@2 R S T U R S T V ~@7 A W@3 X Y@3 Z
>`.pickRestart({
  A: "~ d5 eb5 d5", B: "[f5@3 g5]/2", C: "f5@3 bb4@5", D: "[f5@3 d5]/2", E: "g5", F: "~@6 d6 g5",
  G: "~ d6 ~ bb5 d6@2 c6@2", H: "~ d5 e5 d5", I: "g5!4 g5@2 g5@2", J: "e5 d5 c5 b4", K: "[c5@2 a4 d5@5]/2",
  L: "gb5 e5 d5 c5", M: "a4@4 ~ a4 e5@2", N: "d5@3 ~", O: "d5 d5@2 d5!2 d5@2 b4", P: "d5@2 e5@5 e5",
  Q: "[g5 g5@2 g5 g5@2 e5 a5@9]/2", R: "e5@3 d5@3 e5@2", S: "d5", T: "g5@3 f5@3 g5@2", U: "f5", V: "f5 ~@3", W: "f5/3",
  X: "f4 g4", Y: "[d5@21 f5 g5@2]/3", Z: "bb5 ~@3",
})).s("gm_flute").gain(0.3)

// other · trumpet · "Bb Trumpet"
const trumpet = note(`<
  ~@18 A B C@2 D@2 E@2 F@2 G H I@2 J K L M N@2 L O P Q R S T@2 U V W X U V W Y Z@2 ~ H AA@3 H AB@3 AC AD@3 ~
>`.pickRestart({
  A: "[d4,f4,bb4] bb4@2 bb4 [eb4,g4,bb4]@2 bb4 [eb4,g4,c5]", B: "~ c5 [eb4,g4,c5] c5 [f4,bb4,d5]@2 [f4,a4,c5]@2",
  C: "[[d4,f4,bb4]@3 f4@11 ~@2, ~@3 eb4@5 ~@8]/2", // Bb
  D: "[[d4,f4,bb4] bb4@2 bb4 [eb4,g4,bb4]@2 bb4 [eb4,g4,bb4]@2 bb4!3 [f4,a4,c5]@2 [d4,gb4,bb4]@2]/2", // Bb Eb F Daug
  E: "[[g4,b4,d5]@3 [e4,g4]@2 d5 eb5 d5]/2", F: "[f5@3 g5]/2", G: "f5@3 bb4@5", H: "~ d5 eb5 d5", I: "[f5@3 d5]/2",
  J: "g5", K: "~ d5 e5 d5", L: "g5!4 g5@2 g5@2", M: "e5 d5 c5 b4", N: "[c5@2 a4 d5@5]/2", O: "gb5 e5 d5 c5",
  P: "a4@4 ~ a4 e5@2", Q: "d5@3 ~", R: "d5 d5@2 d5!2 d5@2 b4", S: "d5@2 e5@5 e5", T: "[g5 g5@2 g5 g5@2 e5 a5@9]/2",
  U: "e5@3 d5@3 e5@2", V: "d5", W: "g5@3 f5@3 g5@2", X: "f5", Y: "f5@2 ~ d5 c5@2 bb4@2", Z: "[bb4@7 ~]/2",
  AA: "[f5@11 ~]/3", AB: "f5/3", AC: "f5 g5", AD: "bb5/3",
})).s("gm_trumpet").gain(0.3)

// chords · clarinet · "Bb Clarinet"
const clarinet = note(`<
  ~@11 A B ~ A C D@2 ~@2 E F ~@3 G H@2 I G J@2 K L M N O@2 M P Q R S T U@2 V W X Y V W X Z ~@8 AA AB AA AC AD@2 AE AF
>`.pickRestart({
  A: "~@2 [f4,d5]@2 g4@2 [f4,d5] g4", B: "~ [f4,d5] ~ g4 [f4,eb5]@2 [f4,c5]@2", C: "~ [f4,d5] ~ g4 [f4,d5]@2 [f4,c5]@2",
  D: "[[g4,b4]@3 [g4,d5] ~@2 [e4,g4]@3 [g4,b4] ~@2 [g4,bb4]@2 [f4,a4]@2]/2", E: "~@6 eb5 d5",
  F: "~ f5 ~ bb5 [eb5,g5]@2 [f5,a5]@2", G: "~ d5 eb5 d5", H: "[f5@3 g5]/2", I: "f5@3 bb4@5", J: "[f5@3 d5]/2", K: "g5",
  L: "~ b4 c5 a4", M: "b4!4 b4@2 b4@2", N: "c5 d5 c5 b4", O: "[g4@2 a4 [e4,g4]@3 [gb4,a4]@2]/2", P: "c5 e5 d5 c5",
  Q: "a4@4 ~ a4 e5@2", R: "c5 a4", S: "b4 b4@2 b4!2 b4@2 b4", T: "b4@2 b4@5 e5", U: "[d5 d5@2 d5 d5@2 e5 db5@9]/2",
  V: "[g4,c5]@3 gb4 gb4@2 [g4,c5]@2, ~@3 b4@3 ~@2", W: "[gb4,b4]@3 g4 g4@2 [a4,d5]@2, ~@3 c5@3 ~@2", X: "c5",
  Y: "[a4,d5]@3 bb4 bb4@2 [c5,f5]@2, ~@3 eb5@3 ~@2", Z: "[g4,c5] ~@3", AA: "~@2 [f4,d5]@2 [eb4,g4]@2 [f4,d5] [eb4,g4]",
  AB: "~ [f4,d5] ~ [eb4,g4] [f4,d5]@2 [f4,c5]@2", AC: "~ [f4,d5] ~ g4 [c5,eb5]@2 [f4,c5]@2",
  AD: "[bb4 bb4@2 bb4 bb4@2 bb4 c5@2 c5!3 d5@2 c5@2]/2", AE: "c5@3 bb4@2 f5 g5@2", AF: "bb5 ~@3",
})).s("gm_clarinet").gain(0.3)

// chords · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@8 A B ~@4 A B C@2 ~@2 D E ~@3 F G H I F G J K L M N O@2 M P Q R S T U@2 V W X Y V W X Z AA AB AA AC AA AB AA AC AA
  AB AA AC AD@2 AE AF
>`.pickRestart({
  A: "~@2 [f3,d4]@2 g3@2 [f3,d4] g3", B: "~ [f3,d4] ~ g3 d4@2 [f3,c4]@2",
  C: "[[g3,b3]@3 [g3,d4] ~@2 [e3,g3]@3 [g3,b3] ~@2 [g3,bb3]@2 [f3,a3]@2]/2", D: "~@6 d5 g4", E: "~ d5 ~ bb4 d5@2 c5@2",
  F: "~ [g4,bb4]!2 [f4,a4]", G: "[bb4,d5]@2 d5@2 g4@2 d5 g4", H: "~ d5 ~ g4 [bb4,d5]@2 [a4,c5]@2",
  I: "[bb4,d5]@3 g4 g4@4, ~@3 bb4@5", J: "~ d5 ~@2 g4@2 gb4@2", K: "[g4,bb4]@3 d5 ~@2 [e4,g4]@2", L: "~ b4 c5 a4",
  M: "b4!4 b4@2 b4@2", N: "c5 d5 c5 b4", O: "[g4@2 a4 [e4,g4]@3 [gb4,a4]@2]/2", P: "c5 e5 d5 c5", Q: "a4@4 ~ a4 e5@2",
  R: "c5 a4", S: "b4 b4@2 b4!2 b4@2 b4", T: "b4@2 b4@5 e5", U: "[d5 d5@2 d5 d5@2 e5 db5@9]/2",
  V: "[g4,c5]@3 gb4 gb4@2 [g4,c5]@2, ~@3 b4@3 ~@2", W: "[gb4,b4]@3 g4 g4@2 [a4,d5]@2, ~@3 c5@3 ~@2", X: "c5",
  Y: "[a4,d5]@3 bb4 bb4@2 [c5,f5]@2, ~@3 eb5@3 ~@2", Z: "[g4,c5] ~@3", AA: "~@2 [f4,d5]@2 [eb4,g4]@2 [f4,d5] [eb4,g4]",
  AB: "~ [f4,d5] ~ [eb4,g4] [f4,d5]@2 [f4,c5]@2", AC: "~ [f4,d5] ~ g4 [c5,eb5]@2 [f4,c5]@2",
  AD: "[bb4 bb4@2 bb4 bb4@2 bb4 c5@2 c5!3 d5@2 c5@2]/2", AE: "c5@3 bb4@2 f4 g4@2", AF: "bb4 ~@3",
})).s("gm_alto_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@8 A B ~@4 A C D@2 ~@7 E F G H E F I J K L M N@2 L O P Q R S T@2 U V W X Y Z AA ~@9 AB AC AB AD AE@2 AF ~
>`.pickRestart({
  A: "~@2 bb3@2 eb3@2 bb3 eb3", B: "~ bb3 ~ eb3 bb3@2 f3@2", C: "~ bb3 ~ eb3 c4@2 [f3,c4]@2",
  D: "[g3@3 b2 ~@2 c3@3 d3 ~@2 eb3@2 f3@2]/2", E: "~ [g3,bb3]!2 [f3,a3]", F: "[bb3,d4]@2 d4@2 g3@2 d4 g3",
  G: "~ d4 ~ g3 [bb3,d4]@2 [a3,c4]@2", H: "[bb3,d4]@3 g3 g3@4, ~@3 bb3@5", I: "~ d4 ~@2 g3@2 gb3@2",
  J: "[g3,bb3]@3 d4 ~@2 [e3,g3]@2", K: "~ g3!2 gb3", L: "g3!4 g3@2 g3@2", M: "g3 d4 c4 b3", N: "[e3@2 a3 c4@5]/2",
  O: "g3 e4 d4 c4", P: "a3@4 ~ a3 e4@2", Q: "g3 gb3", R: "gb3 gb3@2 gb3!2 gb3@2 b3", S: "gb3@2 g3@5 e3",
  T: "[b3 b3@2 b3 b3@2 e4 a3@9]/2", U: "e4@3 d4@3 e4@2", V: "d4@3 e4@3 gb4@2", W: "e4", X: "f3@3 g3@3 a3@2",
  Y: "e3@3 d3@3 e3@2", Z: "d3@3 e3@3 gb3@2", AA: "f3", AB: "~@2 [f3,d4]@2 [eb3,g3]@2 [f3,d4] [eb3,g3]",
  AC: "~ [f3,d4] ~ [eb3,g3] [f3,d4]@2 [f3,c4]@2", AD: "~ [f3,d4] ~ g3 [c4,eb4]@2 [f3,c4]@2",
  AE: "[bb3 bb3@2 bb3 bb3@2 bb3 c4@2 c4!3 d4@2 c4@2]/2", AF: "c4@3 bb3@5",
})).s("gm_tenor_sax").gain(0.3)

// other · french horn · "Horn"
const french_horn = note(`<
  ~@18 A B C@2 D@2 E@2 F G H I F J K L M N O@2 M P Q R S T U@2 V W X Y V W X Z ~@7 AA AB@3 AC AD@3 ~
>`.pickRestart({
  A: "[d3,f3,bb3] bb3@2 bb3 [eb3,g3,bb3]@2 bb3 [eb3,g3,c4]", B: "~ c4 [eb3,g3,c4] c4 [f3,bb3,d4]@2 [f3,a3,c4]@2",
  C: "[[d3,f3,bb3]@3 f3@11 ~@2, ~@3 eb3@5 ~@8]/2", // Bb
  D: "[[d3,f3,bb3] bb3@2 bb3 [eb3,g3,bb3]@2 bb3 [eb3,g3,bb3]@2 bb3!3 [f3,a3,c4]@2 [d3,gb3,bb3]@2]/2", // Bb Eb F Daug
  E: "[[g3,b3,d4]@3 [e3,g3]@2 [g3,bb3]!2 [f3,a3]]/2", F: "[bb3,d4]@2 d4@2 g3@2 d4 g3",
  G: "~ d4 ~ g3 [bb3,d4]@2 [a3,c4]@2", H: "[bb3,d4]@3 g3 g3@4, ~@3 bb3@5", I: "~ [g3,bb3]!2 [f3,a3]",
  J: "~ d4 ~@2 g3@2 gb3@2", K: "[g3,bb3]@3 d4 ~@2 [e3,g3]@2", L: "~ d4 e4 d4", M: "g4!4 g4@2 g4@2", N: "e4 d4 c4 b3",
  O: "[c4@2 a3 d4@5]/2", P: "gb4 e4 d4 c4", Q: "a3@4 ~ a3 e4@2", R: "d4@3 ~", S: "d4 d4@2 d4!2 d4@2 b3",
  T: "d4@2 e4@5 e4", U: "[g4 g4@2 g4 g4@2 e4 a4@9]/2", V: "e4@3 d4@3 e4@2", W: "d4", X: "g4@3 f4@3 g4@2", Y: "f4",
  Z: "f4 ~@3", AA: "~ d4 eb4 d4", AB: "f4/3", AC: "f4 g4", AD: "d5/3",
})).s("gm_french_horn").gain(0.3)

// bass · tuba · "C Tuba"
const bass = note(`<
  ~@18 A ~ A ~ A ~ B@2 C D C D C E F G H I J K L I J M N O P Q R S T U R S T V ~@2 W@2 X@2 Y@2 C Z C Z AA@2 AB AC
>`.pickRestart({
  A: "bb1@2 bb2 ~", B: "[g2@3 b2 ~@2 c2@3 e2 ~@2 [f2,f3]@4]/2", C: "bb1@3 bb1 bb2 eb2 f2 c2", D: "~ c2 ~@2 f2@2 a2@2",
  E: "~@3 c2 d2@2 a2@2", F: "g2@3 b2 ~@2 e2@2", G: "e2 g2 ~@2 c2@2 d2@2", H: "g2@2 ~ g2 b2@2 b2@2",
  I: "c2@2 ~ c2 e2@2 g2@2", J: "a1@2 ~ a1 a2@2 a1@2", K: "d2@2 ~ d2 d2@2 gb2@2", L: "g2@2 ~ g2 b1@2 b1@2",
  M: "d2@2 ~ d2 a2@2 d2@2", N: "b1!2 ~ b1", O: "e2@2 ~ e2 b2@2 e2@2", P: "a2@2 ~ a2 a2@2 a2@2", Q: "a1!2 e2 a2",
  R: "d2@3 d2@5", S: "d2@3 a2@3 d2@2", T: "f2@3 f2@3 c2@2", U: "[f1,f2]@3 c3@3 f2@2", V: "[f1,f2] ~@3", W: "bb1/2",
  X: "[bb1@4 eb2@3 eb2@5 bb1@2 f2@2]/2", Y: "[bb1@4 eb2@3 eb2@2 eb2 bb1@2 f1@2 f1@2]/2", Z: "~@3 c2 f2@2 a2@2",
  AA: "[bb1@3 bb1 bb2 eb2 f2 c2@3 ~ c2 f2@2 f2@2]/2", AB: "bb1@3 bb1@2 f2 g2@2", AC: "bb1 ~@3",
})).s("gm_tuba").gain(0.3)

// other · bassoon
const bassoon = note(`<
  ~@18 A ~ A ~ A ~ B@2 C D C D C E F G H I J K L M J N O P Q R S T U V S T U V ~@8 C W C W X@2 Y Z
>`.pickRestart({
  A: "bb1@2 bb2 ~", B: "[g2@3 b2 ~@2 c2@3 e2 ~@2 [f2,f3]@4]/2", C: "bb1@3 bb1 bb2 eb2 f2 c2", D: "~ c2 ~@2 f2@2 a2@2",
  E: "~@3 c2 d2@2 a2@2", F: "g2@3 b2 ~@2 e2@2", G: "e2 g2 ~@2 c2@2 d2@2", H: "g2@2 ~ g2 b2@2 b2@2",
  I: "c2@2 ~ c2 e2@2 g2@2", J: "a2@2 ~ a2 a3@2 a2@2", K: "d3@2 ~ d3 d3@2 gb3@2", L: "g3@2 ~ g3 b2@2 b2@2",
  M: "c3@2 ~ c3 e3@2 g3@2", N: "d3@2 ~ d3 a3@2 d3@2", O: "b2!2 ~ b2", P: "e3@2 ~ e3 b3@2 e3@2",
  Q: "a3@2 ~ a3 a3@2 a3@2", R: "a2!2 e3 a3", S: "d3@3 d3@5", T: "d3@3 a3@3 d3@2", U: "f3@3 f3@3 c3@2", V: "[f2,f3] ~@3",
  W: "~@3 c2 f2@2 a2@2", X: "[bb1@3 bb1 bb2 eb2 f2 c2@3 ~ c2 f2@2 f2@2]/2", Y: "bb1@3 bb1@2 f2 g2@2", Z: "bb2 ~@3",
})).s("gm_bassoon").gain(0.3)

// other · trombone
const trombone = note(`<
  ~@24 A@2 B C B C B D E F G H I J K H I L M N O P Q R S T Q R S T ~@8 B U B U V@2 W X
>`.pickRestart({
  A: "[g3@3 b3 ~@2 c3@3 e3 ~@2 [f3,f4]@4]/2", B: "bb2@3 bb2 bb3 eb3 f3 c3", C: "~ c3 ~@2 f3@2 a3@2",
  D: "~@3 c3 d3@2 a3@2", E: "g3@3 b3 ~@2 e3@2", F: "e3 g3 ~@2 c3@2 d3@2", G: "g3@2 ~ g3 b3@2 b3@2",
  H: "c3@2 ~ c3 e3@2 g3@2", I: "a2@2 ~ a2 a3@2 a2@2", J: "d3@2 ~ d3 d3@2 gb3@2", K: "g3@2 ~ g3 b2@2 b2@2",
  L: "d3@2 ~ d3 a3@2 d3@2", M: "b2!2 ~ b2", N: "e3@2 ~ e3 b3@2 e3@2", O: "a3@2 ~ a3 a3@2 a3@2", P: "a2!2 e3 a3",
  Q: "d3@3 d3@5", R: "d3@3 a3@3 d3@2", S: "f3@3 f3@3 c3@2", T: "[f2,f3] ~@3", U: "~@3 c3 f3@2 a3@2",
  V: "[bb2@3 bb2 bb3 eb3 f3 c3@3 ~ c3 f3@2 f3@2]/2", W: "bb2@3 bb2@2 f3 g3@2", X: "bb3 ~@3",
})).s("gm_trombone").gain(0.3)

stack(flute, trumpet, clarinet, alto_sax, tenor_sax, french_horn, bass, bassoon, trombone)

More by Demi Lovato