Strudelify

Selling the Drama

Live

KeyB minorTempo120 bpm
0:00/0:00
// Selling the Drama — Live
// 120 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · distortion guitar · "Lead Guitar"
const distortion_guitar = note(`<
  A B C B C D E F A B C B C D E F G H I J K ~@10 B C B C L E F ~ B C B C L E F G H I J K ~@12 M N O P Q R S T S U S U S
  T ~ V F W X Y Z AA ~@12 AB AC AB AC F
>`.pickRestart({
  A: "~@4 b4 c5 b4 a4", B: "[d4,g4,b4]@3 [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4]",
  C: "[d4,f#4,a4,d5]@2 ~ [d4,f#4,a4,d5,g5] ~ [d4,f#4,a4,d5] ~@2", // D
  D: "[e4,g4,b4]@3 [b4,e5,g5] ~ [b3,e4,g4,b4] ~ [b3,e4,g4,b4], b3 ~@7", // Em
  E: "[b3,d4,f#4,b4]@3 [f#4,b4,d5] ~ [b3,d4,f#4,b4] ~ [b3,d4,f#4,b4]", F: "[c4,d4,g4,c5]", G: "[c4,d4,g4,c5] ~",
  H: "[d4,a4]!4 [e4,a4]!4", I: "[f#4,a4]!4 [g4,a4]!4", J: "[d4,a4]!4 [d4,b4]!4", K: "[d4,c5]!4 [d4,d5]!4",
  L: "[b3,e4,g4,b4]@3 [b4,e5,g5] ~ [b3,e4,g4,b4] ~ [b3,e4,g4,b4]", M: "b4@3 a4@2 a4@3 a4@3 a4@2 a4@3",
  N: "b4@3 a4@2 a4@3 a4@3 b4@2 b4@3", O: "b4@3 d5@2 d5@3 d5@3 d5@2 d5@3", P: "d5@3 b4@2 b4@3 b4@3 d5@2 d5@3",
  Q: "d5@3 e5@2 e5@3 e5@3 e5@2 e5@3", R: "e5@3 e5@2 e5@3 b4@2 c5@2 b4@2 a4@2", S: "[g4,b4,d5]", T: "[d4,f#4,a4,d5]",
  U: "[d4,f#4,a4,d5]@2 ~ [d4,f#4,a4,d5,g5] ~ [d4,f#4,a4,d5] ~ [d4,f#4,a4,d5,g5]", V: "d4@3 d5 ~ g4 ~ d4",
  W: "[c4,d4,g4,c5]@4 [c4,d4,g4,c5]!4", X: "d4!4 e4!4", Y: "f#4!4 g4!4", Z: "a4!4 b4!4", AA: "c5!4 d5!4",
  AB: "[e4,g4,b4,e5]!8", AC: "[a4,c#5,e5]!8",
})).s("gm_distortion_guitar").gain(0.19)

// chords · acoustic guitar steel · "Rythm Guitar"
const acoustic_guitar_steel = note(`<
  A ~@8 B C B C D E F G H@4 I J I J I J I K L M B C B C D E F M B C B C D E F G H@4 I J I J I J I K N@2 O@2 I@2 O@2 N P
  Q R Q R Q R Q R S T F G H@4 I J I J I J I J I J I J I J I J U
>`.pickRestart({
  A: "~@4 b4 c5 b4 a4", B: "[d4,g4,b4]@3 [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4]",
  C: "[d4,f#4,a4,d5]@2 ~ [d4,f#4,a4,d5,g5] ~ [d4,f#4,a4,d5] ~@2", D: "g4@3 g5 ~ b4 ~ g4", E: "f#4@3 f#5 ~ b4 ~ f#4",
  F: "[c4,d4,g4,c5]", G: "[c4,d4,g4,c5]@4 [c4,d4,g4,c5]!4", H: "[d4,f#4,a4] [f#4,a4,d5]!3 [d4,f#4,a4] [f#4,a4,d5]!3",
  I: "[e4,g4,b4,e5]!8", J: "[a4,c#5,e5]!5 [a4,c#5,e5,c#6] [a4,c#5,e5]!2", K: "[a4,c#5,e5]!6 ~@2", L: "[c4,e4,g4,c5,d5]",
  M: "[c4,e4,g4,c5]@4 b4 c5 b4 a4", N: "[c4,e4,g4,c5]!8", O: "[d4,f#4,a4,d5]!8", P: "[c4,e4,g4,c5]!4 b4 c5 b4 a4",
  Q: "[g4,b4,d5]", R: "[d4,f#4,a4,d5]", S: "[e4,g4,b4]@3 [b4,e5,g5] ~ [b3,e4,g4,b4] ~ [b3,e4,g4,b4], b3 ~@7",
  T: "[b3,d4,f#4,b4]@3 [f#4,b4,d5] ~ [b3,d4,f#4,b4] ~ [b3,d4,f#4,b4]", U: "[c4,e4,g4,c5]",
})).s("gm_acoustic_guitar_steel").gain(0.1)

// bass · electric bass finger · "Bass Guitar"
const bass = note(`<
  ~ A B A C D E F@2 G H G I D E J K L M L N O P O P O P O P Q@2 G H G I D E Q@2 G H G I D E J K L R L N O P O P O P O P
  S@2 T@2 U V T@2 S W A B A B A B A C D E J K L M L N O P O P O P O P O P O P O P O P X
>`.pickRestart({
  A: "g1", B: "d2", C: "d2@3 d#2", D: "e2@4 ~@2 f#2@2 g2@3 f#2@2 e2 ~ d2", E: "b1@3 a1@3 b1@2",
  F: "[c2@11 ~ b1 c2 b1 a1]/2", G: "g1@3 g1@3 a1 b1", H: "d2@3 d2@3 b1 a1", I: "d2@3 d2@3 d#2@2", J: "c2!4 b1!4",
  K: "a1!4 g1!4", L: "d2!4 c2!4", M: "b1!4 a1!2 b1 c2", N: "b1!4 a1!4", O: "e1!2 e2!2 d2!2 b1!2",
  P: "a1!2 a2!2 g2!2 e2!2", Q: "[c2@12 b1 c2 b1 a1]/2", R: "b1!4 a1!2 b1 c#2", S: "c2!8", T: "d2!8", U: "e2!8",
  V: "e2!6 d#2!2", W: "c2!4 b1 c2 b1 a1", X: "c2",
})).s("gm_electric_bass_finger").gain(0.17)

// drums · kick
const kick = s("bd").struct("<~@9 A@6 B A@14 ~ A@6 B ~ A@6 B A@22 C ~@8 A@24 C>".pickRestart({
  A: "x ~@2 x ~ x ~@2", B: "x!2", C: "x",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@9 A@4 B A C A@14 ~ A@4 B A C ~ A@4 B A C A@3 B A@18 B ~@8 A@2 B A@3 B A@12 D A@4 E
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@2 x!2 ~@2 x ~", D: "x!4", E: "x",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@13 A ~@21 A ~@7 A ~@32 A ~@25>".pickRestart({
  A: "~@3 x",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@49 [~@3 x] ~@29 [~@3 x] ~@3 [~@3 x] ~@18>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@9 A@5 B@2 A@14 ~ A@5 B@2 ~ A@5 B@2 A@22 C D@8 A@24 ~>".pickRestart({
  A: "x!7 ~", B: "x!8", C: "x!3 ~@5", D: "~ x ~ x",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A@5 ~@2 A@14 ~ A@5 ~@3 A@5 ~@2 A@3 ~ A@18 B ~@8 A@2 ~ A@3 ~ A@17 ~>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4",
})).gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@49 [~@7 x] ~@29 [~@7 x] ~@3 [~@7 x] ~@17 x>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@97 [~ x!3] [x!4]!3 ~>").gain(0.4)

stack(distortion_guitar, acoustic_guitar_steel, bass, kick, snare, clap, low_tom, hihat, open_hat, high_tom, crash)

More by Live