Strudelify

Taking It All Too Hard

Genesis

KeyE majorTempo108 bpm
0:00/0:00
// Taking It All Too Hard — Genesis
// 108 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/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 · "Bass"
const bass = note(`<
  ~ A B A B C@2 D E A B A B C@2 D E F@3 G H@3 I@5 J@4 K@3 L M@4 N@2 D O M@4 C@2 D P F@3 G H@3 I@5 J@4 K@3 L M@4 N@2 D O
  M@4 C@2 D E D Q R S M@4 C@2 D T M@4 C@2 D E
>`.pickRestart({
  A: "b1@3 f#2@4 b1", B: "b1", C: "[b1@3 f#2@4 b1@4 c#2@4 g#1]/2", D: "c#2@3 g#1@5", E: "f#1", F: "e2@3 e3",
  G: "e2@6 e3 b2", H: "e2@3 e2@3 b2@2", I: "a1@3 a1@5", J: "c2@3 c2@5", K: "g#1@3 g#1@5", L: "c2",
  M: "[b1@3 f#2@3 b1 b1@9]/2", N: "[b1@3 f#2@3 b1 b1@4 b1@4 g#1]/2", O: "f#1 f#1@2 g#1 a1!2 b1 c#2",
  P: "f#1!2 ~ f#1!3 ~@2", Q: "f#1@3 f#1 f#1@4", R: "c#2@3 g#1@2 d#2 g#2!2", S: "a2!2 g#2!2 f#2@3 e2", T: "f#1@3 f#2@5",
})).s("gm_fretless_bass").gain(0.31).pan(0.1)

// chords · piano · "El Piano"
const piano = note(`<
  ~ A@2 B@2 C@2 D@2 A@2 E@2 F@2 G H I J@2 K L@2 M N O P Q R S T U V W X Y Z A@4 F@2 G AA A@4 F@2 G AA I J@2 K L@2 M N O
  P Q R S T U V W X Y Z A@4 F@2 G AA A@4 F@2 G AB G AB G AB A@4 F@2 G AB AC@2 ~@6
>`.pickRestart({
  A: "[[g#3,b3] g#4 e4 [f#3,b3] f#4 d#4 b3 [a3,e4]@2 c#4 a3 a4@2 a3 e4 c#4]/2", // G#m B5 A5
  B: "[[g#3,b3] g#4 e4 [f#3,b3] f#4 d#4 b3 [a3,e4]@2 c#4 a3 a4@2 a3 c#4@2]/2", // G#m B5 A5
  C: "[[b3,e4,g#4] a4 g#4 [b3,d#4,f#4]@2 e4 d#4 [a3,c#4,e4,f#4]@2 a3 c#4 [g#3,c#4,e4]@2 g#3 e4 c#4]/2", // E B F#m7 C#m
  D: "[~ [g#3,c#4,e4]@2 [g#3,b3] d#4 b3 g#3 f#3@2 a3 c#4 [b3,e4]@2 f#3 f#3@2]/2", // C#m G#m E5
  E: "[[g#3,b3] g#4 e4 [f#3,b3] f#4 d#4 b3 [a3,e4]@2 c#4 a3 e4@2 a3 c#4 a3]/2", // G#m B5 A5
  F: "[[g#3,b3] g#4 e4 [f#3,b3] f#4 d#4 b3 [a3,e4]@2 c#4 a3 [g#3,c#4,e4]@2 g#3 e4 c#4]/2", // G#m B5 A5 C#m
  G: "~ [g#3,c#4,e4]@2 [g#3,b3] d#4 b3 g#3@2", H: "f#3 a3 c#4 [a3,e4]@5", I: "b3 f#4 b4 d5@2 f#4 b4 f#4",
  J: "~ b3 f#4 b4 d5 f#4 b4 f#4", K: "~ b3 f#4 b4 d5 f#4 b4@2", L: "~ c5 b4 d5@2 a4@3, [b3,e4]@3 [d4,f#4]@5",
  M: "[b3,e4,g4] e4 b3 [d4,f#4,a4]@2 d4 [f#4,a4]@2", N: "~@6 g#4 e4, b3@5 b3@3, ~@3 [e4,g#4]@3 ~@2",
  O: "~ f#4 d4 [a3,e4]@2 a4 f#4 d4", P: "~ [e4,g#4] b3 a4 g#4 e4 b3 ~", Q: "~ [d4,a4] f#4 [d4,d5]@2 f#4 [d4,a4]@2",
  R: "~@5 b3 b3@2, b3@5 ~@3, ~@3 [e4,g#4]@5", S: "[d4,g4,b4] [d4,g4,b4]@2 [d4,g4,c5]@2 d4 g4 d4",
  T: "g4 d4 g4 a4@2 g4 d4@2, g3", U: "[d4,g4,b4,d5] [d4,g4,b4,d5]@2 [d4,g4,c5]@2 d4 g4 d4",
  V: "g4 d4 g4 a4@2 g4 a4@2, g3", W: "[g4,a#4]@3 g#4@3 g4@2, [a#3,d#4]", X: "d#4@3 f4@2 d#4 f4@2, a#3",
  Y: "[c4,d#4,g4]@3 [d4,f4]@2 [c4,d#4] [d4,f4]@2", Z: "[d#4,g4] c4@2 [d#4,g4] [d4,f4] [c4,d#4] [d4,f4] [d#4,g4]",
  AA: "~ f#3 a3 c#4 e4 c#4 a3 f#3", AB: "f#3 a3 c#4 [a3,e4]@2 c#4 a3 f#3",
  AC: "[[g#3,b3] g#4 e4 [f#3,b3] f#4 d#4 b3 [a3,e4]@2 c#4 a3 a4@2 ~@3]/2", // G#m B5 A5
})).s("gm_piano").gain(0.26).pan(0.6)

// chords · piano · "El Piano" · soft notes
const piano_soft = note("<A ~@101 B C@2 D@2 E F>".pickRestart({
  A: "c4 ~@15", B: "~@5 a3 e4 c#4", C: "[[g#3,b3] g#4 e4 [f#3,b3] f#4 d#4 b3 [a3,e4]@2 c#4 a3 a4@2 a3 e4 c#4]/2",
  D: "[[g#3,b3] g#4 e4 [f#3,b3] f#4 d#4 b3 [a3,e4]@2 c#4 a3 [g#3,c#4,e4]@2 g#3 e4 c#4]/2", // G#m B5 A5 C#m
  E: "~ [g#3,c#4,e4]@2 [g#3,b3] d#4 b3 g#3@2", F: "f#3 a3 c#4 [a3,e4]@2 c#4 a3 f#3",
})).s("gm_piano").gain(0.1).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x!2 ~@3]!102 ~@6>").gain(0.23)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@103 [x ~@2 x!2 ~@3]!6>").gain(0.09)

// drums · snare
const snare = s("sd").struct("<~ A@19 B A@2 B A@8 B A B A C A@13 B A@5 B A@2 B A@8 B A B A@15 B A@14 ~@8>".pickRestart({
  A: "~@3 x", B: "~@5 x!2 ~", C: "~@2 x ~@2 x!2 ~",
})).gain(0.23)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@101 [~@3 x]!8>").gain(0.09)

// drums · low tom
const low_tom = s("lt").struct("<~ x ~@54 [~@6 x!2] ~@3 x ~@48>").gain(0.27)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B C B C B C@2 A B C B C B A B C B C B A B@2 A@2 B C B C B C B C B C@2 A B C B C B A D A C A B C D A D A B C B C B
  C@3 B C B C B C B C B C@3 B C B C B A B E B C B C B A D A B E D A B C B C B A D A B C B C B A C
>`.pickRestart({
  A: "~ x!7", B: "x!7 ~", C: "x!8", D: "x!6 ~@2", E: "~@2 x!6",
})).gain(0.23)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@7 x] ~@58 [~@14 x!2] ~@49>").gain(0.23)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ B A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~@2 B ~ B A ~ C ~ C ~ A ~ C ~ A ~ B
  ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ C ~ A ~ C ~ A ~ A ~ A ~ C ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@7 x", B: "x", C: "~@3 x",
})).gain(0.27)

// drums · high tom
const high_tom = s("ht").struct("<[~@5 x ~@2] ~@58 [~@5 x!2 ~] ~@49>").gain(0.23)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@7 A ~@5 A ~@5 A ~@2 A ~@12 A ~@5 A ~@7 A ~ A ~@3 A ~@15 A ~@5 A ~ A ~@5 A ~ A ~ A ~ A ~@5 A ~ A ~@5 A ~
>`.pickRestart({
  A: "x",
})).gain(0.32)

// drums · congas
const congas = s("conga:13").struct("<~ [~ x!2 ~ x ~ x!2]!100 [~ x!2 ~ x ~ x ~] ~@7>").gain(0.59)

// drums · congas · soft notes
const congas_soft = s("conga:13").struct("<~@101 [~@7 x] [~ x!2 ~ x ~ x!2]!7>").gain(0.15)

// drums · congas
const congas_2 = s("conga:18").struct("<~ [x ~@2 x ~ x ~@2]!101 ~@7>").gain(0.59)

// drums · congas · soft notes
const congas_soft_2 = s("conga:18").struct("<~@102 [x ~@2 x ~ x ~@2]!7>").gain(0.15)

// drums · shaker
const shaker = s("sh").struct("<~ [x!8]!101 ~@7>").gain(0.18)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@102 [x!8]!7>").gain(0.05)

stack(
  bass, piano, piano_soft, kick, kick_soft, snare, snare_soft, low_tom, hihat, mid_tom, open_hat, high_tom, crash,
  congas, congas_soft, congas_2, congas_soft_2, shaker, shaker_soft
)

More by Genesis