Strudelify
Jesus He Knows Me cover art

1991 · We Can't Dance

Jesus He Knows Me

Genesis

KeyE♭ minorTempo96 bpm
0:00/0:00
// Jesus He Knows Me — Genesis
// 96 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 13 "syn bass" named as a bass, played on synth bass 1 (its piano patch is not one)
// note: Full arrangement: all 101 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 · electric bass finger · "bass"
const bass = note(`<
  ~@3 A@2 B@7 C B@3 D E F G H I J I J K L K M B@3 D B@3 D B N@2 O K L K L K L K P Q R S T U V W X Y V W Z AA AB AC@2 AD
  AE@3 AF AE@3 AG AH@3 AI AJ AK AJ AK K AK K AL AM AN AM AN AM AN AM AO AM AN AM AN AM AN AP
>`.pickRestart({
  A: "[bb1@29 ~ ab1 bb1]/2", B: "db2 eb2!3 ~ eb2!3 ~ eb2!3 ~ eb2 ab1 bb1",
  C: "db2 eb2!3 ~ eb2!3 ~ eb2 gb2 ab2 bb2 db3 eb3 db2", D: "db2 eb2!3 ~ eb2!3 ~ eb2 ab1 bb1 db2 eb2 ab1 bb1",
  E: "db2 eb2!3 ~ eb2!3 ~ eb2 f2 eb2 g2 eb2 g2 db2", F: "eb2 f2 eb2!2 ~ eb2@3 ~ db2 ~ eb2 ~ eb2 bb1 db2",
  G: "eb2 f2 eb2!2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ~ eb2 ab1 bb1", H: "eb2 f2 eb2!2 ~ eb2 ~ eb2 f2@2 eb2@2 db2@2 bb1@2",
  I: "ab1 db2", J: "gb2@7 b1@9", K: "ab1@7 b1 db2@8", L: "gb2@7 b1@8 bb1", M: "eb2@12 f2 g2 f2 eb2",
  N: "eb2 f2 eb2!2 ~ eb2!3 ~ eb2!3 ~ eb2 ab1 bb1", O: "eb2 f2 eb2!2 ~ eb2!3 f2@2 eb2@2 db2@2 bb1@2",
  P: "eb2@14 ab1 bb1", Q: "eb1@11 eb2 ~ db2 ~ bb1", R: "eb1@3 eb2@7 ~ ab1@4 ~", S: "eb1@10 ~ eb2 ~ db2 ~ bb1",
  T: "eb1@3 eb2@12 ~", U: "bb1 ~ bb1 ~", V: "d2 ~ g2 ~", W: "g2 ~ bb1 ~", X: "d2@4 ~@4 g1@4 g1@3 ~", Y: "g1 ~ bb1 ~",
  Z: "d2 ~ g1@2", AA: "ab1 ~ ab1 ~", AB: "g1 ~ g1 ~", AC: "[f1@4 ~@4 f1@4 ~@3 eb2@17]/2", AD: "bb1",
  AE: "db2 eb2!13 ab1 bb1", AF: "db2 eb2!9 ab2 bb2 db3 eb3 ab2 bb2", AG: "db2 eb2!9 ab1 bb1 db2 eb2 ab1 bb1",
  AH: "eb2 f2 eb2!12 ab1 bb1", AI: "eb2 f2 eb2!6 f2@2 eb2@2 db2@2 bb1@2", AJ: "ab1@3 ab1@2 ab1@2 b1 db2@8",
  AK: "gb2@7 b1@8 gb1", AL: "eb2@2 eb2@3 eb2 eb2@3 eb2 eb2@2 eb2 db2 bb1@2", AM: "ab1@3 bb1@3 b1@2 db2@4 eb2@2 db2@2",
  AN: "gb2@2 gb2 bb1 b1@2 bb1@2", AO: "eb2@2 eb2@2 ~ eb2 eb2@2 ~ ab2 bb2@2 eb3 db3 bb2@2",
  AP: "ab1@3 bb1@3 b1@2 db2@4 eb2@2 ~@2",
})).s("gm_electric_bass_finger").gain(0.64)

// chords · clavinet · C5 Bb C5 Bb5 C5 Bb C5 Bb5 …
const clavinet = note(`<
  ~
  [~@2 [g3,c4] [bb3,d4]@3 [g3,c4] [f3,bb3] ~@2 [g3,c4] [bb3,d4]@3 [g3,c4] [f3,bb3]]!4
  ~@44
  [eb2 eb3 eb4 [db4,gb4]@2 ~ eb4!2 eb2 eb3 eb4 [eb4,ab4]@2 ~ eb4!2]!4
  ~@11
  [~@2 [g3,c4] [bb3,d4]@3 [g3,c4] [f3,bb3] ~@2 [g3,c4] [bb3,d4]@3 [g3,c4] [f3,bb3]]!2
  ~@35
>`).s("gm_clavinet").gain(0.64).pan(0.7)

// chords · distortion guitar · "d guitar"
const distortion_guitar = note(`<
  ~@3 A B ~@3 C ~ D ~ C ~@8 E F E F E F E G ~@3 C ~@8 E F E F E F E H ~@14 I@2 J ~@3 C ~@8 E F E F E F E H E F E F E F E
  H E F E F E F E
>`.pickRestart({
  A: "[bb2,f3,bb3]", B: "[bb2,f3,bb3]@7 [bb2,f3,bb3]", C: "~@9 eb4 [db4,gb4]@2 eb4@2 ~@2", D: "~@11 eb4 ~ eb4 bb3@2",
  E: "[ab2,eb3] [db3,ab3]", F: "[gb2,db3]@7 [b2,gb3]@9", G: "[eb3,bb3]@7 [eb3,bb3]", H: "[eb3,bb3]@15 ~",
  I: "[~@15 [eb3,bb3]@17]/2", J: "[bb2,f3]",
})).s("gm_distortion_guitar").gain(0.64).pan(0.7)

// chords · piano · "pad"
const piano = note(`<
  ~@5 A B C@2 A B C@2 A B C@2 D@4 E@7 F A B C@2 A B C@2 D@4 E@7 F ~@12 G H I ~@2 A B C@2 A B C@2 D@4 E@7 F E@7 F E@7
>`.pickRestart({
  A: "[gb3,bb3,eb4] [f3,ab3,db4]", B: "[db3,f3,ab3] [eb3,gb3,bb3]",
  C: "[[gb3,bb3,eb4] [f3,ab3] [ab3,f4] [gb3,bb3,eb4], ~ db4@2 ~]/2", D: "[ab3,db4,f4] [bb3,eb4,g4]",
  E: "[[b3,eb4]@8 [db4,f4]@15 gb3@9 ~@8 [db4,f4]@15 gb3@9 ~@8 [db4,f4]@15 gb3@9 ~@8 [db4,f4]@8, ab3@23 [b3,eb4]@17 ~@15 [b3,eb4]@17 ~@15 [b3,eb4]@17 ~@8, ~@4 ab3@3 ~ ab3@3 ~ ab3@2]/7", // B Db B
  F: "[bb3,eb4,g4]", G: "[eb3,ab3,c4]", H: "[d3,g3,bb3]", I: "[f3,ab3,c4]@15 ~",
})).s("gm_piano").gain(0.32)

// other · electric guitar muted · "m guitar"
const electric_guitar_muted = note("<~@5 A@11 B A C@2 D ~@8 A@7 B A C@2 D ~@25 A@7 B A C@2 D ~@23>".pickRestart({
  A: "db4 eb4!3 ~ eb4 ~ eb4 ~ eb4 ~ eb4 ~ eb4 ab3 bb3", B: "db4 eb4!3 ~ eb4 ~ eb4 ~ eb4 ab3 bb3 db4 eb4 ab3 bb3",
  C: "eb4 f4 eb4!2 ~ eb4 ~ eb4 ~ eb4 ~ eb4 ~ eb4 ab3 bb3", D: "eb4 f4 eb4!2 ~ eb4 ~ eb4 ~ eb4 ~ eb4 ~ eb4 g4 eb4",
})).s("gm_electric_guitar_muted").gain(0.64).pan(0.3)

// chords · shamisen · "synth 1"
const shamisen = note("<~@29 A B A B A B A B@5 ~@12 C D E D E D E D F G H ~@2 A B A B A B A B@5 ~@23>".pickRestart({
  A: "~@2 [bb3,eb4] ~@3 [bb3,eb4] ~@3 [ab3,db4] ~@3 [ab3,db4] ~", // Eb5 Db5
  B: "~@2 [ab3,db4] ~@3 [ab3,db4] ~@3 [bb3,eb4] ~@3 [bb3,eb4] ~", // Db5 Eb5
  C: "~@2 [f3,bb3,d4]!2 ~@2 [f3,bb3,d4] ~@3 [f3,bb3,d4]!2 ~@2 [f3,bb3,d4] ~", // Bb
  D: "~@2 [f3,a3,d4]!2 ~@2 [f3,a3,d4] ~@3 [g3,bb3,d4]!2 ~@2 [g3,bb3,d4] ~", // Dm Gm
  E: "~@2 [g3,bb3,d4]!2 ~@2 [g3,bb3,d4] ~@3 [f3,bb3,d4]!2 ~@2 [f3,bb3,d4] ~", // Gm Bb
  F: "~@2 [eb3,ab3,c4]!2 ~@2 [eb3,ab3,c4] ~@3 [eb3,ab3,c4]!2 ~@2 [eb3,ab3,c4] ~", // Ab
  G: "~@2 [g3,bb3,d4]!2 ~@2 [g3,bb3,d4] ~@3 [g3,bb3,d4]!2 ~@2 [g3,bb3,d4] ~", // Gm
  H: "~@2 [f3,ab3,c4]!2 ~@2 [f3,ab3,c4] ~@3 [f3,ab3,c4]!2 ~@4", // Fm
})).s("gm_shamisen").gain(0.48).pan(0.8)

// chords · electric guitar clean · "e guitar" · Ebm Fm Gb
const electric_guitar_clean = note("<~@49 [~@6 db4 eb4 [eb4,gb4] [f4,ab4]!2 [f4,ab4]@3 [gb4,bb4]@2]!4 ~@48>")
  .s("gm_electric_guitar_clean").gain(0.64).pan(0.3)

// bass · piano · "synth 2"
const bass_2 = note("<~@49 A@4 ~@10 B@2 C ~@35>".pickRestart({
  A: "[eb1,eb2]@3 ~@5 [eb1,eb2]@3 ~@5", B: "[~@15 [eb1,eb2]@17]/2", C: "bb1@7 bb1@9, bb2",
})).s("gm_piano").gain(0.72)

// bass · synth bass 1 · "syn bass"
const bass_3 = note("<~@53 A B C B D E F G H I J ~@37>".pickRestart({
  A: "bb1@3 ~@5 bb1@4 ~@4", B: "d1 ~ g1 ~", C: "g1@4 g2 f2 d2@2 bb1@4 ~@4", D: "g2 f2 d2 ~ f2@2 g2@2 bb1@3 ~@5",
  E: "d1@2 ~@2 g1@2 ~ g2", F: "g2 f2 d2 ~@5 bb1@3 ~@5", G: "d1@4 ~@4 g1@7 ~", H: "ab1@3 ~@5 ab1@3 ~@5",
  I: "g1@3 ~@5 g2 f2 d2@2 g1@3 ~", J: "f1@3 ~@5 f1@3 ~@5",
})).s("gm_synth_bass_1").gain(0.72)

// other · lead 2 sawtooth · "synth 3" · Bbsus2
const lead_2_sawtooth = note("<~@56 [~@12 d3@3 [bb2,c3]] [g2 ~@15] ~ [~@4 g2 f2 d2@2 ~@8] ~@41>")
  .s("gm_lead_2_sawtooth").gain(0.48).pan(0.2)

// other · string ensemble 2 · "slow str"
const string_ensemble_2 = note("<~@61 [c5 eb5] [g5 d5] [c5@8 eb5@7 ~] ~@37>")
  .s("gm_string_ensemble_2").gain(0.56).pan(0.9)

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

// drums · rim
const rim = s("rim").struct("<[x!4] x ~@99>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@2 A B@25 C B@3 D B@7 E B@12 F G F@5 H F@3 B I B@19 J B@14 I>".pickRestart({
  A: "~@13 x!2 ~", B: "~ x ~ x ~ x ~ x", C: "~@2 x ~@3 x ~@3 x!2 ~@2 x ~", D: "~@2 x ~@3 x ~@3 x ~ x!4",
  E: "~@2 x ~@3 x ~@3 x ~@3 x!2", F: "x!2", G: "x ~ x!2", H: "x ~@7 x ~@3 x!2 ~@2", I: "~ x ~ x ~ x ~@2",
  J: "~@2 x ~@3 x ~@3 x ~@2 x!2 ~",
})).gain(0.64)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@3 A B C ~@3 A@12 ~@8 A@12 ~@20 D ~ E ~@37>".pickRestart({
  A: "~@5 x ~@10", B: "~@5 x ~ x ~@8", C: "~@5 x ~@3 x ~@5 x", D: "~@5 x ~@2", E: "~ x ~ x ~@4",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@44 [~@7 x] ~@18 [~@6 x!2] ~ [~@14 x!2] ~@35>").gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A ~@7 A ~@5 A ~@9 B ~@3 C ~@3 A@4 D ~@21 A ~@38>".pickRestart({
  A: "~@3 x", B: "~@15 x", C: "~@5 x ~@2", D: "~@5 x!3",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@44 [~@13 x ~@2] ~@18 [~@11 x ~@4] ~ [~@13 x ~@2] ~@35>").gain(0.64)

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

// drums · high tom
const high_tom = s("ht").struct("<~@8 A ~@7 A ~@3 A ~@23 B ~@18 C ~ A ~@7 A ~@27>".pickRestart({
  A: "~@3 x", B: "~@11 x!2 ~@3", C: "~@5 x ~@2",
})).gain(0.72)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@21 A B@6 C ~@12 A D B E B@3 A F@4 ~@11 A E A B@2 D B@4 A B@2 D A B@6 D B@14 D
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!5 ~@3", D: "x!7 ~", E: "x!6 ~@2", F: "x!3 ~@5 x!3 ~@5",
})).gain(0.56)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@56 [~@12 x!4] x [~@13 x!3] x [~@13 x!3] x ~@39>").gain(0.58)

stack(
  bass, clavinet, distortion_guitar, piano, electric_guitar_muted, shamisen, electric_guitar_clean, bass_2, bass_3,
  lead_2_sawtooth, string_ensemble_2, kick, rim, snare, hihat, hihat_soft, low_tom, open_hat, mid_tom, crash, high_tom,
  ride_bell, woodblocks
)

More by Genesis