Strudelify

kiss from a rose

Elena Brown

KeyG minorTempo66 bpm
0:00/0:00
// kiss from a rose — Elena Brown
// 66 bpm, 6/8, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/8 at bar 1, 6/8 at bar 1, 9/8 at bar 7, 6/8 at bar 9, ...) are rendered on a constant 6/8 grid of one bar per cycle
// note: duplicate parts dropped: ch 3 "B♭ Clarinet" clarinet (copy of ch 2 "Flute" flute); ch 8 "Tuba" tuba (copy of ch 7 "Trombone" trombone)
// note: Transcription provider: pdmx. https://musescore.com/score/5889574; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 76 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(66/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.

// chords · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A B C B D E F G H I J K L M@2 N O P Q R S P T U V W V X L H Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AE AM AN AO@2 AP
  AQ AP D E F G AR AS AT AU AV L M@2 W M@2 AW AX AY AX AY AX AY AZ BA
>`.pickRestart({
  A: "~@4 g4 a4 ~@2 d4@2 d4@2", B: "~@2 c4@2 c4@2 ~@2 b3@2 b3 a3", C: "b3@4 g4 a4 ~@2 d4@2 d4@2", D: "b3 [d4,g4]",
  E: "[d4,g4] bb4", F: "[f4,a4] [g4,b4]", G: "b4 [d4,g4]", H: "bb4 [f4,a4]", I: "[g4,b4] [d5,g5]", J: "[g4,b4] [a4,c5]",
  K: "[g4,c5] [g4,b4]", L: "[d4,g4]!2", M: "[eb4,g4] [c4,f4]", N: "[d4,g4]@3 [d4,g4]@2 bb5", O: "[b4,d5] [g4,b4]",
  P: "[bb4,eb5] [f4,a4]", Q: "[b3,d4] [g4,b4]", R: "[bb4,c5] [f4,a4]", S: "[d4,g4] [b4,d5]", T: "[bb4,eb5] f4",
  U: "[b3,d4]@10 g4 a4", V: "[d4,g4] [c4,f4]", W: "[b3,d4]@4 b3 a3 b3@4 g4 a4", X: "[b3,d4]@4 b3 a3 b3@6",
  Y: "[g4,b4] b4", Z: "[d4,g4] [g4,bb4]", AA: "[a4,c5]@6 [b4,d5]@4 g5 f5", AB: "d5 bb4 c5@3 bb4 [eb4,g4]@6",
  AC: "a4 [b3,d4]", AD: "[b3,d4] [eb4,g4]", AE: "[f4,a4] [d4,g4]", AF: "[d4,g4] [eb4,g4]", AG: "[c4,f4] [eb4,g4]",
  AH: "[c4,f4] [b3,d4]", AI: "[b3,d4] ~ bb5 [b4,d5]@3", AJ: "[g4,b4] [bb4,eb5]", AK: "[f4,a4] [b3,d4]",
  AL: "[g4,b4] [bb4,c5]", AM: "[b4,d5] [bb4,eb5]", AN: "[f4,a4] [bb4,eb5]", AO: "[f4@6 [b3,d4]@10 g4 a4 [d4,g4]@6]/2",
  AP: "[c4,f4]@6 [b3,d4]@4 b3 a3", AQ: "b3@4 g4 a4 [d4,g4]@6", AR: "[g4,bb4] [a4,c5]",
  AS: "[b4,d5]@4 g5 f5 d5 bb4 c5@3 bb4", AT: "[eb4,g4] a4", AU: "[b3,d4]!2", AV: "[eb4,g4] [f4,a4]",
  AW: "[a3,c4] [e4,g4]", AX: "e5 d5 c5 bb4 c5 [bb4,d5]", AY: "[a4,c5] [e4,g4]", AZ: "e5 d5 c5 [bb4,d5]@3",
  BA: "[b4,d5] ~", // Bm
})).s("gm_alto_sax").gain(0.3)

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

// other · trombone
const trombone = note(`<
  A B@2 C D E F G H I@2 J@2 K H L M H M N M H@2 O P Q R S G H T@2 U V F W X Y Z F AA W F AB F W Z AC@2 AD AE AF AG@2 F G
  H AH H M H AA H@2 AI H AJ AK AL AK AL AK AL AK AM AN
>`.pickRestart({
  A: "~@2 g3", B: "[f3@2 c3@2 f3@2 b2@10 bb2 c3 d3@3 eb3 d3@2]/2", C: "c3@2 a2@2 c3@2 b2@4 b2 a2", D: "b2 g2",
  E: "g2@4 g2!2 eb2@6", F: "f2@6 g2@5 g2", G: "g2@11 g2", H: "eb2 f2", I: "[g2@17 g2 f3@2 e3@2 d3@2]/2",
  J: "[c3 b2 a2 g2@6 g2@3]/2", K: "eb2@3 f2 ~@2", L: "g2@5 d2 g2@6", M: "g2@5 g2 g2@6", N: "f2!2", O: "g2@10 g2 a2",
  P: "bb2@3 c3 g2@2 a2@2 g2@2 f2@2", Q: "g2@4 g2 f2 g2@4 g2 a2", R: "bb2@3 c3 bb2@2 a2@2 f2@2 a2@2", S: "g2@5 d2 g1@6",
  T: "[g2@5 g2 g2@11 g2 eb2@6]/2", U: "f2@3 g2@2 ~", V: "~ eb2", W: "g2 eb2", X: "f2 g2", Y: "g2@5 g2 eb2@6",
  Z: "f2 eb2", AA: "g2@6 g2@5 g2", AB: "g2 f2", AC: "[f2@6 g2@10 g2 a2 bb2@3 c3 g2@2]/2",
  AD: "a2@2 g2@2 f2@2 g2@4 g2 f2", AE: "g2@4 g2 a2 bb2@3 c3 bb2@2", AF: "a2@2 f2@2 a2@2 g2@5 d2",
  AG: "[g1@6 g2@11 g2 eb2@6]/2", AH: "g2 ~@2", AI: "g2@5 d2 g2@2 g2@4", AJ: "eb2@5 eb2 f2@6", AK: "f2@11 f2",
  AL: "c3 bb2", AM: "c3@3 bb2!2 a2", AN: "g2 ~",
})).s("gm_trombone").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A B@3 A C@2 D E F G C D E@3 H@7 I B@4 E@2 F G C@8 J K@7 A B@4 C@2 D E@8 L@3 M@8 ~
>`.pickRestart({
  A: "~ x", B: "x!2", C: "x ~ x ~ x!3 ~@5", D: "x!4 ~@5 x!3", E: "x ~@5 x ~ x ~ x!2", F: "x ~@5 x!4 ~@2",
  G: "~@3 x!4 ~@5", H: "x!2 ~@2 x!2", I: "x!2 ~@4", J: "x ~ x ~ x!3 ~ x ~@3", K: "~ x!4 ~", L: "x ~@3 x!3 ~@5",
  M: "~@3 x!2 ~@4 x!2 ~",
})).gain(0.3)

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

// drums · hihat
const hihat = s("hh").struct("<A B@2 C D E@11 F@7 G B@4 E@12 H C@7 A B@3 I E@11 ~@12>".pickRestart({
  A: "~@4 x!2", B: "~ x!2 ~ x!2", C: "~ x!4 ~", D: "~@3 x!3", E: "x!6", F: "x!2 ~@2 x!2", G: "x!2 ~@4", H: "x!5 ~",
  I: "~ x!5",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@23 [~ x] ~@24 x ~@18 x!9>").gain(0.3)

stack(alto_sax, trumpet, trombone, kick, snare, hihat, crash)