Strudelify

All Eyes

Heart

KeyD♭ majorTempo149 bpm
0:00/0:00
// All Eyes — Heart
// 149 bpm, 4/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 135 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): guitar extd..
setcpm(149/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 pick · "bass"
const bass = note(`<
  ~@9 A B C D A B E F G H I J G H I J K@2 L M K@2 L M N@2 A B C D A B E F G H I J G H I J K@2 L M K@2 L M N@2 A B C D A
  B E O A B C D A B P Q R@2 S N R@2 S N R@2 S N R@2 S N T U ~@7 V A B C D A B E O A B C D A B E F A W C X A W E Y A W C
  X A W E Y
>`.pickRestart({
  A: "db2@4 db2 db2@3", B: "eb2@3 ab1@5", C: "db2@3 gb1@3 bb1@2", D: "ab1@12 ~@2 db2!2", E: "gb1", F: "ab1",
  G: "ab1 bb1!3 bb1@4", H: "~@4 ab1 bb1 bb1@2", I: "f1 gb1!3 gb1@2 ~@2", J: "~@3 gb1 ~ gb1 ~@2",
  K: "ab1@2 ab1@2 ab1!2 ab1@2", L: "bb1@3 bb1@2 bb1 bb1@2", M: "gb1@3 gb1@2 gb1 gb1@2", N: "gb1!8", O: "ab1@14 db2!2",
  P: "gb1@3 gb1@5", Q: "ab1@3 ab1@5", R: "ab1!8", S: "bb1!8", T: "gb2@7 db3", U: "gb3", V: "~ ab1 ab1@2 ab1!4",
  W: "db2@3 ab1@5", X: "ab1@4 ab1@4 ab1@6 db2!2", Y: "ab1@2 ab1!2",
})).s("gm_electric_bass_pick").gain(0.4)

// chords · distortion guitar · "guitar 1"
const distortion_guitar = note(`<
  A B C D E B F G H I H J H I H K L M N O ~ M N O P Q@2 R S Q@2 T U V W I H J H I H X Y M N O ~ M N O P Q@2 R S Q@2 T U
  V W I H J H I H K Y I Y Z H I Y K AA Q@2 R AB Q@2 R AB Q@2 R AB Q@2 AC AD AE AF B AG J AH AI AJ AK AL I H J H I H K Y
  I Y Z H I Y K AM I Y J H I Y J H I Y J H I Y J H
>`.pickRestart({
  A: "~@14 [ab3,db4]!2", B: "[ab3,db4]@14 [ab3,eb4]!2", C: "[ab3,eb4]@14 [ab3,db4]!2",
  D: "[ab3,db4]@3 [db4,gb4]@3 [db4,f4] ab3", E: "[ab3,eb4,ab4]@14 [ab3,db4]!2", F: "[ab3,eb4]@14 [ab3,db4,gb4]!2",
  G: "[ab3,db4,gb4]@3 [db4,gb4,bb4]@3 [db4,f4] ab3", H: "[ab3,eb4,ab4]@14 [ab3,db4,ab4]!2",
  I: "[ab3,db4,ab4]@14 [ab3,eb4,ab4]!2", J: "[ab3,db4,ab4]@3 [ab3,db4,gb4]@3 [db4,f4] ab3",
  K: "[db4,ab4] db4!2 [db4,gb4]!3 [db4,f4] ab3", L: "[ab3,eb4,ab4]@3 ~", M: "[ab2,eb3] [bb2,f3]!3 [bb2,f3]@3 ~",
  N: "~@4 [ab2,eb3] [bb2,f3] [bb2,f3]@2", O: "[f2,c3] [gb2,db3]!3 [gb2,db3]@2 ~@2", P: "~@6 db4 ab3", Q: "[ab3,db4]/2",
  R: "ab4 db4!2 gb4 db4!2 f4 ab3", S: "ab3!3 eb4 ab3!2 eb4 f4", T: "ab4 db4!2 gb4 db4!2 f4 db4",
  U: "ab3!3 eb4 [ab3,eb4]!4", V: "[ab3,db4]!3 [ab3,eb4]!4 [db4,ab4]", W: "[db4,ab4]",
  X: "[db4,ab4] db4 [db4,ab4] [db4,gb4]!3 [db4,f4] ab3", Y: "[ab3,eb4,ab4]",
  Z: "[ab3,db4,ab4]@3 [ab3,db4,gb4]@3 [ab3,db4,f4] ab3", AA: "[ab3,eb4,ab4]@3 [ab3,eb4,ab4]@5",
  AB: "[ab3,db4]!3 [ab3,eb4]!5", AC: "ab4 ab3 ab4 gb4!3 f4 ab3", AD: "[ab3,db4] ab3 [ab3,db4] [ab3,eb4]@4 ab3",
  AE: "[ab3,db4] ab3 [ab3,db4] [ab3,eb4]@4 ab4", AF: "[ab4,db5] ab4 db5 [ab4,eb5]@4 [ab3,db4]",
  AG: "[ab3,eb4]@14 [ab3,db4,ab4]!2", AH: "[ab3,eb4]@14 [ab3,db4,f4]!2", AI: "[ab3,db4,f4]@14 [ab3,eb4,ab4]!2",
  AJ: "[ab3,eb4,ab4]@7 db4", AK: "[db4,ab4] db4 [db4,ab4] [db4,gb4] db4!2 [ab3,eb4] ~", AL: "~ [ab3,eb4,ab4]!7",
  AM: "[ab3,db4,ab4]@14 [ab3,db4,ab4]!2", // Db5
})).s("gm_distortion_guitar").gain(0.52)

// other · overdriven guitar · "guitar 3"
const overdriven_guitar = note("<~@85 [~ ab5!4 eb5!4 ab5!4 eb5!3] [eb5 ab5!4 eb5!4 ab5!4 eb5!3]!6 ~@43>")
  .s("gm_overdriven_guitar").gain(0.27)

// chords · string ensemble 2 · "synth."
const string_ensemble_2 = note(`<
  ~@9 A B A B A B C B ~@18 A B A B A B C B ~@18 A B A B A B C B A B A B A B C B ~@26 A B A B A B C B A B A B A B C D A B
  A B A B C B A B A B A B C B
>`.pickRestart({
  A: "[db4,ab4,db5]", B: "[ab3,eb4,ab4]", C: "[db4,gb4,db5]", D: "[ab3,eb4,c5]",
})).s("gm_string_ensemble_2").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A@7 B C D E F C D E F A@9 B A@7 G C D E F C D E F A@9 B A@7 B A@2 B A@4 H A@7 B A@9 B I ~@7 A@7 B A@2 B A@4 H A@7
  B A@7 B
>`.pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x!2", C: "x!2 ~@2 x ~@3", D: "~@4 x!2 ~@2", E: "x ~@2 x!2 ~@3", F: "x ~@2 x!3 ~@2",
  G: "x ~@3 x!2 ~ x", H: "x ~@2 x ~ x ~@2", I: "x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@5 A@3 B A@7 C A@17 C A@7 D A@17 C A@7 E A@7 F A@7 G A@9 H ~@4 A@3 I A@7 E A@7 F A@7 H A@7 H
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2", C: "~@4 x ~@5 x ~ x ~ x!2", D: "~@4 x ~@7 x!2 ~@2", E: "~@2 x ~@3 x!2",
  F: "~@4 x ~@3 x!2 ~@2 x!4", G: "~@4 x ~@5 x!6", H: "~@2 x ~@2 x!2 ~", I: "~@2 x ~ x ~@3 x ~ x ~ x!4",
})).gain(0.4)

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

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

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

stack(bass, distortion_guitar, overdriven_guitar, string_ensemble_2, kick, snare, hihat, open_hat, crash)

More by Heart