Strudelify

hey baby

Tom Wallace

KeyG majorTempo126 bpm
0:00/0:00
// hey baby — Tom Wallace
// 126 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5941338; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 56 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/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.

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~ A@10 B@3 C@2 D@2 ~ B@3 C@2 D@2 ~ E F G H I J K ~ L@3 M@2 N@2 O P@6 Q ~ R S T U V
>`.pickRestart({
  A: "~ a#3 ~ a#3", B: "[f4@12 g4@2 d4 f4@2 g4 ~@6]/3", C: "[~@4 d4 f4 d4 f4@2 d4 c4 a#3@5]/2",
  D: "[~@2 a#3!2 d4 d4@2 a#3@3 ~@6]/2", E: "d4@3 d4 d4@2 d4@2", F: "d4@3 d4@2 e4 f4 g4", G: "f4 e4 d4 e4@2 e4 d4 e4",
  H: "f4 e4 d4 c4@5", I: "~ g4@3 a4@2 a4@2", J: "g4@3 a4@2 f4 g4 a4", K: "a#4 ~@3",
  L: "[f4@12 g4@2 d4 f4@2 d4@3 f4!2 ~ e4]/3", M: "[~ e4 ~ e4 d#4@3 d4@2 f4 d4 f4@4 f4]/2",
  N: "[e4@2 e4@2 d#4 d#4@2 d4@9]/2", O: "~ d#4 ~ f4 ~ g4 ~@2",
  P: "[f4@12 g4@2 d4 f4@2 g4@8 ~@2 c4 d4 f4 d4 f4@2 d4 a#4 g4@7 g4!2 f4 g4 ~@2]/6",
  Q: "f4@3 ~ f4@3 ~ d#4@2 e4@3 ~ f4@2", R: "f4!8", S: "a4!8", T: "c5@3 ~@13", U: "f4@3 ~ f4@3 ~ f4@2 f4@3 ~ f4@2",
  V: "~@2 [a#3,a#4]@2 [a#3,a#4]@2 [a#3,a#4]@2 [a#3,a#4]@3 ~@5", // A#
})).s("gm_alto_sax").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@3 A@2 B C@2 D@2 ~ E@3 F@2 G@2 ~ E@3 F@2 G@2 ~ H I J K L M N ~ O@3 P@2 Q@2 R S T S U V W X ~@2 Y Z AA AB
>`.pickRestart({
  A: "[f5@24 g5@3 f5@2 d#5@3]/2", B: "f5@3 ~ d5@2 a#4@10", C: "[~@6 a#4@2 c#5 d5 f5@2 d5@2 f5@4 d5@2 a#4@2 g4@10]/2",
  D: "[~@2 a#4@2 a#4@2 a#4@2 d#5@2 d#5@3 ~ a#4@6 f5@3 ~ g5@2 g5@3 ~ f5 ~]/2", E: "[f5@12 g5@2 d5 f5@2 g5 ~@6]/3",
  F: "[~@4 d5 f5 d5 f5@2 d5 c5 a#4@5]/2", G: "[~@2 a#4!2 d5 d5@2 a#4@3 ~@6]/2", H: "~ c5 b4 a4 b4@2 b4@2",
  I: "d5@2 b4@2 a4@2 g4@8 a4 b4", J: "c5@3 c5@5", K: "a#4@3 c5@5", L: "~ c5 d5 d#5 f5@2 f5@2",
  M: "[d#5,a5] [d5,f5] [c5,d#5] [d5,g5]@2 f5 g5 a5", N: "a#5@3 ~@13", O: "[[d5,f5]@12 g5@2 d5 f5@2 g5 ~@6]/3",
  P: "[~@4 d5 f5 d5 f5@2 d5 a#4 g4@5]/2", Q: "[~ a#4!3 d5 d5@2 a#4@9]/2", R: "~@2 d#5 ~@3 f5 ~@3 f5 ~@5",
  S: "d5@3 ~ d5@3 ~ f5@2 f5 ~@3 d#5@2", T: "~ d#5 ~ d#5 f5!3 ~", U: "~ d#5 e5 f5 ~ f5 f5@2",
  V: "d5@3 ~ d5@3 ~ f5@2 f5 ~@3 e5@2", W: "~ e5 ~ e5 d#5!2 d#5@2", X: "d5@3 ~ d5@3 ~ d#5@2 e5@3 ~ f5@2", Y: "c5!8",
  Z: "d#5@3 ~@13", AA: "[f5,c6]@3 ~ [f5,c6]@3 ~ [f5,c6]@2 [f5,c6]@3 ~ [f5,c6]@2", AB: "~@2 a#4@2 a#4@2 a#4@2 a#4@3 ~@5",
})).s("gm_trumpet").gain(0.3)

// bass · tuba
const bass = note(`<
  A B C D E D F D F G H B C I J B C G H B C I J B C G K L M N O P Q R S D E T F D E U V W X W Y D E Z AA P@2 AB AC AD
>`.pickRestart({
  A: "~@5 f2 g2 a2", B: "a#2@2 ~ a2 g2@2 ~ d3", C: "c3@2 ~ c3 f2!2 g2 a2", D: "a#2@3 a2 g2@3 d3",
  E: "c3@3 c3 f2!2 g2 a2", F: "c3@3 f2@2 f2 g2 a2", G: "a#2@4 a#2@3 ~ d#2@2 d#2@3 ~ a#2 ~", H: "~ f2!5 g2 a2",
  I: "a#2@2 ~ a2 g2@2 d3 c#3", J: "c3@2 ~ f2@2 f2 g2 a2", K: "~ a#2!3 a2!2 g#2!2", L: "g2@3 g2 g2@4",
  M: "g2@3 g2 g2@2 d3@2", N: "c3@3 c3 c3@4", O: "c3@3 c3 c3@2 g2@2", P: "f2!8", Q: "f2!4 f2@4", R: "~ f2!5 g2 f2",
  S: "a#2 d#2 ~ a#1@5", T: "a#2@3 a2 g2@2 d3 c#3", U: "c3 a#2!2 g2@2 g2 d3 c#3", V: "d#3 f2!5 g2 a2",
  W: "a#2@3 a2 g2@3 d2", X: "c2@3 g2 f2!2 g2 a2", Y: "c2@3 f2@2 f2 g2 a2", Z: "a#2@4 a#2@3 ~ d#2@2 e2@3 ~ f2@2",
  AA: "~ f2!7", AB: "f2@3 ~@13", AC: "a#2@2 a#2@2 d#2 d#2@2 a#2", AD: "~@2 a#1@2 a#1@2 a#1@2 a#1@3 ~@5",
})).s("gm_tuba").gain(0.45)

stack(alto_sax, trumpet, bass)