Strudelify
Roses of Red cover art

Over The Hump

Roses of Red

The Kelly Family

KeyA majorTempo96 bpm
0:00/0:00
// Roses of Red — The Kelly Family
// 96 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~ A@3 B A@3 B A@3 B C A C A@4 D A@3 B A@3 B C A C A E F G H E I G J E I K L M N K O P Q R S T U F V A@3 B A@3 D E W X
  O Y F Z Y AA Y AB O AC AD AA AE AC AD AA AE AA Y AA Y@3 O@2 Y@2 AF
>`.pickRestart({
  A: "a1@4 ~@2 a1@7 ~@3", B: "a1@2 ~ a1@3 ~@2", C: "e1@4 ~@2 e1@7 ~@3", D: "a1@2 ~ a1@2 e1 f#1 e1",
  E: "a1@4 ~@2 a1@9 ~", F: "f#1@5 ~ f#1@9 ~", G: "e1@4 ~@2 e1@9 ~", H: "a1@5 ~ a1@4 e1@2 f#1@2 e1@2",
  I: "f#1@4 ~@2 f#1@9 ~", J: "a1@4 ~@2 a1@4 e1@2 f#1@2 e1 ~", K: "e1@2 ~ e1@5", L: "a1@2 ~ a1@4 ~", M: "a1@2 ~ a1@5",
  N: "f#1@2 ~ f#1@5", O: "a1@5 ~ a1@8 ~@2", P: "a1@4 ~@2 a1@5 ~ a1@3 ~", Q: "e1@5 ~ e1@5 ~ e1@2 ~@2, ~@6 d1 ~@9",
  R: "f#1@5 ~ f#1@6 ~@4", S: "e1@4 ~@2 e1@4 f#1@2 [e1,f#1] ~ e1 ~, ~@10 e1 ~@5", T: "a1@5 ~ a1@6 ~@2 a1@2",
  U: "e1@5 ~ e1@7 ~ e1@2", V: "e1@5 ~ e1@4 f#1@2 e1@2 ~@2", W: "f#1@2 ~ f#1@4 ~", X: "e1@5 ~ e1@9 ~",
  Y: "a1@5 ~ a1@9 ~", Z: "d2@5 ~ d2@5 ~ d2@4", AA: "d2@5 ~ d2@10", AB: "d2@5 ~ d2@9 ~", AC: "e1@5 ~ e1@10",
  AD: "f#1@5 ~ f#1@10", AE: "a1@5 ~ a1@10", AF: "a1@5 ~ a1@6 ~@4",
})).s("gm_fretless_bass").gain(0.4)

// other · accordion
const accordion = note(`<
  ~@13 A B C D E@2 ~ F G H I B J H K L M@2 N O@4 P Q@3 R S T@2 U S V@3 ~@4 W X Y Z AA@2 AB@4 AC@2 AD AE AF@2 AG AH AI AJ
  AD AG AK@2 AG@2 ~ AG AL@2 ~@13
>`.pickRestart({
  A: "b4@5 a4 g#4 ~", B: "e4", C: "b4@5 a4 ~@2", D: "~@5 a4 b4 ~, e4@7 ~",
  E: "[~@2 a5@2 g#5@2 e5@4 a4@2 ~@6 a5@2 g#5@2 e5@5 ~@5, ~@7 a4@7 ~@2]/2", F: "~@2 a5@2 g#5@2 e5@5 ~@5",
  G: "a4@2 a4@2 b4@2 a4@9 ~", H: "a4@2 b4 a4@5", I: "e4@4 e4@2 e4@9 ~", J: "a4@4 b4@2 a4@9 ~", K: "g#4@4 e4@2 e4@9 ~",
  L: "e4@13 ~@3", M: "[b4@5 a4 g#4 f#4@2 a4@5 a4@2, ~@9 e4@7]/2", N: "b4@5 a4 g#4 f#4",
  O: "[a4@5 a4 b4 ~@2 a5 g#5 ~@2 a4 b4 ~@2 a5 g#5 e5@11 [g#4,b4]@2, e4@7 a4@6 ~@2 a4@6 ~@11, ~@18 b5 ~@3 e5@10 ~@32]/4", // G#m
  P: "a4@5 a4 b4 ~, c#5", Q: "[~ a5 g#5 ~@2 a4 b4 ~@2 a5 ~ e5@11 b4@2, ~@3 e5@5 ~@16, ~@7 a4@8 ~@9]/3",
  R: "[a4,c#5]@15 ~", S: "~ a4 g#4 e4@5", T: "[~ a4 g#4 e5@11 b4@2]/2", U: "c#5",
  V: "[~@2 a4@2 g#4@2 e5@18 ~@2 c#5@2 b4@2 a4@17 ~]/3", W: "a4@3 c#5", X: "e5@7 b4@8 ~, d#5 ~@15", Y: "a4@7 a4 ~@8",
  Z: "b4 a4 b4 a4 b4 e4@2 ~", AA: "[a4, e4@15 ~]/2", AB: "[g#4@8 c#4@7 ~ a4@16, e4]/4",
  AC: "[g#4@16 ~@2 a5@2 g#5@2 e5@7 ~@3, e4@15 ~, ~@8 c#4@7 ~]/2", AD: "~ a5 g#5 e5@4 ~", AE: "~ a5 g#5 e5@5",
  AF: "[~@12 b4@2 c#5@11 ~@7]/2", AG: "~ a5 ~@6", AH: "~ a5 ~ e5@3 ~@2", AI: "~@2 a5@2 ~@2 e5@7 ~@3",
  AJ: "~@2 a5@2 ~@2 e5@9 ~", AK: "[~@2 a5@2 g#5@2 ~@6 f#5@2 e5@17 ~]/2", AL: "[e5 d5 c#5 b4@2 a4 ~ a4@9]/2",
})).s("gm_accordion").gain(0.24).pan(0.3)

// other · accordion · soft notes
const accordion_soft = note(`<
  ~@13 A ~ B C@2 ~@5 D E ~@3 F G@2 H ~@4 I@2 J ~@15 K L ~ M@2 ~@10 N J O J ~ N P ~ Q R S R T ~@14
>`.pickRestart({
  A: "~@7 f#4", B: "~@6 g#4 f#4", C: "[~@14 a4@11 ~@3 b4@2 ~@2]/2", D: "g#4 ~@3", E: "[a3,c#4]", F: "c#4@13 ~@3",
  G: "[g#4@5 ~@2 b4@2 ~@7]/2", H: "g#4@5 ~@3", I: "[~@7 a4@5 ~@4]/2", J: "~@2 g#5 ~@5", K: "~@8 c#5 ~@7", L: "~ f#4",
  M: "[c#4@31 ~]/2", N: "~@4 g#5@2 e5@7 ~@3", O: "~@4 g#5 ~@11", P: "~@6 e5@5 ~@5", Q: "~@2 g#5 e5@2 ~@3",
  R: "~@2 g#5 e5@4 ~", S: "~@2 a5@2 g#5@2 e5@5 ~@5", T: "~@6 b4 ~",
})).s("gm_accordion").gain(0.16).pan(0.3)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note("<~@49 A@2 B C A@2 B D ~@8 E@2 F G@8 H F I@2 J K@4 L M N O@4 ~@4>".pickRestart({
  A: "e4/2", B: "f#4", C: "e4", D: "e4@7 ~", E: "[e6 f#6, [c#6,g#6,a6]]/2", F: "[e6,g#6]",
  G: "[~@32 f#6@16 d6@15 ~ [c#6,g#6]@15 ~ [d6,f#6]@16 [c#6,g#6]@15 ~ [d6,e6,f#6]@16, c#6@3 ~@5, e6@33 ~@15 e6@30 ~@2 e6@30 ~@18, ~ a6@7, ~@24 g#6@23 ~ f#6 ~@79]/8", // C#5 D C#5 D
  H: "c#6@15 ~", I: "[c#6@16 d6@15 ~, f#6]/2", J: "c#6, e6@7 ~",
  K: "[e6@16 c#6@16 d6@15 ~ [c#6,e6]@16, g#6 ~, ~@16 f#6@33 ~@15]/4", L: "~@4 e6@3 ~, [d6,f#6]", M: "[c#6,e6]@15 ~",
  N: "[d6,e6,f#6]", O: "[c#6,e6]/4",
})).s("gm_string_ensemble_2").gain(0.18)

// chords · synth strings 1 · "+SYN STR 3"
const synth_strings_1 = note(`<
  ~ A@5 B@7 C D C D A@5 B@7 C D C D A@5 E@8 F@4 C G C H@2 I C A@5 J@8 K@2 D L@2 M@2 N I L@2 O@2 P@5 Q@8
>`.pickRestart({
  A: "[e3@16 f#3@15 ~@17 [a3,c#4]@32, [a3,c#4]@31 [g#3,b3]@17 ~@32, ~@2 e3@3]/5", // A G#m
  B: "[f#3@15 ~@49 f#3@15 ~@17 [a3,c#4]@16, ~@15 [g#3,b3]@17 a3@46 ~ [g#3,b3]@17 ~@16, ~ e3@3 ~ e3@2, ~@16 c#4@21 ~@19]/7", // A G#m
  C: "[e3,g#3,b3]", D: "[e3,a3,c#4]",
  E: "[f#3@15 ~@49 f#3@15 ~@17 [a3,c#4]@32, ~@15 [g#3,b3]@17 [a3,c#4]@47 [g#3,b3]@17 ~@32, ~ e3@3 ~ e3@3]/8", // A G#m A G#m
  F: "[f#3@15 ~@17 [a3,c#4]@31 ~, ~@15 [g#3,b3]@17 ~@32, ~ e3@3]/4", G: "[a3,c#4], f#3@7 ~",
  H: "[[a3,c#4] [g#3,b3], e3]/2", I: "[f#3,a3,c#4]",
  J: "[f#3@15 ~@49 f#3@15 ~@17 [a3,c#4]@32, ~@15 [g#3,b3]@17 [a3,c#4]@47 [g#3,b3]@17 ~@32, ~@4 e3@15 ~ e3@12]/8", // A G#m A G#m
  K: "[f#3@15 f#3 d3@16, ~@15 a3@16 ~]/2", L: "[[f#3,d4] [e3,c#4], a3@31 ~]/2",
  M: "[[f#3,d4]@15 ~ [e3,c#4]@16, a3@29 ~@3]/2", N: "[g#3,b3], e3@13 ~@3", O: "[[e3,g#3,b3]@15 [f#3,a3,c#4]@16 ~]/2",
  P: "[[f#3,d4]@16 [e3,c#4]@16 [f#3,d4]@16 [e3,c#4]@15 [f#3,d4]@16 ~, a3]/5", Q: "[[e3,c#4]@61 ~@3]/8",
})).s("gm_synth_strings_1").gain(0.2)

// other · pad new age · "FANTASIA"
const pad_new_age = note(`<
  ~@17 A B ~ C ~@12 D B ~ E D F ~ G ~@19 H ~@3 I@2 J ~ H B J@2 H B J@2 H B J@2 H B J@2 H B J@2 H B J@2 A B J K
>`.pickRestart({
  A: "~ a5 g#5 e5@4 ~", B: "~@2 a5@2 g#5@2 e5@7 ~@3", C: "~ a5 g#5 e6@2 ~@3", D: "~@2 a5@2 g#5@2 e5@5 ~@5",
  E: "~@4 g#5@2 e6@9 ~, ~ a5@3 ~@4", F: "~ a5 g#5 e5@2 ~@3", G: "~@2 g#5 e6@4 ~, ~@2 a5@5 ~@9", H: "~ a5 g#5 e6@4 ~",
  I: "~ a5 g#5 e5@3 ~@2", J: "~@2 a5@2 g#5@2 e5@9 ~", K: "~ a5 g#5 ~@5",
})).s("gm_pad_new_age").gain(0.19).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x ~@4]!95>").gain(0.45)

// drums · snare
const snare = s("sd").struct("<[~@3 x] [~ x ~ x]!94 [~ x ~@2]>").gain(0.45)

// drums · clap
const clap = s("cp").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~ A ~ A@2 ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@3 x",
})).gain(0.26)

// drums · hihat
const hihat = s("hh").struct("<~ [x!2]!95>").gain(0.52)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~ A ~ A@2 ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@6 x!2",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~ A ~ A@2 ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(0.39)

// drums · shaker
const shaker = s("sh").struct("<~ [~ x ~ x ~ x ~ x]!94 [~ x ~ x ~@4]>").gain(0.39)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~ [~ x ~ x]!94 [~ x ~@2]>").gain(0.19)

// drums · claves
const claves = s("clave:2").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@2 A ~ A ~ A ~@2 A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(2.21)

stack(
  bass, accordion, accordion_soft, string_ensemble_2, synth_strings_1, pad_new_age, kick, snare, clap, hihat, mid_tom,
  high_tom, shaker, shaker_soft, claves
)

More by The Kelly Family