Strudelify
I Won't Send Roses (reprise) cover art

Jerry's Girls - Act I

I Won't Send Roses (reprise)

Jerry Herman

KeyB♭ majorTempo84 bpm
0:00/0:00
// I Won't Send Roses (reprise) — Jerry Herman
// 84 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 79 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(84/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.

// bass · acoustic bass
const bass = note("<~@13 A@3 B C D@3 E F@3 G H@2 I D J K L M@8 N O P Q R S T@8 U V W X@7 Y@8 Z@2 AA@4>".pickRestart({
  A: "[~@32 g1@12 c2@25 ~ bb1@25 a1@24 d2@24 ~]/3", B: "d2@23 ~ bb1@23 ~", C: "g1@23 ~ g1@23 ~", D: "c2@23 ~ c2@23 ~",
  E: "f1@41 ~@7", F: "bb1@23 ~ f1@23 ~", G: "bb1@17 ~@7 bb1@23 ~", H: "eb2@23 ~ bb1@23 ~", I: "g1@23 ~ d2@23 ~",
  J: "f2@23 ~ eb2@23 ~", K: "d2@23 ~ d2@11 ~ a2@11 ~", L: "g2",
  M: "[~@5 eb2@63 ~ f2@23 ~ bb1@23 ~ g2@23 ~ d2@23 ~ c2@23 ~ c2@23 ~ f2@23 ~ f2@23 ~ bb1@23 ~ f1@23 ~ bb1@46 ~@13 f1@11 ~@5]/8",
  N: "~@7 f1@11 ~@13 f1@11 ~@6", O: "~@6 f1@11 ~@12 f1@11 ~@8", P: "~@5 f1@11 ~@12 f1@11 ~@9",
  Q: "~@4 f1@11 ~@12 f1@11 ~@10", R: "~@3 f1@11 ~@12 f1@11 ~@11", S: "~@2 f1@11 ~@12 f2@11 ~@12",
  T: "[f2@11 ~@13 g2@11 ~@12 g1@11 ~ c2@23 bb1@23 ~ a1@23 d2@23 ~ d2@23 bb1@23 ~ g1@23 g1@23 ~ c2@23 c2@23 c2@23 ~ c2@23 c2@23 ~ c2@20]/8",
  U: "~@3 f1@43 ~@2", V: "~@4 bb1@23 ~ f1@20", W: "~@3 bb1@23 f1@22",
  X: "[~ bb1@23 f1@23 bb1@17 ~@7 bb1@23 eb2@23 bb1@23 eb2@23 bb1@23 g1@23 ~ d2@23 c2@23 c2@23 f2@23 eb2@23 d2@11]/7",
  Y: "[~@13 d2@11 a2@11 ~ g2@52 ~ eb2@73 f2@23 ~ bb1@23 ~ g2@23 ~ d2@23 ~ c2@23 ~ c2@23 ~ f2@27 ~ f2@33 ~@13 bb1@4]/8",
  Z: "[~@22 bb1@12 ~@13 bb1@12 ~@13 bb1@12 ~@12]/2", AA: "[~@2 bb1@13 ~@19 f1@20 ~ bb1@109 ~@28]/4",
})).s("gm_acoustic_bass").gain(0.45).pan(0.3)

// chords · vibraphone
const vibraphone = note("<~@40 A B C D E F G H ~@4 I J K L ~@10 M@2 N@2 ~@9>".pickRestart({
  A: "~@5 d5@7, ~@17 f4@31, ~@3 bb4@5", B: "~@19 d5@29, ~ g4@2, ~@17 bb4@31", C: "~@3 d5@5, ~@5 f4@11, ~ a4@2",
  D: "~@17 d5@31, ~@7 g4@17, ~@15 bb4@32 ~", E: "~@15 d5@31 ~@2, ~@13 f4@34 ~, ~@7 bb4@16 ~",
  F: "~@14 d5@31 ~@3, ~@11 g4@34 ~@3, ~@13 bb4@32 ~@3", G: "~@13 d5@31 ~@4, ~@9 f4@35 ~@4, ~@5 a4@17 ~@2",
  H: "~@12 d5@31 ~@5, ~@8 g4@35 ~@5, ~@11 b4@32 ~@5", I: "~@3 bb5@2 c6@3", J: "d6@5 g5@35 ~@8",
  K: "~@16 bb5@12 c6@11 d6@9", L: "~@3 gb5@37 ~@8", M: "[~ bb4@7 d5@6 a5@7 g5@7 gb5@6 g5@7 bb5@46 ~@9]/2",
  N: "[~@5 bb5@2 c6@2 d6@2 f5@4 ~]/2",
})).s("gm_vibraphone").gain(0.3).pan(0.3)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A B@5 C D E F G H I J@8 K L M L N O P Q R S T U@3 V@6 ~@7 W@8 X@2 Y@2 Z@2 AA@3 AB@4 AC AD@8 ~
>`.pickRestart({
  A: "~@7 bb4@10 c5@10 ~ d5@10 ~ d5@9",
  B: "[~ g5@10 ~ a5@10 bb5@10 ~ c6@5 bb5@5 ~ c6@21 bb5@10 ~ f5@26 [bb4,bb5]@14 ~ [ab4,ab5]@15 ~ [a4,d5,f5]@48 [gb4,bb4,d5]@44 ~@5 [f3,bb3,d4]@3 ~@7]/5", // Bb Ab Dm Gbaug Bb
  C: "~@2 [f3,bb3,d4]@18 ~@6 [f3,bb3,d4]@3 ~@10 [g3,bb3,d4]@3 ~@6", // Bb Gm
  D: "~ [g3,bb3,d4]@6 ~@2 [g3,bb3,d4] ~@3 [f3,a3,d4] ~@2", // Gm Dm
  E: "~@3 [f3,a3,d4]@18 ~@7 [f3,a3,d4]@3 ~@9 [g3,bb3,d4]@3 ~@5", // Dm Gm
  F: "~@4 [g3,bb3,d4]@18 ~@6 [g3,bb3,d4]@3 ~@9 [f3,bb3,d4]@3 ~@5", // Gm Bb
  G: "~@4 [f3,bb3,d4]@18 ~@7 [f3,bb3,d4]@3 ~@9 [g3,bb3,d4]@3 ~@4", // Bb Gm
  H: "~@5 [g3,bb3,d4]@18 ~@6 [g3,bb3,d4]@3 ~@9 [a3,d4,f4]@3 ~@4", I: "~@2 [a3,d4,f4]@6 ~@2 [a3,d4,f4] ~@3 [b3,d4,f4] ~",
  J: "[~@7 [b3,d4,f4]@18 ~@7 [b3,d4,f4]@3 ~@9 [g3,bb3,eb4]@50 ~ [gb3,a3]@49 [g3,bb3]@59 ~ bb3@11 ~ [a3,c4]@11 ~@13 f3@47 ~@25 c4@11 ~@13 [eb3,bb3]@47 ~, ~@44 c4@105 ~@79 g3@155 ~, ~@95 d4@109 ~@24 bb3@89 ~@67, ~@228 d4@71 ~@25 d4@59 ~, ~@288 e3@47 ~@49]/8", // Bdim Eb Gbm Gm Am Eb5
  K: "[f3,a3,c4]@29 ~@19", L: "~@12 f3@11 ~ c4@17 ~ bb3@5 ~", M: "d4@35 ~@13", N: "g4@23 ~ f4@23 ~",
  O: "~@12 [bb3,bb4]@11 ~ [f4,f5]@17 ~ [eb4,eb5]@5 ~", P: "[bb4,bb5]@47 ~", Q: "~@24 e4@11 ~ f4@11 ~",
  R: "gb4@11 ~ f4@11 ~ ab4@11 ~ g4@11 ~", S: "g4@23 ~ g4@5 ~ ab4@5 ~ g4@5 ~ ab4@5 ~",
  T: "a4@11 ~ ab4@5 ~ a4@5 ~ d5@17 ~ c5@5 ~", U: "[[d4,g4]@52 ~ [b3,eb4,f4]@63 ~@13 bb3@11 ~ c4@3, bb4@29 ~@7]/3",
  V: "[~@9 d4@11 ~ [f4,f5]@47 ~ g4@11 ~ g4@11 ~ a4@11 ~ bb4@11 ~ b4@11 ~ c5@23 ~ d6@11 ~ [bb4,f6]@94 ~@29, ~@69 [c4,eb4]@47 ~ f4@107 ~@64, ~@117 a4@35 ~@136]/6", // F Bb5 Cm
  W: "[~@11 [g3,bb3,eb4]@46 ~ [gb3,a3]@46 ~ [g3,bb3]@58 bb3@11 ~ [a3,c4]@11 ~@13 f3@46 ~@24 c4@11 ~@12 [eb3,bb3]@46 ~ [f3,a3,c4]@30 ~@15, ~@11 c4@99 ~@77 g3@152 ~@45, ~@58 d4@105 ~@24 bb3@87 ~@110, ~@187 d4@70 ~@24 d4@58 ~@45, ~@245 e3@46 ~@93]/8", // Eb Gbm Gm Am Eb5 F
  X: "[~@16 f3@11 ~ c4@17 bb3@5 ~ d4@34 ~@11]/2", Y: "[~@13 f3@11 c4@17 ~ bb3@5 g4@23 ~ f4@23 ~@2]/2",
  Z: "[~@9 [bb3,bb4]@11 ~ [f4,f5]@17 [eb4,eb5]@5 ~ [bb4,bb5]@46 ~@6]/2", // Bb F Eb Bb
  AA: "[~@18 e4@11 f4@11 ~ gb4@11 f4@11 ~ ab4@11 ~ g4@11 g4@23 g4@5 ~ ab4@5 ~ g4@5 ~ ab4@5 a4@11]/3",
  AB: "[~ ab4@5 ~ a4@5 ~ d5@17 c5@5 ~ [d4,g4]@52 ~ [b3,eb4,f4]@73 ~@12 bb3@11 ~ c4@6, ~@6 bb4@21 ~@5]/4", // G5 Fm7b5
  AC: "~@6 d4@11 ~ [f4,f5]@30", // F
  AD: "[~@18 g4@11 ~ g4@11 ~ a4@11 ~ bb4@11 ~ b4@13 ~ c5@47 ~ [bb4,bb5]@256, ~@18 [c4,eb4]@47 ~ [f4,a4]@61 ~@257]/8", // Bb Cm F
})).s("gm_string_ensemble_1").gain(0.25)

// chords · string ensemble 1
const string_ensemble_1_2 = note("<A@6 ~@16 B@4 C@5 D ~@24 E@2 F@8 ~@6 G@3 H@4>".pickRestart({
  A: "[~@7 [bb3,bb4]@5 [a3,a4]@5 [ab3,ab4]@5 ~ [g3,g4]@5 [gb3,gb4]@5 [f3,f4]@5 ~ [e3,e4]@31 [e3,e4]@10 ~ [eb3,eb4]@42 ~ f3@154 ~@10, ~@124 f4@111 ~@53]/6", // Bb A Ab G Gb F E Eb
  B: "[f3@47 ~ g3@47 ~ a3@47 ~ [ab3,c4]@47 ~, d4@143 ~@49, bb3@95 ~ f3@95 ~]/4", // Ab
  C: "[[bb3,d4]@47 ~ [c4,eb4]@47 ~ [bb3,d4]@47 ~@49 [f3,ab3]@47 ~, g3@191 ~@49, ~@144 c4@95 ~]/5", // Bb Cm Bb Fm
  D: "[gb3,a3,d4]@47 ~", E: "[~@4 f3@46 ~ g3@45, ~ [bb3,d4]@23]/2",
  F: "[~ a3@46 [ab3,c4]@46 ~ [bb3,d4]@46 [c4,eb4]@46 [bb3,d4]@46 ~@47 [f3,ab3]@46 [gb3,a3,d4]@46 ~@13, ~ f3@92 ~ g3@185 ~@105, ~@233 c4@92 ~@59]/8", // Ab Bb Cm Bb Fm D
  G: "[~@32 [d3,f3,bb3]@6 ~@6 [d3,f3,bb3]@25 ~ [d3,f3,bb3]@6 ~@6 [eb3,g3,bb3]@6 ~@7 [eb3,g3,bb3]@18 ~@7 [eb3,g3,bb3]@6 ~@7 [eb3,gb3,bb3]@6 ~@5]/3", // Bb Eb Ebm
  H: "[~@2 [eb3,gb3,bb3]@31 ~ [eb3,gb3,c4]@20 ~ [f3,bb3,d4]@114 ~@23]/4", // Ebm Cdim Bb
})).s("gm_string_ensemble_1").gain(0.25).pan(0.3)

// other · cello
const cello = note("<~@5 A@2 B@7 ~@25 C@5 D@2 E@2 ~@31>".pickRestart({
  A: "[~@19 bb2@29]/2", B: "[~@27 f2@12 c3@48 ~ bb2@36 f2@12 c3@48 ~ bb2@48 d3@48 ~ g2@50 ~@4]/7",
  C: "[~@39 bb2@5 c3@11 ~ d3@11 ~ d3@11 ~ f2@41 ~@11 bb2@5 ~ c3@11 ~ d3@11 ~ f3@52 ~@12 bb2@5 ~ c3@8]/5",
  D: "[~@4 d3@11 d3@11 ~ f2@46 ~@7 bb2@5 ~ c3@10]/2", E: "[~@2 d3@11 g3@46 ~@37]/2",
})).s("gm_cello").gain(0.25).pan(0.7)

// other · flute
const flute = note("<~ A@4 ~@9 B@4 C D C E ~@10 F@3 ~@3 G H@2 ~@11 I J K L ~@10 M@7 N@2 O@4>".pickRestart({
  A: "[~ g5@10 ~ a5@10 bb5@10 ~ c6@5 bb5@5 ~ c6@21 bb5@10 ~ f5@105 ~@11]/4",
  B: "[~@9 g4@6 c5@6 ~ d5@6 eb5@6 d5@6 ~ eb5@6 c5@18 g4@6 ab4@12 ~ a4@30 d5@5 ~ bb4@71 ~]/4",
  C: "~@12 [g5,bb5]@5 ~ [a5,c6]@5 ~ [bb5,d6]@17 ~ [g5,bb5]@5 ~", D: "[e5,g5]@47 ~", E: "[f5,f6]@47 ~",
  F: "[~@7 d5@6 a5@6 ~ gb5@6 ~ g5@6 a5@6 ~ bb5@6 ~@7 f6@63 ~@28, ~@23 d6@35 ~@14]/3",
  G: "~@27 [c6,eb6]@2 ~@4 [d6,f6]@2 ~@4 [bb5,d6]@2 ~@4 [c6,eb6]@2 ~", // Cm Dm Bb Cm
  H: "[~@3 [a5,c6]@2 ~@4 [bb5,d6]@2 ~@4 [f5,a5]@2 ~@4 [f5,bb5]@43 ~@32]/2", I: "~@18 bb5@11 ~ c6@17 ~",
  J: "d6@5 g5@35 ~@8", K: "~@16 bb5@11 ~ c6@11 d6@9", L: "~ gb5@12 ~@3",
  M: "[~ bb4@6 ~ d5@6 a5@6 ~ g5@6 ~ gb5@6 g5@6 ~ bb5@73 ~@12 bb5@11 ~ c6@11 ~ d6@11 ~ f5@47 ~@13 g4@11 ~ a4@11 ~ bb4@11 ~ b4@13 ~ c5@47 ~@13 d5@4]/7",
  N: "[~@3 f5@3 ~@16 d5@6 f5@3 ~@16 eb5@6 g5@3 ~@16 eb5@6 g5@3 ~@15]/2",
  O: "[~@2 eb5@6 ~ gb5@5 ~@20 eb5@10 gb5@9 ~@2 f5@106 ~@31]/4",
})).s("gm_flute").gain(0.3).pan(0.3)

// other · oboe
const oboe = note("<~@40 A@7 B@2 ~@30>".pickRestart({
  A: "[~@38 a4@5 bb4@17 ~ c5@5 ~ f4@43 ~@21 a4@5 ~ bb4@17 ~ d5@5 ~ f5@46 ~@18 a4@5 ~ bb4@17 c5@5 ~ f4@43 ~@22 a4@5 ~ c5@11]/7",
  B: "[~@6 f5@5 ~ g5@46 ~@38]/2",
})).s("gm_oboe").gain(0.3).pan(0.7)

// chords · french horn
const french_horn = note("<~@36 A@4 ~@30 B@3 ~@6>".pickRestart({
  A: "[~@33 [c4,eb4]@11 ~ [d4,f4]@11 ~ g4@35 ~ gb4@23 ~ [d4,f4]@71 ~@4, ~@57 eb4@59 ~@76]/4", // Cm Dm
  B: "[~@30 g4@11 ~ a4@11 ~ bb4@11 ~ f4@61 ~@17]/3",
})).s("gm_french_horn").gain(0.4)

// other · orchestral harp
const orchestral_harp = note("<~@2 A ~@53 B@2 C@3 D E ~@3 F ~@5 G H@2 I ~@3>".pickRestart({
  A: "~@9 f3 g3 ~ a3 bb3 c4 ~ d4 eb4 f4 ~ g4 a4 bb4 ~ c5 d5 eb5 ~ f5@5 ~@15",
  B: "[~@4 a5@5 ~ bb5@5 ~ d5@5 ~ f5@5 ~ a5@5 bb5@5 ~ d5@5 ~ f5@5 ~ a5@5 bb5@5 ~ d5@5 ~ f5@5 ~ a5@5 ~ bb5@5 d5@5 ~ f5@5]/2",
  C: "[~ a5@5 ~ bb5@5 ~ d5@5 f5@5 ~ a5@5 ~ bb5@5 ~ d5@5 ~ f5@5 ab5@5 ~ c5@5 ~ eb5@5 ~ f5@5 ~ ab5@5 c5@5 ~ eb5@5 ~ f5@5 ~ bb5@5 ~ d5@5 eb5@5 ~ g5@5 ~ bb5@5 ~ d5@5 eb5@5 ~ g5@5 ~ bb5@4]/3",
  D: "~@2 d5@5 ~ eb5@5 g5@5 ~ bb5@5 ~ d5@5 ~ eb5@5 ~ g5@5 ~@6",
  E: "~@12 c3 ~@2 d3 eb3 ~ f3 g3 ~ a3 bb3 c4 d4 eb4 f4 g4 a4 bb4 c5 d5 eb5 ~ f5 g5 ~ a5 bb5 c6 ~@8",
  F: "~@19 c4@2 d4@2 ~ f4@2 g4@2 ~ bb4@2 c5@2 ~ eb5@2 f5@2 ~ a5@2 bb5 ~@6, ~@18 bb3@2 ~@3 eb4@2 ~@3 a4@2 ~@3 d5@2 ~@3 g5@2 ~@8",
  G: "~@44 d5@3 ~", H: "[~@3 f5@3 ~@16 d5@3 ~@3 f5@3 ~@16 eb5@3 ~@3 g5@3 ~@16 eb5@3 ~@3 g5@3 ~@15]/2",
  I: "~@2 eb5@3 ~@4 gb5@3 ~@22 eb5@4 ~@6 gb5@4",
})).s("gm_orchestral_harp").gain(0.2)

// drums · snare
const snare = s("sd").struct("<~@13 A B C D@5 E D@10 F ~ G H@4 I ~@28 J K@2 L ~@7>".pickRestart({
  A: "~@11 x", B: "~@9 x ~@12 x ~@11 x ~@12 x", C: "~@11 x ~@11 x ~@12 x ~@11", D: "x!4", E: "x!2 ~@2", F: "x",
  G: "~@7 x ~@3 x ~@3 x", H: "~@3 x ~@3 x ~@3 x ~@3 x", I: "~@3 x ~@3 x ~@8", J: "~@3 x ~ x ~ x", K: "~ x ~ x ~ x ~ x",
  L: "~@3 x ~@5 x ~@6 x ~@6 x",
})).gain(0.2)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@14 A B C@5 ~ C@10 ~@2 D E@4 F ~@28 G H@2 I ~@7>".pickRestart({
  A: "~@9 x ~@24 x ~@13", B: "~@11 x ~@24 x ~@11", C: "~ x ~ x", D: "~@11 x ~@4", E: "~@3 x ~@7 x ~@4", F: "~@3 x ~@12",
  G: "~@5 x ~@2", H: "~ x ~@3 x ~@2", I: "~@3 x ~@12 x ~@7",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@40 A B C D E F G H I J K L M N O ~ O P Q R S T C U F V ~@13>".pickRestart({
  A: "~@2 x", B: "~@7 x ~@23 x ~@16", C: "~@6 x ~@22 x ~@18", D: "~@5 x ~@22 x ~@19", E: "~@4 x ~@22 x ~@20",
  F: "~@3 x ~@22 x ~@21", G: "~@2 x ~@22 x ~@22", H: "x ~@23 x ~@22 x", I: "~@23 x ~@22 x ~", J: "~@22 x ~@22 x ~@2",
  K: "~@5 x ~@5 x", L: "~@19 x ~@23 x ~@4", M: "~@3 x ~@3 x", N: "~@17 x ~@23 x ~@6", O: "~@16 x ~@22 x ~@8",
  P: "~@14 x ~@22 x ~@10", Q: "~@13 x ~@22 x ~@11", R: "~@11 x ~@22 x ~@13", S: "~@9 x ~@22 x ~@15",
  T: "~@8 x ~@22 x ~@16", U: "~ x ~@5 x ~@4", V: "~ x ~@22 x ~@23",
})).gain(0.25)

stack(
  bass, vibraphone, string_ensemble_1, string_ensemble_1_2, cello, flute, oboe, french_horn, orchestral_harp, snare,
  pedal_hat, ride
)

More by Jerry Herman