Strudelify

Never a Time

Genesis

KeyC majorTempo76 bpm
0:00/0:00
// Never a Time — Genesis
// 76 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 3 "Strings" named as a string part, played on string ensemble 1 (its pad warm patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 73 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Overdrive.
setcpm(76/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 · piano · "EPiano"
const piano = note(`<
  ~ A B C B D@2 E F D@2 G H I J K L M C B D@2 E F D@2 G H I J K L M C N O P Q R S T U@3 V W X Y Z AA AB D@2 E F D@2 G H
  I J K L M C N C AC@3 AD AE ~
>`.pickRestart({
  A: "[g3,c4,e4]@3 [f3,a3,c4]@5", B: "[g3,c4,e4]@6 ~@9 d4, ~@3 [g3,b3,d4]@5, ~@7 c4",
  C: "[g3,c4,e4]@3 [f3,c4]@5, ~@3 a3@3 ~@2", // C F5
  D: "[c4 [a3,c4,f4] [g3,c4,e4] [f3,a3]@2 [f3,a3]@2 b3@2 [b3,e4]@7, [g3,e4]@2 ~ c4@4 [g3,d4]@9]/2", // F C F E5 C G5
  E: "a#3@3 [a#3,e4]@3 [a#3,d4]@4 [a#3,c4]@5 d4, [c4,f4]@3 ~@5", // A#dim A# A#sus2 F5
  F: "a3@3 [a3,e4]@3 f4 ~@2 c4@5 ~ d4, [c4,f4]@3 a3@5, ~@3 c4 d4 ~@2 c4, ~@7 e4@3 ~@6", // A5 F5
  G: "~@3 e4@3 [a#3,d4]@4 [a#3,c4]@6, [a#3,d4,f4]@7 ~@9", // A# A#sus2 A#
  H: "a3@3 [a3,e4]@3 ~@3 [a3,c4]@6 ~, [c4,f4]@6 f4@5 ~@5, ~@6 [a3,c4]@2 d4@3 ~@5, ~@7 e4@4 ~@5", // A5 Am F5 Am
  I: "[a3,d4,f4]@3 b3@3 [b3,f4]@2, ~@3 [d4,g4]@5", J: "[g3,c4]@3 [g3,c4]@3 [f3,a3,c4]@9 ~, e4@3 ~@5",
  K: "[d3,f3,a3,c4]@3 [d3,f3,a3,c4]@3 d4@6 [f3,d4]@4, ~@3 [g3,b3]@5", // Dm7 Dm G
  L: "b3@3 [b3,d4]@3 [e3,a3,c4]@6 [e3,a3,c4]@4, [e3,g3]@3 ~@5", // Bm Am Em
  M: "[d3,f3,a3,c4]@6 a3@2 ~@3 c4@2 ~ c4@2, ~@3 [d3,f3]@5, ~@6 c4@5 ~@5, ~@8 a3@2 a3@3 a3@3, ~@9 g3@7", // Dm7 Dm
  N: "[g3,c4,e4]@3 [g3,b3,d4]@5", O: "[f3,a#3,d4]@3 [f3,a#3,d4]@2 ~ [f3,a3,c4]@2 ~@2 [a3,c4,f4]@2 [a3,c4,f4]@4",
  P: "[d3,f3,a#3]@3 [d3,f3,a#3]@3 a3@6 [a3,c4]@4, ~@3 [c3,f3]@5", // A# Am F5
  Q: "[f3,a#3]@3 [f3,a#3]@3 [a3,c4]@4 [a3,c4,f4]@2 [a3,c4,f4]@4, d4@3 f3@5", // A#5 Am F
  R: "d4@4 ~ b3 g3@4 g3@2 ~@2 c4@2, [g3,b3]@3 e4@3 [g3,e4]@2, ~@4 [a3,d4]@2 c4@7 d4@3", // G C D5
  S: "[f3,a#3,d4]@3 [f3,a#3,d4]@3 [a3,c4]@4 [a3,c4,f4]@2 [a3,c4,f4]@4, ~@3 f3@5", // A# Am F
  T: "[d3,f3,a#3]@3 [d3,f3,a#3]@3 [c3,f3,a3]@6 [c3,f3,a3]@4", // A# F
  U: "[[f3,g3,a4,c5]@6 [g3,b3,b4]@6 [g3,b3,d4]@4 g3@3 ~ c4@2 ~@10 [g3,a#3,d4,f4]@6 g3@2 f4@2 ~@2 a#3@2 d4 ~, ~@3 d5@5 [g4,c5]@11 ~@5, ~@6 [b4,f5]@13 ~@5, ~@8 e4@3 e4@3 c4@5 ~@2 g3@2 ~, ~@19 g3@3 c4@4 g3@4 e4@8 ~@10]/3", // F G Gm7 C5 Bdim
  V: "g3@3 g3 [g3,a#3]@4, e4@5 ~@3, c4@2 c4 ~", W: "g3@3 ~@4 d#4, a#3, d#4@3 f4, g4!2, ~@3 g3@2 g3@3",
  X: "a#3@6 [g3,a#3,d4]@2 [f3,a#3,d4]@7 ~, [f3,f4] ~", Y: "g3@3 ~@4 g3, a#3@3 a#3, d4@5 d4@3, f4!2, ~@3 g3@4 ~",
  Z: "[g3,a#3,c4]@3 [g3,a#3,c4] [g3,a#3,c4]@4, e4 ~", // C7
  AA: "[a3,c4,e4,g4]@3 [a3,c4,e4,g4]@3 [a3,c4,e4]@6 [a3,c4,e4,a4]@4, ~@3 g4@5", // Am7 Am
  AB: "[g3,a#3,d4,f4]@6 g3@6 [g3,g4]@2 c4 d4, g4 ~@5 [a#3,d4,f4]@9 ~", // Gm7 G A#
  AC: "[[g3,c4,e4]@6 ~@9 d4 ~@2 c4@2 [a3,c4,e4]@2 [e3,a3]@2 ~@2 [e3,a3]@4 ~@4 e4@14, ~@3 [g3,b3,d4]@5 [a3,e4]@2 ~ c4@4 [g3,b3,d4]@9, ~@7 c4@2 f4@2 ~@13]/3", // C Am A5 G A5 G
  AD: "d4@3 ~@4 d4, [f3,a3]@5 f3@3, ~@6 c4@2 c4@3 a3@5, ~@7 d4@7 ~@2, ~@3 c4", AE: "[e3,g3,c4]",
})).s("gm_piano").gain(0.41)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~ A B A C D E D F G H I J K L M N O A C D E D F G H I J K L M N O A C P Q R S T U V W X@2 Y Z AA X AB AC D E D F G H I
  J K L M N O A C A C AB AD AE AF@2
>`.pickRestart({
  A: "g1@5 ~ g1@9 d2", B: "g2@5 ~ g2@9 d2", C: "g2@5 ~ g2@7 ~ g2 ~", D: "c2@5 ~ c2 ~ c2@7 ~",
  E: "c2@7 g1 a1 g1 c2@4 ~@2", F: "c2@5 ~ c2 ~ c2@4 d2@2 g2@2", G: "c2@4 ~@2 c2 ~ c2@6 ~@2",
  H: "c2@7 g1 a1 g1 c2@4 a1 [g1,a1]", I: "c2@4 ~@2 c2 ~ c2@7 ~", J: "c2@5 ~ c2 ~ c2@3 ~ c2@3 ~",
  K: "d2@3 f2@3 g2@8 ~@2", L: "c2@3 e2@3 f2@6 a2@2 g2 f2", M: "d2@3 e2 f2@2 g2@6 f2@2 g2 ~",
  N: "~@2 b2@3 ~ a2@5 ~ a2@2 ~@2, e2 ~@3", O: "d2@5 ~ d2@2 d2@5 ~ d2 ~", P: "a#1@3 a#1 a1@4", Q: "g1@3 g1 f1@4",
  R: "~@3 a1 a1@4, a#1 ~", S: "b1@6 b1@2 c2@4 e2@2 d2 c2", T: "a#1@6 a1 ~ a1@8", U: "~@6 f1@2 f1@7 ~, g1 ~",
  V: "g2@7 ~ g2@7 ~", W: "c2@5 ~ c2 ~ c2@4 c2@3 ~", X: "a#1@5 ~ a#1 ~ a#1@7 ~", Y: "a#1@5 ~ a#1 ~ a#1@6 g1@2",
  Z: "a#1@4 ~@2 a#1 ~ a#1@2 d2@2 c2@2 a#1 g1", AA: "a#1@4 ~@2 a#1 ~ a#1@6 ~@2", AB: "a1@5 ~ a1 ~ a1@7 ~",
  AC: "g1@5 ~ g1 ~ g1@3 ~ g1@3 ~", AD: "g1@11 ~ g1@3 ~", AE: "f1@5 a1 c2 f2", AF: "[c2@9 ~@7]/2",
})).s("gm_fretless_bass").gain(0.41)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~ A@4 B C D E F G H I J K L M N O@2 B C D E F G H I J K L M N O@2 P Q R S T U V W X Y Z AA AB AC AD AE B C D E F G H I
  J K L M N O@4 AF@2 AG AH ~
>`.pickRestart({
  A: "[c5@12 ~@4 c5@6 ~@6 c5 ~@2 c5 c5@10 ~@2 c5 ~@2 c5@2 ~ c5@2 ~ c5@3 ~@8, [c4,g4]@31 ~]/4", // C5
  B: "[c4,e4]@2 f4@2 [c4,e4] ~ [f3,a3]@9 ~, ~@2 c4 ~@13", C: "[g3,b3]@2 ~ g4, ~ [g3,b3,d4]", D: "[d4,f4]",
  E: "[c4,f4]@15 ~", F: "[c4,e4] ~ f4@2 [c4,e4] ~ [f3,a3]@10, ~@2 c4 ~@13", G: "g3@2 g3!2, b3, ~ d4", H: "[a#3,f4]",
  I: "[c4,f4]@7 ~", J: "[d4,f4,a4]@3 [d4,g4,b4]@5", K: "[e4,g4,c5]@3 [f4,a4]@3 g4@2, ~@3 c4@5",
  L: "[d4,f4,a4]@3 [g4,b4]@3 a4@2, ~@3 d4@5", M: "[e4,g4,b4]@3 [e4,a4,c5]@5", N: "d5@4 c5@2 d5 ~, [f4,a4]@7 ~",
  O: "[g4 ~@5 g4@3 ~ g4@2 c5 g4@2 c5@2 g4 d5@2 e5@2 d5@2 c5@2 g4 c5@2 g4 c5 ~, c4@31 ~, c5@11 ~@21]/2",
  P: "[a#3,d4,f4] [a3,c4,f4]", Q: "[g3,a#3,d4] [a3,c4,f4]", R: "[a#3,d4,f4]@3 [a3,c4,f4]@5",
  S: "[g3,b3,d4]@3 [g3,c4,e4]@5", T: "e4@2 ~ f4@3 [a3,c4,f4]@10, [a#3,d4]@3 ~@5", U: "[g3,a#3,d4]@3 [a3,c4,f4]@5",
  V: "~@2 d4 b3, g4", W: "~@2 c5 e5, [c4,e4]@3 ~, ~@3 g4@3 ~@2", X: "d5@3 f5", Y: "g5 c5", Z: "g5@4 a#5@3 a#5",
  AA: "c6@2 a#5@2 g5@4 f5@4 d5@3 ~", AB: "f5@5 e5 f5@2", AC: "~ c5, g5@3 ~", AD: "g5@3 a5",
  AE: "~@6 e5 ~ f5@6 ~@2, g5 ~", AF: "[[e4,a4,c5]@15 ~ g4@16, ~@15 [d4,b4]@17]/2", AG: "c4@2 c5 d5, [f4,a4]",
  AH: "~@4 c4@2 d4@3 e4@7, [g4,c5,e5]", // C
})).s("gm_string_ensemble_1").gain(0.41)

// other · electric guitar jazz · "Jazz Guitar"
const electric_guitar_jazz = note("<A B@2 C@2 ~@11 D E C@2 ~@53>".pickRestart({
  A: "~@7 g4", B: "[c5@11 g4 c5 g4@2 c5@2 g4@12 ~ g4@2]/2", C: "[c5@10 g4@2 c5 g4@2 c5@3 g4@11 ~@3]/2",
  D: "~@3 b3@3 ~@6 e4@4, e3@3 ~@5, ~ g3@2 [a3,c4]@5", E: "d4@6 e4 d4 c4@2 a3 b3 c4!2 [a3,g4]@2",
})).s("gm_electric_guitar_jazz").gain(0.41)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A ~@7 B ~@4 A ~ B ~@7 C ~@6 B ~@5 B ~ B ~@3 B ~@3 B ~@7 B ~@4 A ~@5 C ~@3
>`.pickRestart({
  A: "~@9 x ~@4 x ~", B: "~@15 x", C: "~@14 x!2",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~ [~@2 x!3 ~ x ~@3 x!3 ~ x ~]!69 ~@3>").gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@7 B ~@4 A ~ B ~@7 C ~@6 B ~@5 B ~ B ~@3 B ~@3 B ~@7 B ~@4 A ~@9>".pickRestart({
  A: "~@13 x ~@2", B: "~@7 x", C: "~@9 x ~ x!2 ~@3",
})).gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@4 A ~@12 A ~ B ~@14 B ~@5 B ~@22 A ~@9>".pickRestart({
  A: "~@5 x!2 ~", B: "~@9 x ~ x!2 ~@3",
})).gain(0.41)

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

// drums · ride
const ride = s("rd").struct("<~@35 A B A B A B A B A B A B A B A B ~@22>".pickRestart({
  A: "x!4", B: "x ~ x ~ x!4",
})).gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~ x ~ x]!69 ~@3>").gain(0.41)

// drums · shaker
const shaker = s("sh").struct(`<
  ~ A B A B A B A B A B A B A B A B@2 A B A B A B A B A B A B A B@2 A B@5 A B A B@9 A B A B A B A B A B A B@2 A@2 B A B
  A ~@3
>`.pickRestart({
  A: "~@2 x!3 ~ x!3 ~ x!3 ~ x!2", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2",
})).gain(0.41)

stack(
  piano, bass, string_ensemble_1, electric_guitar_jazz, kick, low_tom, hihat, mid_tom, high_tom, crash, ride,
  tambourine, shaker
)

More by Genesis