Strudelify

You Say

Lauren Daigle

KeyG majorTempo80 bpm
0:00/0:00
// You Say — Lauren Daigle
// 80 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5921361; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 77 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  A B A@2 C D@2 ~ E F@2 ~ G H@2 I J F@2 ~ A B A@3 B A@3 B A@3 B A@3 B A ~ A B A@3 B A@3 B A@3 B A@3 B A K@7 L@2 A B A@3
  B A@2 M
>`.pickRestart({
  A: "f4", B: "e4", C: "a4!7 c5, ~@14 b4 ~", D: "[c5@2 c5@2 c5@2 a4@2 c5@4 [c#5,d5] [a#4,b4,c5] a4@18, ~@8 b4 ~@23]/2",
  E: "a4!5 g4!2 f4, g#4 ~@15", F: "[g4@2 g4@2 g4@2 a4@2 g4@4 [e4,f4] [d#4,e4] d4@18]/2", G: "a4!7 c5",
  H: "[c5@2 c5@2 c5@2 a4@2 c5@4 [c#5,d5] [a#4,b4,c5] a4@18]/2", I: "~@7 a4", J: "a4!5 g4!2 f4",
  K: "[f4@8 f5@2 f5@2 f5@2 e5 f5@5 ~@3 c5 f5@2 f5@2 f5@2 e5 e5@5 ~@4 f5@2 f5@2 f5@2 e5 f5@5 ~@3 c5 d5@2 d5@2 d5@2 c5 c5@5 ~@4 f5@2 f5@2 f5@2 e5 f5@5 ~@3 c5 f5@2 f5@2 f5@2 e5 e5@5 ~@4 f5@2 f5@2 f5@2 e5 f5]/7",
  L: "[~@6 d5@2 d5@2 d5@2 d5@2 c5 c5@9 ~@8]/2", M: "f4 ~",
})).s("gm_trumpet").gain(0.25)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  ~@4 A B A@3 B A@3 B A@3 B A@2 ~@8 C@3 D E F@2 D G H@2 A ~@8 C@3 ~@7 I J@7 K@2 C@3 ~@6
>`.pickRestart({
  A: "f3", B: "e3", C: "~ a3 ~@2", D: "~@7 a2", E: "a2!7 c3", F: "[c3!3 a2 c3@2 d3 a2@9]/2", G: "a2!5 g2!2 f2",
  H: "[g2@2 g2 a2 g2@2 f2 d2@7 ~@2]/2", I: "d4",
  J: "[d4@8 c4@2 c4@2 c4@2 a#3 a3@5 ~@3 f3 a3@2 a3@2 a3@2 a#3 a#3@5 ~@4 c4@2 c4@2 c4@2 a#3 a3@5 ~@3 f3 g3@2 g3@2 g3@2 a3 a3@5 ~@4 c4@2 c4@2 c4@2 a#3 a3@5 ~@3 f3 a3@2 a3@2 a3@2 a#3 a#3@5 ~@4 c4@2 c4@2 c4@2 a#3 a3]/7",
  K: "[~@6 g3@2 g3@2 g3@2 g3@2 f3 f3@9 ~@8]/2",
})).s("gm_baritone_sax").gain(0.4)

// other · baritone sax · "Baritone Saxophone" · soft notes
const baritone_sax_soft = note("<~@52 c4!2 d4!2 c4!2 ~@18 [f2 ~]>").s("gm_baritone_sax").gain(0.15)

// other · trombone
const trombone = note(`<
  A@2 B@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 A@2 B@2 A@2 B D C@2 D@2 C@2 D@2 C@2 D@2 E F@2 ~ G H@2
  ~ C@2 D@2 C@2 D@2 C@2 D@2 A@2 B@2 I
>`.pickRestart({
  A: "c4", B: "d4", C: "c3", D: "d3", E: "a3!7 c4", F: "[c4!2 c4@2 c4@2 d4 a3@9]/2", G: "a3!5 g3 g3@2",
  H: "[g3!3 a3 g3@2 f3 d3@7 ~@2]/2", I: "f3 ~",
})).s("gm_trombone").gain(0.25)

// bass · tuba · "Sousaphone"
const bass = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@6 C D A B C
  D A B C D A B C D ~@5
>`.pickRestart({
  A: "f2", B: "a2", C: "d3", D: "a#2",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Sousaphone" · soft notes
const bass_soft = note("<~@52 A B C D A B ~@14 A B C D E>".pickRestart({
  A: "f2", B: "a2", C: "d3", D: "a#2", E: "f2 ~",
})).s("gm_tuba").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~@18 A B C@8 D@3 E ~@8 C@8 D@3 E ~@5 F G@2 C@12 H@4 ~>".pickRestart({
  A: "~@3 x", B: "x!2 ~@2", C: "x ~@3 x ~ x!2 ~ x ~@2 x ~ x ~", D: "x ~ x ~ x ~ x!2", E: "x!3 ~", F: "~@5 x!3",
  G: "x!8", H: "x ~@4 x ~@2",
})).gain(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@18 A ~@12 B C@7 ~@12 B ~@4 D E ~@19>".pickRestart({
  A: "x!3 ~", B: "~@3 x", C: "x ~@4 x ~@2", D: "x!4", E: "x!5 ~@3",
})).gain(0.2)

// drums · snare
const snare = s("sd").struct("<~@19 A B@8 ~@11 A B@8 ~@11 A B@12 C@4 ~>".pickRestart({
  A: "~@8 x!8", B: "~@2 x ~@3 x!2", C: "~ x ~ x",
})).gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@32 [~ x ~ x]!7 ~@38>").gain(0.2)

// drums · hihat
const hihat = s("hh").struct("<~@20 [x ~ x!3 ~ x ~]!11 ~@9 [x ~ x!3 ~ x ~]!11 ~@9 [x ~ x!3 ~ x ~]!12 ~@5>").gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 [~@11 x!5] ~@19 [~@11 x!5] ~@19 [~@11 x!5] ~@17>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@20 [~ x ~@3 x ~@2]!11 ~@9 [~ x ~@3 x ~@2]!11 ~@9 [~ x ~@3 x ~@2]!12 ~@5>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@19 [~@8 x!3 ~@5] ~@19 [~@8 x!3 ~@5] ~@19 [~@8 x!3 ~@5] ~@17>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@19 A ~@11 B ~@19 B C ~@23 C>".pickRestart({
  A: "x!2 ~@2", B: "x!4", C: "x",
})).gain(0.3)

stack(
  trumpet, baritone_sax, baritone_sax_soft, trombone, bass, bass_soft, kick, kick_soft, snare, snare_soft, hihat,
  mid_tom, open_hat, high_tom, ride
)