Strudelify

Broadway Melody of 1974

Genesis

KeyF majorTempo70 bpm
0:00/0:00
// Broadway Melody of 1974 — Genesis
// 70 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 5 "RMI Electic Piano" named as a piano, played on epiano1 (its contrabass patch is not one)
// note: duplicate parts dropped: ch 5 "RMI Electic Piano" epiano1 (copy of ch 3 "Mello Soft Strings" synth strings 1)
// note: Full arrangement: all 29 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/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.

// other · distortion guitar · "Dist Guitar"
const distortion_guitar = note("<A@2 B A@3 B A@8 B A@3 B A@6 B C ~>".pickRestart({
  A: "f3!2 ~@4 f3!2 ~@4 f3 ~@3", B: "f3!2 ~@4 f3!2 ~@4 e3 ~@3", C: "d3",
})).s("gm_distortion_guitar").gain(0.59).pan(0.2)

// chords · string ensemble 1 · "Mello Hard Strings"
const string_ensemble_1 = note("<A@3 B C@3 D E@4 F G@3 H I@2 J H K@2 L@2 M@2 N ~>".pickRestart({
  A: "[[a3,c4]@4 ~@4 f5@3 e5, [f5,a5]@2 ab5, ~ [bb3,db4]@2]/3", B: "[a3,c4,c5,f5]@15 ~",
  C: "[[a3,c4]@16 ~@16 f5@8 e5@7 ~, [f5,a5]@2 ab5, ~ [bb3,db4]@2]/3", D: "[a3,c4,c5,f5]@13 ~@3",
  E: "[[a4,c5]@2 [c5,eb5]@2 [bb4,db5]@3 [g3,bb4,eb5], f3@7 ~, a3 bb3]/2", F: "[f3,a3,a4,c5]@13 ~@3",
  G: "[[a3,c4]@4 ~@4 ab5@3 e5, f5@11 ~, a5@2 ~, ~ [bb3,db4]@2]/3", H: "[a3,c4,c5,f5]@7 ~",
  I: "[[a3,c4] [bb3,db4], [f5,a5]]/2", J: "f5@8 e5@7 ~, [bb3,db4,ab5]",
  K: "[a4@2 eb5@2 [bb4,db5]@3 [g3,bb4,eb5], f3@7 ~, [a3,c5] bb3]/2", // Bbm Eb Am
  L: "[~@8 eb5@7 ~ db5@12 [g3,eb5]@4, f3@7 ~, [a3,a4,c5] [bb3,bb4]]/2", // Cm Am Bb
  M: "[[a3,a4,c5]@12 eb5@3 ~ [f4,d5]@12 [c3,c4,g4,c5,e5]@4, f3@8 [f3,d4]@5 ~@3, ~@3 bb4@4 ~, ~@6 bb3@7 ~@3]/2", // Am Dm C Dm
  N: "[d3,d4,gb4,a4,d5], c4 ~@15", // D
})).s("gm_string_ensemble_1").gain(0.16).pan(0.9)

// chords · synth strings 1 · "Mello Soft Strings"
const synth_strings_1 = note("<A@3 B C@3 D E@2 F@2 G H@3 B C@3 B I@2 J@2 K L M ~>".pickRestart({
  A: "[c4@4 ~@7 e4, f4@11 ~, a4@2 ab4, ~ [bb3,db4]@2]/3", B: "[a3,c4,f4]@15 ~",
  C: "[c4@2 ~@3 e4, f4@5 ~, a4@2 ab4, ~ [bb3,db4]@2]/3", D: "[a3,c4,f4]",
  E: "[~@2 eb4@2 db4@3 [g3,eb4], f3@27 ~@5, [a3,c4] bb3]/2", // Cm Am
  F: "[~@2 eb4@2 db4@3 [g3,eb4], f3@27 ~@5, [a3,c4]@15 ~ bb3@15 ~]/2", G: "[f3,a3,c4]@13 ~@3",
  H: "[[c4,f4]@4 ~@4 f4@3 e4, a4@2 ab4, ~ [bb3,db4]@2]/3", // F5 Bbm
  I: "[[g3,b3] ~@7 eb4@8 db4@11 ~ [g3,eb4]@4, f3@27 ~@5, [a3,c4]@15 ~ bb3@16]/2", // G Cm Am
  J: "[~@8 eb4@7 ~ db4@12 [g3,eb4]@4, f3@27 ~@5, [a3,c4]@15 ~ bb3@16]/2", K: "~@12 eb4@3 ~, [f3,a3,c4]",
  L: "[f3,bb3,d4]@3 [g3,c4,e4]", M: "[gb3,a3,d4]",
})).s("gm_synth_strings_1").gain(0.39).pan(0.1)

// bass · electric bass pick · "Bass"
const bass = note("<A@2 B A@3 B A@8 C A@3 B A@6 D E ~>".pickRestart({
  A: "f2!2 ~@4 f2!2 ~@4 f2 ~@3", B: "f2!2 ~@4 f2!2 ~@4 e2 ~@3", C: "f2!2 ~@4 f2!2 ~@4 e2@2 ~@2",
  D: "f2!2 ~@4 f2!2 ~@4 e2@3 ~", E: "d2",
})).s("gm_electric_bass_pick").gain(0.72)

// other · overdriven guitar · "Clean Guitar"
const overdriven_guitar = note("<[f4!2 ~@4 f4!2 ~@4 f4 ~@3]!26 [f4!2 ~@4 f4!2 ~@4 e4@3 ~] d4 ~>")
  .s("gm_overdriven_guitar").gain(0.28).pan(1)

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

// drums · rim
const rim = s("rim").struct("<~@21 [~ x ~ x]!5 ~@3>").gain(0.8)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!21 ~@5 [~@2 x ~ x!2 ~@2] ~@2>").gain(0.8)

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

// drums · low tom
const low_tom = s("lt").struct("<~@26 [~@7 x] ~@2>").gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@26 [~@12 x!2 ~@2] ~@2>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@3 A ~@3 A ~@3 A@2 ~@7 A ~@5 A ~@2>".pickRestart({
  A: "~@3 x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@27 x ~>").gain(0.8)

stack(
  distortion_guitar, string_ensemble_1, synth_strings_1, bass, overdriven_guitar, kick, rim, snare, hihat, low_tom,
  mid_tom, open_hat, crash
)

More by Genesis