Strudelify

A Change Would Do You Good

Crow Sheryl

KeyE majorTempo125 bpm
0:00/0:00
// A Change Would Do You Good — Crow Sheryl
// 125 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 149 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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.

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A B C D A B C D A B C D A B C D E F G H I J K L A B C D A B C D A B C D A B C D E F G H I J K L A B C D A B C D A B C
  D E F G H I J K L A B C D A B C D A B C D A B C D E F G H I J K L A B C D I J K M A B C D A B C D A B C D A B C D ~@33
>`.pickRestart({
  A: "[e3,b3,e4]@5 ~ e4@3 d4@2 ~ [e3,b3,e4]@5 ~ e4@3 d4@2 ~, ~@6 [e3,b3]@5 ~@7 [e3,b3]@5 ~", // E5
  B: "e4@3 d4@2 ~@4 [f#3,b3,d#4]@5 ~ [f#3,b3,d#4]@2 ~ [f#3,b3,d#4]@5 ~, [e3,b3]@5 ~@19", // B E5
  C: "[e3,b3,e4]@5 ~ [e3,b3,e4]@3 d4@2 ~ [e3,b3,e4]@5 ~ [e3,b3,e4]@3 d4@2 ~", // E5
  D: "[e3,b3,e4]@2 ~ [e3,b3,d4]@2 ~@4 [b3,d#4]@5 ~ [f#3,b3,d#4]@2 ~ [f#3,b3,d#4]@3 ~@3, ~@3 f#3 ~@4", // E5 E7 B
  E: "[a3,e4,a4]@9 [a3,e4,a4]@2 ~ [a3,e4,a4]@11 ~", // A5
  F: "[a3,e4,a4]@2 ~ [a3,a4]@3 ~@3 [a3,e4,a4]@5 ~ [a3,e4,a4]@2 ~ [a3,e4,a4]@2 ~@4, ~@3 e4@5 ~@16", // A5 A A5
  G: "[e3,b3,e4]@3 ~ [e3,b3,e4]@3 ~", // E5
  H: "[e3,b3,e4]@2 ~ [b3,e4]@3 ~@3 [e3,b3,e4]@5 ~ [e3,b3,e4]@2 ~ [e3,b3,e4]@3 ~@3, ~@3 e3@5 ~@16", I: "[d3,a3,d4]@23 ~",
  J: "[d3,a3,d4]@6 ~@3 [d3,a3,d4]@8 ~ [d3,a3,d4]@2 ~@4", K: "[a3,e4]@9 [a3,e4]@14 ~, a4@23 ~",
  L: "[a3,e4,a4]@2 ~ [e4,a4]@3 ~@3 [g3,d4,g4]@5 ~ [g3,d4]@2 ~ [g3,d4]@3 ~@3, ~@2 a3@5 ~@8 g4@6 ~@3", // A5 G5
  M: "~@3 [e4,a4]@3 ~@3 [g3,d4,g4]@5 ~ [g3,d4]@2 ~ [g3,d4]@3 ~@3, [a3,e4,a4]@2 ~@13 g4@6 ~@3, ~ a3@5 ~@18", // A5 G5 A5
})).s("gm_electric_guitar_clean").gain(0.15)

// bass · fretless bass
const bass = note(`<
  ~@4 A B C D E D E F E B E D G H I J K L M@2 N O P@2 Q R S@2 T U V W X D E Y Z H AA J AB AC AD@2 AE D E AF AG D AE AF E
  B E AH AI H AJ AK AL AM@2 AN AO B AE AF AE B E B E AP E AQ E B E B AR AS AG AK AT AU AV AW AG B AX AF AY@2 AZ BA E B
  AG AP E AF E AP AE B E AP E AP E D ~@33
>`.pickRestart({
  A: "e1@6 e1@3 ~@3 e1@8 ~@4", B: "e1@2 ~ e1@3 ~@3 b1@5 ~ b1@2 ~ b1@6", C: "e1@5 ~ e1@2 ~@4 e1@9 ~@3",
  D: "e1@2 ~ e1@5 ~ b1@5 ~ b1@2 ~ b1@5 ~", E: "e1@6 ~@3 e1@2 ~ e1@6 ~@3 e1@2 ~", F: "e1@2 ~ e1@3 ~@3 b1@11 ~@4",
  G: "a1@8 ~ a1@2 ~ a1@8 ~@4", H: "a1@2 ~ a1@5 ~ a1@5 ~ a1@2 ~ a1@5 ~", I: "e1@8 ~ e1@2 ~ e1@8 ~@4",
  J: "e1@2 ~ e1@5 ~ e1@5 ~ e1@2 ~ e1@5 ~", K: "d2@8 ~ d2@2 ~ d2@8 ~@4", L: "d2@8 ~ d2@2 ~ d2@9 ~@3",
  M: "[a1@8 ~ a1@2 ~ a1@8 ~@3 a1@2 ~@2 a1@5 ~ g1@5 ~ g1@2 ~ g1@5 ~]/2", N: "~@8 e1@2 ~ e1 e1@9 ~@3",
  O: "e1@2 ~ e1@6 b1@5 ~ b1@2 ~ b1@5 ~", P: "[e1@8 ~ e1@2 ~ e1@8 ~@3 e1@2 ~@2 e1@6 b1@6 b1@2 ~ b1@6, ~@27 f1@2 ~@19]/2",
  Q: "e1@8 ~ e1@2 ~ e1@9 ~@3", R: "e1@2 ~ e1@5 ~ b1@6 b1@2 ~ b1@6",
  S: "[e1@6 ~@3 e1@2 ~ e1@8 ~@3 e1@2 ~@2 e1@6 b1@6 b1@2 ~ b1@6]/2", T: "e1@8 ~ e1@2 ~ e1@6 ~@3 e1@2 ~",
  U: "e1@5 ~ e1@3 b1@5 ~ b1@2 ~ b1@5 ~", V: "e1@8 ~ d1@2 e1@9 ~ d1@2 ~",
  W: "e1@2 ~ d1@3 e1@2 ~@3 b1@4 b1@2 ~ b1@5 ~, ~@11 a1@2 ~@11", X: "e1@6 ~@5 e1 e1@6 ~@3 e1@2 ~",
  Y: "e1@2 ~ e1@3 ~@3 b1@5 ~ b1@2 ~ b1@5 ~, ~@9 a1 ~@2", Z: "a1@9 ~@2 a1@5 ~@2 a1@3 ~@3",
  AA: "e1@6 ~@3 e1@2 ~ e1@9 ~@3", AB: "d1@7 ~", AC: "d1@2 ~ d1@5 ~ d1@5 ~ d1@2 ~ d1@3 ~@3",
  AD: "[a1@21 ~@3 a1@2 ~ a1@5 ~ g1@5 ~ g1@2 ~ g1@5 ~, ~@23 g1@2 ~@23]/2", AE: "e1@6 ~@3 e1@2 ~ e1@8 ~ e1@2 ~",
  AF: "e1@2 ~ e1@3 ~@3 b1@5 ~ b1@2 ~ b1@5 ~", AG: "e1@8 ~ e1@2 ~ e1@8 ~ e1@2 ~",
  AH: "e1@2 ~ e1@3 ~@3 b1@5 ~ b1@2 ~ b1@3 ~@3", AI: "a1@15 a1@2 ~ a1@5 ~, b1 ~@11", AJ: "e1@9 ~@3 e1@11 ~",
  AK: "e1@2 ~ e1@5 ~ e1@5 ~ e1@2 ~ e1@3 ~@3", AL: "d1@15 d1@3 d1@5 ~", AM: "[d1@8 ~ d1@6 ~@3 d1@5 a1@24 ~]/2",
  AN: "a1@2 ~ a1@5 ~ g1@5 ~ g1@2 ~ g1@5 ~", AO: "e1@6 ~@3 [d1,e1]@2 ~ e1@6 ~@3 e1@2 ~",
  AP: "e1@2 ~ e1@5 ~ b1@5 ~ b1@2 ~ b1@6", AQ: "e1@2 ~ e1@3 ~@3 b1@6 ~@2 b1 b1@5 ~", AR: "a1@8 ~ a1@2 ~ a1@11 ~",
  AS: "a1@2 ~ a1@5 a1@6 ~ a1@2 ~ a1@5 ~", AT: "d2@15 d2@2 ~ d2@5 ~", AU: "d2@8 ~ d2@8 ~ d2@5 ~", AV: "a1@23 ~",
  AW: "[g1,a1]@2 ~ a1@5 ~ g1@5 ~ g1@2 ~ g1@5 ~", AX: "e1@8 ~ d1@2 ~ e1@8 ~ d1@2 ~",
  AY: "[d1@15 ~@2 d1 d1@14 ~ d1@8 ~ d1@6]/2", AZ: "a1@7 ~", BA: "g1@2 ~ a1@5 ~ g1@5 ~ g1@2 ~ g1@5 ~",
})).s("gm_fretless_bass").gain(0.38)

// chords · rock organ
const rock_organ = note(`<
  ~@24 A ~ B ~ A ~ B ~@17 C ~ B ~ A ~ B ~@13 A ~ B ~ A ~ B ~@25 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@34
>`.pickRestart({
  A: "~@12 [e5,b5,e6]@6 [g5,a5,d6] b5 ~@4, ~@12 a5 ~@5 f5@2 ~@4", // E5 Gsus2
  B: "~@6 [b5,e6]@3 ~@3 b5@5 g5@2 ~ d5 ~@3, ~ e5@2 ~, ~@6 [d5,a5] ~@4 e6@6 ~@7, ~@12 a5 ~@11", // E5 D5
  C: "~@12 [b5,e6]@6 [g5,a5,d6] b5 ~@4, ~@12 a5 ~@5 f5@2 ~@4", // E5 Gsus2
})).s("gm_rock_organ").gain(0.31)

// chords · rock organ · soft notes
const rock_organ_soft = note(`<
  ~@24 A ~ B ~ A ~ B ~@17 A ~ B ~ A ~ B ~@13 A ~ B ~ A ~ B ~@25 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~@34
>`.pickRestart({
  A: "~@19 [d5,e5]@2 ~@3", B: "~@11 f5 ~@4 a5 ~@3 e5 ~@3",
})).s("gm_rock_organ").gain(0.15)

// other · overdriven guitar
const overdriven_guitar = note("<~@56 A B@2 C@3 D@2 E@2 F@3 ~@80>".pickRestart({
  A: "e4!2 e4@22", B: "[f#4!2 ~ d4!2 ~@4 b3!2 ~@13 e4!2 e4@21 f#4, ~@2 f#4@2 ~ d4@6 b3@15 ~@22]/2",
  C: "[~@3 d4!2 ~@4 b3!2 ~@13 a4!2 ~@10 g4!2 ~@10 f#4!2 f#4@22, f#4@5 d4@6 b3@15 a4@12 g4@12 ~@22]/3",
  D: "[g4!2 ~@10 f#4!2 ~@9 e4 e4@11 d4 d4@11 ~, ~ g4@6 f#4@6 ~@11]/2",
  E: "[d4!2 ~@10 c#4!2 ~@10 b3!2 b3@20 ~@2, ~ d4@7 ~@16, ~@7 c#4@6 ~@11]/2",
  F: "[b3!2 ~@22 a3!2 ~@9 g3 g3@14 ~@22, ~ b3@12 a3@6 ~@17]/3",
})).s("gm_overdriven_guitar").gain(0.12).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@4
>`.pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@2 x ~ x ~ x",
})).gain(0.72)

// drums · rim
const rim = s("rim").struct("<[~@3 x] [~ x ~ x]!3 ~@145>").gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@4 A@19 B A@6 C D A@3 E A@19 F A@11 B A@15 B A@23 B A@3 B A@32 C ~@4>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!3", C: "~ x ~@2", D: "~ x ~ x ~ x!3", E: "~@2 x ~@2 x!2 ~", F: "~@2 x ~@3 x!2",
})).gain(0.8)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x]!144 ~@4>").gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<~@31 A ~@7 B ~@7 A ~@3 C ~@3 D ~@19 A ~@15 A ~@7 A ~@15 E ~@33>".pickRestart({
  A: "~@6 x!2", B: "~@5 x!2 ~", C: "~@5 x!3", D: "~@5 x ~@2", E: "~@3 x",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<[~ x!3] [x!4]!144 ~@4>").gain(0.72)

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

// drums · crash
const crash = s("cr").struct(`<
  ~@24 A ~@7 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@11 A ~@7 A ~@15 A ~@7 A ~@7 A ~@40
>`.pickRestart({
  A: "x",
})).gain(0.72)

// drums · ride
const ride = s("rd").struct("<~@40 A ~@27 A ~@7 A ~@35 A ~@36>".pickRestart({
  A: "x",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct("<~@32 A B ~@14 B ~@6 C D E@11 B ~@80>".pickRestart({
  A: "~@3 x", B: "x", C: "~@23 x", D: "~ x!3", E: "x!4",
})).gain(0.48)

stack(
  electric_guitar_clean, bass, rock_organ, rock_organ_soft, overdriven_guitar, kick, rim, snare, clap, low_tom, hihat,
  mid_tom, crash, ride, tambourine
)

More by Crow Sheryl