Strudelify

I Won't Give Up

Jason Mraz

KeyE majorTempo72 bpm
0:00/0:00
// I Won't Give Up — Jason Mraz
// 72 bpm, 6/8, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/233271; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 90 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/3)

// 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 · "Bb Trumpet"
const trumpet = note(`<
  ~@8 A B C@2 D E F G H@2 I J@2 K L G M N O N P Q R@2 S B T U@2 V@3 W X Y Z AA X AB@2 AC AD AE AF@2 AG AH AF AI AJ AK AL
  AM AN@2 AO AP AQ@2 X AR X AS AT AU@3 X Y X AV X AB@2 ~@8
>`.pickRestart({
  A: "~@3 b3 e4@2 e4 f#4@3 g#4 e4", B: "a4@11 ~ g#4@11 ~", C: "[~@6 e4@2 e4@4 e4@4 f#4@4 g#4@2 a4@13 ~ g#4@11 ~]/2",
  D: "~@4 e4!3 f#4@3 g#4@2", E: "a4@11 ~ g#4@7 ~@5", F: "~@3 e4 g#4@2 g#4@2 f#4@2 e4!2", G: "f#4@11 ~",
  H: "[~@10 b3@2 e4@4 f#4@4 g#4@2 a4@13 ~ g#4@11 ~]/2", I: "~@5 b3 e4 f#4@3 g#4@2",
  J: "[a4@3 a4 b4@2 b4 f#4 g#4@6 ~@3 b3 e4@2 f#4@2 g#4 e4]/2", K: "a4@11 ~ g#4@4 f#4@4 ~@4", L: "~@2 g#4!2 f#4 e4",
  M: "~@5 b3 g#4@2 f#4@2 e4@2", N: "e4@7 ~@5 e4@7 ~@5", O: "e4@7 ~@5 f#4@2 g#4@2 f#4 g#4 ~ f#4 e4@4",
  P: "f#4@4 b3@4 ~@2 b3@2 g#4@3 ~ f#4@4 e4@4, ~@15 g#4@2 ~@7", Q: "e4@4 c#4@4 b3@4 e4@7 ~@5",
  R: "[e4@7 ~@3 b3@2 e4@4 e4@4 f#4@2 f#4@6 d#4 c#4 ~ b3@17]/2", S: "~@10 b3@2 e4@3 f#4@2 ~ g#4@3 e4@2 ~",
  T: "~@6 e4 f#4@3 g#4 e4", U: "[a4@7 ~ b4@2 b4@4 f#4@2 g#4 f#4 ~ e4 e4@15 ~ e4@4 f#4@4 g#4@2 e4@2]/2",
  V: "[a4@4 a4@4 b4@4 b4@2 f#4@2 g#4 f#4 ~ e4 e4@14 b3@2 g#4@2 f#4@6 e4@2 f#4@24 ~@2]/3", W: "~@5 b4 g#5!2 f#5@2 e5@2",
  X: "e5@7 ~@5 e5@7 ~@5", Y: "e5@7 ~@5 g#5@4 f#5@4 e5@4", Z: "e5@7 ~@5 e5@4 ~@4 f#5@4",
  AA: "f#5@4 b4@4 ~@4 g#5@4 f#5 g#5 ~ f#5 e5@4", AB: "[e5@7 ~@5 e5@4 e5@4 f#5@2 f#5@6 d#5 c#5 ~ b4@17]/2",
  AC: "~@4 g#5 f#5 g#5 f#5 e5@2 e5@2", AD: "e5@2 c#5@21 ~", AE: "~@10 a4 g#4",
  AF: "a4 g#4 a4 g#4 a4 g#4 a4 g#4 a4 g#4 a4 g#4", AG: "a4 b4@2 b4@2 g#4 f#4@2 ~@4", AH: "~@11 g#4",
  AI: "a4 g#4 a4 g#4 a4 g#4 a4 a4@2 a4!2 g#4", AJ: "a4 b4@2 b4@4 g#4 f#4@2 ~@2", AK: "~@9 b4!3",
  AL: "d5 c#5 d5 c#5 d5 c#5 d5 c#5 d5 c#5 d5 c#5", AM: "d5 c#5 d5 c#5 d5 c#5 d5 c#5 d5 c#5 d5@2",
  AN: "~ d#5!3 b4@2 ~@2 d#5!2 b4@2", AO: "~ d5!4 c#5 ~@2 d5!3 c#5", AP: "~ d#5!4 b4 ~@2 a4 d#5@2 d#5",
  AQ: "[e5@35 ~ g#5@4 f#5@4 e5@4]/2", AR: "e5@7 ~@5 f#5@2 g#5@2 f#5 g#5 ~ f#5 e5@4",
  AS: "f#5@4 b4@4 ~@2 b4@2 g#5@3 ~ f#5@4 e5@4, ~@15 g#5@2 ~@7", AT: "e5@4 c#5@4 b4@4 e5@7 ~@5",
  AU: "[e5@7 ~@3 b4@2 e5@4 e5@4 f#5@2 f#5@13 ~ e5@4 g#5@4 e5@2 f#5@4 g#5@6 ~@4 g#5@4 f#5@4 e5@4]/3",
  AV: "f#5@4 b4@4 ~@4 g#5@3 ~ f#5@4 e5@4, ~@15 g#5@2 ~@7",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "Bb Trumpet" · soft notes
const trumpet_soft = note("<~@82 A B C B D E F@2>".pickRestart({
  A: "~@3 g#4 f#4 e4", B: "e4@7 ~@5 e4@7 ~@5", C: "e4@7 ~@5 f#4@2 g#4@2 f#4 g#4 ~ f#4 e4@4",
  D: "f#4@4 b3@4 ~@2 b3@2 g#4@3 ~ f#4@4 e4@4, ~@15 g#4@2 ~@7", E: "e4@4 c#4@4 b3@4 e4@7 ~@5",
  F: "[e4@7 ~@3 b3@2 e4@4 e4@4 f#4@2 f#4@24 ~@2]/2",
})).s("gm_trumpet").gain(0.2)

// other · trumpet · "Bb Trumpet"
const trumpet_2 = note(`<
  ~ A B A B A B A C ~@7 D@2 E F@2 G H I ~ J@3 K L M N O@2 ~@7 P Q P R S T U V W@2 X Y Z@2 X Y Z@2 AA AB AC@2 AB@2 AD AE
  P Q P R S T A V P Q P R S T U V ~@7
>`.pickRestart({
  A: "e5!4", B: "e5@3 e5@3 e5@2 d#5@2 b4@2", C: "d#5@11 ~", D: "[~@10 e4@2 g#4@4 a4@4 b4@2 c#5@13 ~ b4@11 ~]/2",
  E: "~@5 e4 g#4 a4@3 b4@2", F: "[c#5@3 c#5 e5@2 e5 a4 b4@6 ~@3 e4 g#4@2 a4@2 b4 g#4]/2", G: "c#5@11 ~ b4@4 a4@4 ~@4",
  H: "~@2 b4!2 a4 g#4", I: "b4@11 ~", J: "e5@4 e5@4 e5@4 e5@7 ~ e5@4", K: "d#5@4 d#5@4 d#5@4 d#5@7 ~ d#5@4",
  L: "c#5@4 c#5@4 c#5@4 c#5@7 ~ c#5@4", M: "d#5@4 d#5@4 d#5@4 e5@7 ~ e5@4", N: "d#5 ~ c#5 ~",
  O: "[d#5@11 ~ e5@3 f#5@2 ~ g#5@3 ~@3 e4 ~@23, ~@21 e5@20 ~@7]/2", P: "e5@2 e5@2 e5!2 e5@2 e5@2 e5!2",
  Q: "e5@2 e5@2 e5!2 e5@2 e5@2 e5@2", R: "d#5@2 d#5@2 d#5!2 d#5@2 d#5@2 d#5@2",
  S: "c#5@2 c#5@2 c#5!2 c#5@2 c#5@2 c#5!2", T: "d#5@2 d#5@2 d#5!2 e5@2 e5@2 e5!2", U: "d#5!2 e5!2",
  V: "d#5@6 d#5@6 d#5@11 ~", W: "f#5!2 e5!2", X: "e5@2 ~@10 e5@3 ~@3 f#5@3 ~@3", Y: "e5@2 ~@10 e5@3 ~@3 e5@3 ~@3",
  Z: "f#5!4", AA: "a5@2 ~@10 a5@3 ~@3 g#5@3 ~@3", AB: "a4@2 ~@10 a4@3 ~@3 a4@3 ~@3", AC: "a4!4", AD: "b4!4",
  AE: "b5@11 ~@13",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "Bb Trumpet" · soft notes
const trumpet_soft_2 = note("<~@33 A@2 B@2 C@2 D E ~@42 F G F H I G H>".pickRestart({
  A: "[a4@11 ~ g#4@23 ~ e4@2 f#4@6 g#4@4]/2", B: "[a4@7 ~ b4@4 g#4@23 ~ e4@4 f#4@4 g#4@4]/2",
  C: "[a4@11 ~ g#4@23 ~ g#4@2 f#4@6 e4@4]/2", D: "~@3 e5", E: "d#5@11 ~@13", F: "e5@11 ~", G: "b4@11 ~", H: "d#5@11 ~",
  I: "c#5@11 ~",
})).s("gm_trumpet").gain(0.2)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~ A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D F G H I J K H L M ~@8 N O N P Q R S T U@2 V W X Y V W X Y Z AA AB@2
  AA@2 AC AD N O N P Q R S T N O N P Q R S T AE AF E G H@2 G
>`.pickRestart({
  A: "[c#4@11 ~ b3@34 ~@2]/2", B: "[c#4@6 c#4@6 b3@18 b3@17 ~]/2", C: "[c#4@3 e4@3 e4@17 ~]/2", D: "e4@11 ~ e4@11 ~",
  E: "d#4@11 ~", F: "d#4@11 ~@13", G: "c#4@11 ~", H: "b3@11 ~", I: "e4@11 ~", J: "e4@12 d#4@11 ~", K: "d#4@12 c#4@11 ~",
  L: "[b3,e4]@11 ~ [b3,e4]@11 ~", M: "[b3,d#4]@11 ~", N: "c#4@2 c#4@2 c#4!2 c#4@2 c#4@2 c#4!2",
  O: "b3@2 b3@2 b3!2 b3@2 b3@2 b3@2", P: "e4@2 e4@2 e4!2 d#4@2 d#4@2 d#4@2", Q: "d#4@2 d#4@2 d#4!2 c#4@2 c#4@2 c#4!2",
  R: "b3@2 b3@2 b3!2 b3@2 b3@2 b3!2", S: "e4!4", T: "[b3,d#4]@6 [b3,d#4]@6 [b3,d#4]@11 ~", U: "d#4!2 c#4!2",
  V: "c#4@2 ~@10 c#4@3 ~@3 d#4@3 ~@3", W: "c#4@2 ~@10 c#4@3 ~@3 c#4@3 ~@3", X: "e4!2 d#4!2", Y: "c#4!2 d#4!2",
  Z: "f#4@2 ~@10 f#4@3 ~@3 e4@3 ~@3", AA: "f#4@2 ~@10 f#4@3 ~@3 f#4@3 ~@3", AB: "f#4!4",
  AC: "g#4@3 g#4@3 g#4@2 f#4@2 g#4@2", AD: "b4@11 ~@13", AE: "g#4@11 ~", AF: "f#4@11 ~",
})).s("gm_alto_sax").gain(0.3)

// other · trombone
const trombone = note(`<
  ~ A@6 B C A@6 B C A@6 B D E F G H E F I J ~@8 K L M N K O P Q R S T@2 U V T@2 U W X@2 Y@2 X Z AA AB K L M N K AC AD AE
  K AF M N K O P Q ~@7
>`.pickRestart({
  A: "e2@11 ~ e2@7 ~ e2@4", B: "b2@11 ~ f#2@11 ~", C: "b2@11 ~", D: "b2@11 ~@13", E: "a2@4 a2@4 a2@4 a2@7 ~ a2@4",
  F: "[e2,e3]@4 [e2,e3]@4 [e2,e3]@4 [e2,e3]@7 ~ [e2,e3]@4", G: "c#3@4 c#3@4 c#3@4 c#3@7 ~ c#3@4",
  H: "b2@4 b2@4 b2@4 b2@7 ~ b2@4", I: "[b1,b2]@11 ~ f#2@11 ~", J: "[b1,b2]@11 ~", K: "a2@2 a2@2 a2!2 a2@2 a2@2 a2!2",
  L: "e2@2 e2@2 e2!2 e2@2 g#2@2 b2@2", M: "c#3@2 c#3@2 c#3!2 c#3@2 c#3@2 c#3!2", N: "b2@2 b2@2 b2!2 e2@2 f#2@2 g#2@2",
  O: "e3@2 e3@2 e3!2 e3@2 e3@2 e3!2", P: "b2!2 f#2!2", Q: "[b1,b2]@6 [b1,b2]@6 [b1,b2]@11 ~", R: "a2!4",
  S: "a2@3 a2@3 a2@2 a2@2 g#2@2", T: "f#2@2 ~@10 f#2@3 ~@3 f#2@3 ~@3", U: "b2@11 ~ b2@11 ~",
  V: "b2@11 ~ b2@4 a2@4 g#2@4", W: "b2@11 ~@5 b2@4 c#3@4", X: "d3@2 ~@10 d3@3 ~@3 d3@3 ~@3", Y: "d#3!4",
  Z: "d#3@2 ~@10 d#3@3 ~@3 d#3@3 ~@3", AA: "e3!4", AB: "e2@11 ~@13", AC: "e2@2 e2@2 e2!2 e2@2 e2@2 e2!2", AD: "c#3!4",
  AE: "b2@3 b2@3 e2@2 f#2@2 g#2@2", AF: "e3@2 e3@2 e3!2 e3@2 [g#2,g#3]@2 b2@2",
})).s("gm_trombone").gain(0.3)

// other · trombone · soft notes
const trombone_soft = note("<~@33 A@6 B C ~@42 D E F G D E G>".pickRestart({
  A: "e2@11 ~ e2@7 ~ e2@4", B: "[b1,b2]@11 ~ f#2@11 ~", C: "[b1,b2]@11 ~@13", D: "a2@11 ~", E: "e2@11 ~", F: "c#3@11 ~",
  G: "b2@11 ~",
})).s("gm_trombone").gain(0.2)

stack(trumpet, trumpet_soft, trumpet_2, trumpet_soft_2, alto_sax, trombone, trombone_soft)