Strudelify

Midnight Confession

The Grass Roots

KeyB♭ majorTempo133 bpm
0:00/0:00
// Midnight Confession — The Grass Roots
// 133 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// 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(133/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B C D@2 E F G H I J K L M N O P Q P O P Q P R S T U V W T U V X Y A B C D@2 G H I J K L M N O P Q P O P Q P R S V
  Z AA U V Z AA U AB AC T U V W T U V AD AE ~@4 O P Q P O P Q P V Z AA U V Z AA U V Z AA AF
>`.pickRestart({
  A: "c2@3 ~ c2@2 g2 ~ bb2@2 c3@2 bb2@2 g2 ~", B: "ab1@5 ~ bb1@8 ~@2", C: "c2@3 ~ c2@2 g2 ~ bb2@2 c3 ~ bb2@2 g2 ~",
  D: "[ab1@5 ~ bb1@5 ~ db2@12 ~@8]/2", E: "db2@3 ~ db2@3 ~ db2@2 db2@2 db2@3 ~", F: "db2@3 ~ db2@4 db2 ~ db2@2 db2@3 ~",
  G: "c3@3 ~ c3@3 bb2 g2@2 c3 ~ c3 bb2 g2 ~", H: "c3@3 ~ c3@3 bb2 g2@2 c3 ~ bb2 g2 bb2 ~",
  I: "bb2@3 ~ bb2@2 ~ g2 f2 ~ bb2 ~ g2 f2 g2 ~", J: "bb2@3 ~ bb2@3 g2 f2 ~ bb2@2 g2 f2 g2 ~",
  K: "d3@3 ~ d3@3 c3 a2@2 d3 ~ d3 c3 a2 ~", L: "d3@3 ~ d3@3 c3 a2 ~ d3 ~ d3 c3 a2 ~",
  M: "g2@2 g3 ~@3 f3@2 eb3@2 d3@2 c3@2 bb2 ~", N: "f2@2 f3 ~@3 c3@2 bb2 ~ a2@2 g2@2 f2 ~",
  O: "bb2@2 g2@2 f2@2 g2 ~ bb2@2 g2@2 f2@2 g2 ~", P: "f2@2 d2@2 c2@2 d2@2 f2@2 d2@2 c2@2 d2 ~",
  Q: "c3@2 bb2@2 g2@2 bb2 ~ c3@2 bb2@2 g2@2 bb2 ~", R: "f2 ~ f2 ~ f2 ~ f2@2 f2 ~ f2 ~ f2@2 f2 ~", S: "f2 ~@7",
  T: "ab2@3 ~ ab2@2 ~ f2 eb2 ~ ab2 ~ f2 eb2 f2 ~", U: "eb2@3 ~ eb2@3 c2 bb1 ~ eb2@2 c2 bb1 c2 ~",
  V: "bb2@3 ~ bb2@3 g2 f2@2 bb2@2 g2 f2 g2 ~", W: "f2@3 ~ f2@3 d2 c2@2 f2 ~ d2 c2 d2 ~",
  X: "g2@3 ~ g2@2 ~ f2 d2@2 g2@2 f2 d2 f2 ~", Y: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~",
  Z: "f2@3 ~ f2@3 d2 c2 ~ f2 ~ d2 c2 d2@2", AA: "ab2@3 ~ ab2@3 f2 eb2 ~ ab2 ~ f2 eb2 f2 ~",
  AB: "bb2 ~ bb2 ~ bb2 ~ bb2@2 bb2 ~ bb2@2 bb2@2 bb2 ~", AC: "bb2@2 bb2@2 bb2@2 bb2@2 bb2@2 bb2 ~ bb2 ~ bb2 ~",
  AD: "g2@2 g2@2 g2@2 g2 ~ g2 ~ g2 ~ g2@2 g2@2", AE: "g2 ~ g2@2 g2@2 g2@2 g2@2 g2@2 g2@2 g2 ~",
  AF: "eb2 ~ eb2@2 ~@2 eb2@2 ~@2 bb1@2 eb2@2 ~@2",
})).s("gm_acoustic_bass").gain(0.64)

// chords · drawbar organ · "ORGAN 1"
const drawbar_organ = note(`<
  ~@2 A ~ B@2 ~@2 C@2 D@2 E@2 F G H I J G H I J K@2 ~ L M N I L M N O@2 ~ A ~ B@2 P Q R S T U V W H I J G H I J K@2 ~ H
  G L X H G L X D@2 L M N I L M N O@2 Y Z AA AB H I J G H I J G H G L X H G L X H G L AC
>`.pickRestart({
  A: "[c4,eb4,ab4]@5 ~ [d4,f4,bb4]@8 ~@2", B: "[[c4,eb4,ab4]@4 ~@2 [d4,f4,bb4]@4 ~@2 [f4,ab4,db5]@17 ~@3]/2",
  C: "[[c5,eb5,g5]@31 ~]/2", D: "[[bb4,d5,f5]@31 ~]/2", E: "[[f4,a4,d5]@31 ~]/2", F: "[g4,bb4,d5]@15 ~",
  G: "[a4,c5,f5]@15 ~", H: "[bb4,d5,f5]@15 ~", I: "[a4,c5,f5]@7 ~", J: "[c5,eb5,g5]@7 ~", K: "[a4,c5,f5]/2",
  L: "[c5,eb5,ab5]@15 ~", M: "[bb4,eb5]@15 ~", N: "[d5,f5]@15 ~", O: "[[b4,d5,g5]@31 ~]/2",
  P: "g5@3 ~ c5@2 g5@2 eb5@2 c5@2 g5@2 c5@2", Q: "g5 eb5 c5 g5 eb5 c5 g5 c5", R: "f5 d5 ~ f5 d5 ~ f5 bb4",
  S: "f5 d5 bb4 f5 d5 bb4 f5 bb4", T: "a5@3 ~@3 a5@2 f5@2 ~@2 a5@2 d5@2", U: "a5@2 f5@2 ~@4 f5@2 d5@2 a5@2 d5 ~",
  V: "bb5@2 g5@2 d5@2 bb5@2 g5@2 d5@2 bb5@2 d5 ~", W: "a5@2 f5@2 c5@2 a5@2 f5@2 c5@3 ~ f5 ~", X: "[bb4,g5]@15 ~",
  Y: "bb5@2 f5@2 d5@2 ~@2 f5@2 d5@2 bb5@2 d5 ~, ~@3 bb5@2 ~@3", Z: "a5 f5 c5 ~ f5 c5 ~ c5",
  AA: "~@6 g5@3 ~ c5@2 eb5@2 c5@2", AB: "~@4 c5@2 a5@2 f5@2 c5@2 a5@2 f5 ~",
  AC: "[bb4,eb5,g5]@4 ~@2 [bb4,eb5,g5]@2 ~@2 [bb4,eb5,g5] ~ [bb4,eb5,g5] ~@3", // Eb
})).s("gm_drawbar_organ").gain(0.36)

// chords · drawbar organ · "ORGAN 1" · soft notes
const drawbar_organ_soft = note(`<
  ~@27 A B ~@2 A B ~@7 C ~ D ~ E F ~ G ~@13 H ~@3 H ~@3 A B ~@2 A B ~@3 I J K ~@11 H ~@3 H ~@4
>`.pickRestart({
  A: "g5@7 ~", B: "bb4@15 ~", C: "~ eb5 ~@6", D: "~@2 bb4 ~@2 bb4 ~@2", E: "~@2 f5@2 d5@3 ~@3 d5@2 ~@4",
  F: "~@4 d5@2 a5@3 ~@7", G: "~@12 a5@3 ~", H: "eb5@15 ~", I: "~@6 a5@3 ~@3 a5@2 ~@2", J: "g5 eb5 c5 ~ eb5 ~@3",
  K: "a5 f5 ~@6",
})).s("gm_drawbar_organ").gain(0.18)

// chords · synth brass 1 · "SYNBRASS 1"
const synth_brass_1 = note(`<
  ~@2 A ~ B@2 ~@8 C D E F G H E F G H I J ~@4 K L@2 M@2 ~ N ~ O@2 ~ P Q@2 R@2 C D E F G H E F G H I J S T U V S T U V
  W@2 ~@4 K L@2 M@2 ~@4 E F G H E F G H S T U V S T U V S T U X
>`.pickRestart({
  A: "[c5,eb5,ab5]@5 ~ [d5,f5,bb5]@8 ~@2", B: "[[c5,eb5,ab5]@4 ~@2 [d5,f5,bb5]@4 ~@2 [f5,ab5,db6]@17 ~@3]/2",
  C: "[bb4,bb5] [a4,a5] [g4,g5] [bb4,bb5]@4 ~", D: "[c5,c6]@2 [bb4,bb5]@2 [a4,a5]@2 [c5,c6]@7 ~@3",
  E: "[d4,f4,bb4,d5,f5,bb5]@15 ~", F: "[c4,f4,a4,c5,f5,a5]@7 ~ [bb4,bb5]@2 ~@2 [c5,c6]@2 ~@2",
  G: "[c4,eb4,g4,c5,eb5,g5]@15 ~", H: "[a4,a5]@8 [bb4,bb5]@3 ~ [c5,c6]@2 ~@2",
  I: "[c5,c6] [bb4,bb5] [a4,a5] [c5,c6] [bb4,bb5] [a4,a5] [c5,c6] [bb4,bb5]", J: "[a4,a5] ~@15", K: "[c5,c6]",
  L: "[[eb5,eb6]@8 [bb4,bb5]@21 ~ [c5,c6]@2]/2", M: "[d5,d6]/2",
  N: "[c4,eb4,ab4,c5,eb5,ab5]@5 ~ [d4,f4,bb4,d5,f5,bb5]@8 ~@2", // Ab Bb
  O: "[[c4,eb4,ab4,c5,eb5,ab5]@4 ~@2 [d4,f4,bb4,d5,f5,bb5]@4 ~@2 [f4,ab4,db5,f5,ab5,db6]@17 ~@3]/2", // Ab Bb Db
  P: "~@8 g3@3 ~ c4@3 ~", Q: "[bb3@21 ~@3 f3@3 ~ bb3@3 ~]/2", R: "[d4@29 ~@3]/2",
  S: "~@4 [f4,bb4,d5,f5] ~@3 f4@2 [bb4,d5] ~@3 [f4,a4,c5,f5] ~, ~@2 f5 ~, ~@5 f4 ~@2", // Bb F
  T: "~ [a4,c5,f5] ~ [f4,a4,c5,f5] [g4,g5]@2 [a4,c5,f5] ~, ~@2 f4 ~@9 f4 ~@3", // F G F
  U: "~@4 [eb4,ab4,c5,eb5,ab5,c6]@2 ~@2 [eb4,ab4,c5,c6] ~ [eb4,ab4,eb5,ab5] ~@3 [bb4,eb5,bb5]@2, ~@8 [eb5,ab5]@2 [c5,c6]@2 ~@2 g5 ~", // Ab Ab5 Eb5 Ab5 C
  V: "~@2 [bb4,eb5] ~@3 [g4,bb4,eb5]@2 ~@2 [bb4,eb5] ~ [eb5,g5] ~@3, ~ g5 ~@3 g5 bb5 ~", W: "[[bb4,d5,f5,bb5]@15 ~]/2",
  X: "~@2 [bb4,eb5]@2 ~@2 [g4,bb4,eb5]@2 ~@2 [bb4,g5] ~ [eb5,g5,bb5]@2 ~@2, ~@2 g5 ~@7 eb5@2 ~@4", // Eb5 Eb
})).s("gm_synth_brass_1").gain(0.56)

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

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

// drums · clap
const clap = s("cp").struct("<~@8 A@17 B A@9 ~@5 A@17 B A@19 ~@4 A@20>".pickRestart({
  A: "~ x ~ x", B: "x",
})).gain(0.71)

// drums · low tom
const low_tom = s("lt").struct("<~@25 x ~@31 x ~@18 [~ x] ~@23 [~@3 x]>").gain(0.71)

// drums · hihat
const hihat = s("hh").struct("<~ A@2 B A@21 C A@11 B A@19 C A@19 D@4 A@20>".pickRestart({
  A: "x!4", B: "x ~ x!2", C: "~ x!3", D: "x!8",
})).gain(0.71)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2 A@2 B@11 A B A B A B A B A B ~ B@9 ~ A@2 B@9 A B A B A B A B A B ~ B A B A B A B A B A B@8 A ~@4 B A B A B A B A B
  A B A B A B A B A B C
>`.pickRestart({
  A: "~ x ~ x ~ x ~@2", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~@4",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 A ~@9 A ~@21 A ~@19 B ~@22 C D>".pickRestart({
  A: "~@14 x!2", B: "~@6 x!2 ~@8", C: "~@7 x", D: "~ x ~ x ~ x ~@2",
})).gain(0.71)

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

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

// drums · tambourine
const tambourine = s("tb").struct("<~@16 A@9 ~@9 A ~@13 A@9 ~ A@10 ~@13 A@19 B>".pickRestart({
  A: "x!16", B: "x!13 ~@3",
})).gain(0.5)

stack(
  bass, drawbar_organ, drawbar_organ_soft, synth_brass_1, kick, snare, clap, low_tom, hihat, hihat_soft, mid_tom,
  open_hat, crash, tambourine
)

More by The Grass Roots