Strudelify

Throwing It All Away

Genesis

KeyD♭ majorTempo85 bpm
0:00/0:00
// Throwing It All Away — Genesis
// 85 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "XtraGtr" named as a guitar, played on electric guitar clean (its harpsichord patch is not one)
// note: duplicate parts dropped: ch 5 "Guitar" electric guitar jazz (copy of ch 2 "XtraGtr" electric guitar clean)
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(85/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · epiano1 · "PnoBs"
const epiano1 = note(`<
  A B A C A B A D E F G H A B A D E F G H I J K L I J K L M K M K N O P N Q O@3 R@3 S T U V W A B A D E F G H I J K L I
  J K@2 L R@16 X
>`.pickRestart({
  A: "db2 [ab2,f3] [bb2,gb3]@2", B: "db2 [bb2,gb3] [ab2,f3]@2", C: "db2 [bb2,gb3] [c3,ab3] [ab2,f3]",
  D: "db2 [bb2,gb3] ab2 [c3,ab3]", E: "[bb2,f3] [gb2,bb3]", F: "gb2@3 f2@2 [eb2,gb3]@3, db3@5 ~@3",
  G: "db2 [ab2,f3] [gb2,eb3]@2", H: "gb2 [bb2,gb3] [db3,f3]@2", I: "db2", J: "b1", K: "gb2", L: "ab1@7 eb2 ab2@8",
  M: "b2", N: "~ db3@2 db3, eb2", O: "~ db3@2 db3, db2", P: "~ db3@2 ~, eb2", Q: "eb2", R: "db2 db3 db2 db3",
  S: "db2 db3 f2 eb3", T: "bb1 bb2 gb2 gb3", U: "gb2 f2 eb2 ab2", V: "db2 c3 db2 db3", W: "gb2@2 db2 db3",
  X: "db2@11 ~@5",
})).s("gm_epiano1").gain(0.28).pan(0.2)

// bass · acoustic bass · "SdpBs"
const bass = note(`<
  A B A C A B A D E F G H A B A D E F G H I J K L I J K L M K M K N O P N Q O@3 R@3 S T U V W A B A D E X Y H I J K L I
  J K@2 L R@10 Z ~@6
>`.pickRestart({
  A: "db2 ab2 bb2@2", B: "db2 bb2 ab2@2", C: "db2 bb2 c3 ab2", D: "db2 bb2 ab2 c3", E: "bb2 gb2", F: "gb2@3 f2@2 eb2@3",
  G: "db2 ab2 gb2@2", H: "gb2 bb2 db3@2", I: "db2", J: "b1", K: "gb2", L: "ab1@7 eb2 ab2@8", M: "b2",
  N: "~ db3@2 db3, eb2", O: "~ db3@2 db3, db2", P: "~ db3@2 ~, eb2", Q: "eb2", R: "db2 db3 db2 db3",
  S: "db2 db3 f2 eb3", T: "bb1 bb2 gb2 ~", U: "gb2 f2 eb2 ab2", V: "db2 c3 db2 db3", W: "gb2@2 db2 db3",
  X: "gb2@3 f2@2 eb2@3, db3@5 ~@3", Y: "db2 ab2 [gb2,eb3]@2", Z: "db2 db3 db2 ~",
})).s("gm_acoustic_bass").gain(0.42).pan(0.2)

// bass · acoustic bass · "SdpBs" · soft notes
const bass_soft = note("<~@75 [~@3 db3] [db2 db3 db2 db3]!5 [db2@11 ~@5]>").s("gm_acoustic_bass").gain(0.19).pan(0.2)

// chords · lead 2 sawtooth · "Synth"
const lead_2_sawtooth = note(`<
  ~@20 A B C D A B E F G H G I J K L M J K L M ~@16 A B C D A B E@2 N O P Q R O S T U V W T X V W T U Y
>`.pickRestart({
  A: "f4 db4 f4 db4 f4 db4 f4 db4, c5@2 ab4!2", B: "gb4 eb4 gb4 eb4!2 b3 eb4 b3, db5!2 gb4!2",
  C: "eb4 bb3 db4 bb3!2 gb3 bb3 gb3, ab4@2 db4!2", D: "[db4,eb4] ab3 [db4,eb4] ab3 [db4,eb4] ab4 [db4,eb4] ab3",
  E: "db4 bb3 db4 bb3!2 gb3 bb3 gb3, ab4@2 db4!2", F: "[db4,eb4] ab3 [db4,eb4] ab3 [db4,eb4] ab3 [db4,eb4] ab3",
  G: "db4 gb3 db4 gb3 db4 gb3 db4 gb3, f4", H: "db4 gb3 db4 gb3 db4 gb3 db4 gb3, [bb3,f4]",
  I: "db4@2 gb3@2 db4@2 gb3@2 db4 ~ gb3@2 db4 ~ gb3@2, [bb3,f4]", J: "ab4", K: "bb4", L: "c5", M: "db5",
  N: "[db4,eb4] ab3 [db4,eb4] ab3 db4 ab3 db4 ab3", O: "ab3", P: "bb3@11 ~@5", Q: "c4@11 ~@5", R: "b3@11 ~@5", S: "bb3",
  T: "c4", U: "gb4@2 f4 eb4@2 db4@2 gb4!2 f4@2 ab4 gb4@2 db4@2, b3", V: "ab3@11 ~@5", W: "bb3@3 ~", X: "b3",
  Y: "db4@11 ~@5",
})).s("gm_lead_2_sawtooth").gain(0.13).pan(0.8)

// chords · electric guitar clean · "XtraGtr"
const electric_guitar_clean = note(`<
  A@3 B A@3 C D E F G A@3 C D E F G H I J K H I L M N O N O P Q R S P T R U V W V X Y Z V AA A@3 C D E F G H I J K H I
  L@2 AB AC AD R AE AC AD R AE AC AD R AE AC AD R AE AF
>`.pickRestart({
  A: "f4 gb4 f4 eb4@2 db4@2 eb4@2 ~@2 bb3 db4@2 eb4@2", B: "f4 gb4 f4 eb4@2 gb4@2 ab4@3 gb4@2 f4@2 eb4@2",
  C: "f4 gb4 f4 eb4@3 gb4 ab4 ab4@2 gb4@2 f4@2 eb4@2", D: "[bb3,db4]@2 bb3 db4@2 eb4 f4 db4@3 eb4@2 db4@2 eb4@2",
  E: "[bb3,gb4]@2 bb3 f4@2 eb4@2 db4@2 ~@2 bb3 db4@2 eb4@2", F: "f4 gb4 f4 eb4@2 db4@2 db4@2 ~@2 bb3 db4@2 eb4@2",
  G: "gb4@2 bb3 db4@2 eb4@2 db4@2 db4 eb4@2 db4@2 db4@2", H: "f4 db4 f4 db4 f4 db4 f4 db4, c5@2 ab4!2",
  I: "gb4 eb4 gb4 eb4!2 b3 eb4 b3, db5!2 gb4!2", J: "eb4 bb3 db4 bb3 db4@2 db4@2, ab4@4 bb3 ~ bb3 ~",
  K: "[db4,eb4] ~ [db4,eb4] ~ [db4,eb4] ab4 [db4,eb4] ~", L: "db4 bb3 db4 bb3 db4@2 db4@2, ab4@4 bb3 ~ bb3 ~",
  M: "[db4,eb4] ~ [db4,eb4] ~ [db4,eb4] ~ [db4,eb4] ~", N: "db4 ~ db4 ~ db4 ~ db4 ~, f4",
  O: "db4 ~ db4 ~ db4 ~ db4 ~, [bb3,f4]", P: "[f4,ab4]@2 ab4 gb4@2 f4@2 eb4@2 eb4 db4@2 ~@2 db4@2",
  Q: "ab4!2 gb4@3 f4@2 eb4@2 eb4 db4@2 ~@2 db4@2, bb3@3 ~", R: "ab4@2 ab4 gb4@2 f4@2 eb4@2 eb4 db4@2 ab4@2 db4@2, c4",
  S: "[db4,gb4]@2 f4 eb4@2 db4@2 gb4!2 f4@2 ab4 gb4@2 db4@2", // Gb5
  T: "ab4@2 ab4 gb4@2 f4@2 eb4@2 eb4 db4@2 ~@2 db4@2, bb3@3 ~",
  U: "gb4@2 f4 eb4@2 ~@2 gb4!2 f4@2 ab4 gb4@2 db4@2, db4@5 db4@9 ~@2",
  V: "f4 gb4 f4 eb4@2 db4@2 f4 [bb3,gb4]@2 bb3@2 db4@2 eb4@2", // Ebm
  W: "f4 gb4 f4 eb4@2 db4@2 gb4 f4@2 ~@2 db4@2 eb4@2, bb3 ~",
  X: "f4 gb4 f4 eb4@2 db4@2 gb4 ab4@2 gb4@2 f4 gb4 ab4@2, ~ c4",
  Y: "ab4@2 gb4 f4@2 eb4@2 db4 [bb3,db4,gb4]@8, db4@7 ~@9", Z: "[bb3,gb4]@4 f4 eb4@2 db4 eb4@2 ~ bb3 eb4@2 eb4@2",
  AA: "[bb3,db4,gb4]@2 bb3 [db4,gb4] [db4,f4]@4", AB: "[db4,eb4] ~ [db4,eb4] ~ db4 ~ db4 ~",
  AC: "f4 gb4 f4 eb4@2 db4@2 eb4@2 eb4 db4@2 ~@2 db4@2", AD: "f4 gb4 f4 gb4@2 db4@2 eb4@2 eb4 db4@2 ~@2 db4@2, bb3@3 ~",
  AE: "gb4@2 f4 eb4@2 db4@2 gb4!2 f4@2 ab4 gb4@2 db4@2, b3", AF: "db4@11 ~@5",
})).s("gm_electric_guitar_clean").gain(0.23).pan(1)

// chords · pan flute · "Shimr"
const pan_flute = note("<~@48 A B C D E F G H ~@26>".pickRestart({
  A: "f5@8 db5@7 ~", B: "[db5,gb5]@7 ~ [f5,ab5]@8", C: "db5@7 ~ [eb5,gb5]@7 ~", D: "[eb5,gb5] [f5,ab5]",
  E: "[bb4,db5]@7 ~ [db5,f5]@6 ~@2", F: "[gb5,bb5]@4 [f5,ab5]@3 ~ [db5,f5]@7 ~", G: "[bb4,db5]@7 ~ [db5,gb5]@5 ~@3",
  H: "[gb5,bb5]@7 ~ [f5,db6]@8", // Gb Db
})).s("gm_pan_flute").gain(0.51).pan(0.7)

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

// drums · snare
const snare = s("sd").struct("<~@31 A B@7 C B@7 D B@11 E B@3 E F B@11 E B G B@2 ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@5 x!3 ~@3", D: "~@4 x ~@7 x!2 ~@2", E: "~ x!3", F: "~@2 x ~ x ~@5 x!3 ~@3",
  G: "~@4 x ~@4 x ~@2 x ~@3",
})).gain(0.31).pan(0.2)

// drums · clap
const clap = s("cp").struct("<~@32 [~ x ~ x]!16 ~@17 [~ x ~ x]!16 ~>").gain(0.31).pan(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@31 [~@13 x!2 ~] ~@32 [~@7 x] x ~@16>").gain(0.36).pan(0.2)

// drums · hihat
const hihat = s("hh").struct("<A@32 B@7 C B D B C B D B E B@33 ~>".pickRestart({
  A: "x ~ x ~ x!4", B: "x!8", C: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x ~", D: "x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~",
  E: "x ~ x ~ x ~ x ~ x ~ x ~ x ~ x!2",
})).gain(0.31).pan(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<~@31 [~@4 x!2 ~@2] ~@16 x ~@15 [~ x ~ x] ~@17>").gain(0.31).pan(0.2)

// drums · high tom
const high_tom = s("ht").struct("<~@39 [~@12 x!4] ~@42>").gain(0.36).pan(0.2)

// drums · tambourine
const tambourine = s("tb").struct("<[~ x ~ x]!81 ~>").gain(0.31).pan(0.2)

// drums · crash
const crash = s("cr").struct("<~@20 A ~@7 A ~@3 A ~@7 A ~@7 A ~@7 A ~@3 A ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A>".pickRestart({
  A: "x",
})).gain(0.31).pan(0.2)

stack(
  epiano1, bass, bass_soft, lead_2_sawtooth, electric_guitar_clean, pan_flute, kick, snare, clap, low_tom, hihat,
  mid_tom, high_tom, tambourine, crash
)

More by Genesis