Strudelify
Tell Me Why cover art

1991 · We Can't Dance

Tell Me Why

Genesis

KeyB minorTempo120 bpm
0:00/0:00
// Tell Me Why — Genesis
// 120 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 153 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B C D E F G H A B C D E F G H A B C D E F G H I H I H I H I J ~@8 A B C D E F G H A B C D E F G H I H I H I H I J
  ~@8 K@2 ~ L M@2 N@2 O P Q R S T U V A B C D E F G H A B C D E F G H I H I H I H I J ~@8 A B C D E F G H A B C D E F G
  H A B C D E F W ~@9
>`.pickRestart({
  A: "[e4,g4,b4,d5] ~@3 [e4,g4,b4,d5]@2 ~@2 [e4,g4,b4] ~@3 [e4,g4,b4] ~@3, ~@4 d5 ~ d5 ~", // Em7 Em
  B: "[e4,g4,b4,c#5]@2 ~@2 [e4,g4,b4] ~@3 [e4,g4,b4,c#5]@2 ~@2 [e4,g4,b4,c#5]@2 ~@2, ~@2 c#5 ~@5", // C#m7b5 Em C#m7b5
  C: "[e4,g4,d5]@2 ~@2 [e4,g4,b4] ~@3 [e4,g4,d5]@2 ~@2 [e4,g4,b4] ~@3, b4 ~@3 d5@2 ~@2 b4 ~@3 d5@2 ~@2", // Em7 Em Em7 Em
  D: "[e4,g4,b4,c#5]@2 ~@2 [e4,g4,b4,c#5] ~@3 [e4,g4,b4,c#5] ~@3 [e4,g4,b4,c#5]@2 ~@2", // C#m7b5
  E: "[f#4,b4,d5]@2 ~@2 [f#4,b4,d5] ~@3 [f#4,a4,c#5,d5]@2 ~@2 [f#4,a4,c#5,d5]@2 ~@2", // Bm Dmaj7
  F: "[f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~ [f#4,b4,d5] ~", // Bm
  G: "[g4,b4,d5]@2 ~@2 [g4,d5]@3 ~ [g4,a4,c#5,d5]@2 ~@2 [g4,a4,c#5,d5]@2 ~@2, ~@4 b4 ~@11", // G G5 Gsus2
  H: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // G
  I: "[f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~ [f#4,a4,d5] ~", J: "[g4,b4,d5]@2 ~@2 [g4,b4,d5]@11 ~",
  K: "[d4,f#4,a4]/2", L: "~@6 [d4,g4,b4] ~", M: "[[d4,f#4,a4]@13 ~ [d4,g4,b4] ~]/2",
  N: "[[d4,f#4,a4]@26 ~@2 [d4,g4,b4]@3 ~]/2", O: "[d4,f#4,a4]@15 ~",
  P: "[c4,e4,g4,a4]@2 ~@2 [c4,e4,g4,a4] ~@3 [c4,e4,g4,a4]@2 ~@2 [c4,e4,g4,a4]@2 ~@2", // Am7
  Q: "[b3,d4,f#4,a4] ~ [b3,d4,f#4,g4] ~ [b3,d4,f#4,g4] ~ [b3,d4,f#4,g4] ~", // Bm7 Gmaj7
  R: "[b3,d4,f#4,a4] ~ [b3,d4,f#4,a4] ~ [b3,d4,f#4,a4] ~ [b3,d4,f#4,a4] ~", // Bm7
  S: "[a3,c4,e4,a4] ~ [a3,c4,e4,a4] ~ [a3,c4,e4,a4] ~ [a3,c4,e4,a4] ~", // Am
  T: "[g3,c4,e4,g4] ~ [g3,c4,e4,g4] ~ [g3,c4,e4,g4] ~ [g3,c4,e4,g4] ~, a3 ~@15", // C
  U: "[c4,e4,g4,b4] ~ [c4,e4,g4,b4] ~ [c4,e4,g4,b4] ~ [c4,e4,g4,b4] ~", // Cmaj7
  V: "[c4,e4,f#4,a4] ~ [c4,e4,f#4,a4] ~ [c4,e4,f#4,a4] ~ [c4,e4,f#4,a4] ~", // F#m7b5
  W: "[g4,b4,d5]@2 ~@2 [g4,d5]@3 ~@9, ~@4 b4 ~@11", // G G5
})).s("gm_piano").gain(0.33)

// bass · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  ~ A B C D E F G H A B C D E F G H A B C D E F G H I J K L M N O P Q R S T U V W X A B C D E F G H A B C D E F G H I J
  K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF Y AG AH@2 AG@2 AI AJ A B C D E F G H A B C D E F G H I J K L M N O P
  Q R S T U V W X A B C D E F G H A B C D E F G H A B C D E F G ~@9
>`.pickRestart({
  A: "e2@3 ~@3 e2 ~ e2@4 ~@2 e2 ~", B: "e2@3 ~@3 e2 ~ e2@2 b1@2 d2@2 d#2@2", C: "e2@4 ~@2 e2 ~ e2@4 ~@4",
  D: "e2@4 ~@2 e2 ~ e2 ~ e2@2 d2@2 c#2@2", E: "b1@3 ~@3 b1 ~ b1@4 ~@2 b1 ~", F: "b1@4 ~@2 b1@2 ~@2 b1 ~ f#1@3 ~",
  G: "g1@3 ~@3 g1 ~ g1@5 ~@3", H: "g1@2 ~ g1 ~ c#2 d2 d#2", I: "b1 ~ b1 ~ a1 ~ a1 ~", J: "g1 ~ g1 ~ g1 ~ g1 a1",
  K: "b1@2 ~@2 b1@2 ~@2 a1@3 ~ a1@2 ~@2", L: "g1 ~ g1 ~ g1 b1!2 d2", M: "d2 ~ d2 a1 d2 ~ d2 a1",
  N: "d2@2 ~@2 d2@3 ~ d2@2 a1@2 d2@2 a1@2", O: "d2 ~ d2 d3 d2 ~ d2 ~", P: "d2@2 ~@2 d2@2 ~@2 g1@2 a1@5 ~",
  Q: "e1@4 ~@2 e1 ~ e1@6 ~@2", R: "e1@5 ~ e1 ~ e1@4 ~@2 e1@2", S: "f#1@5 ~ f#1 ~ f#1@5 ~ f#1 ~",
  T: "f#1@5 ~ f#1 ~ f#1@4 ~@2 f#1@2", U: "g1@5 ~ g1 ~ g1@4 d2@2 g2@2", V: "g1@4 ~@2 g1 ~ g1@5 ~ g1 ~",
  W: "a1@5 ~ a1 ~ a1@4 e2@2 a2@2", X: "a1!2 e2 a1 d2 d#2 e2 a1", Y: "d2@10 d2@5 ~", Z: "d2@9 ~ d2@2 a2@2 d3@2",
  AA: "d2@3 d2@5", AB: "~ d2@4 f#2 g2 a2", AC: "d2@9 ~ d2@6", AD: "d2@5 a2 d3 d2", AE: "d2@3 a2@2 d2@3",
  AF: "~ g2 d2 g#2 d2 a2@2 d3", AG: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~",
  AH: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~", AI: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  AJ: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ b1 ~ a1@2 g1@2",
})).s("gm_synth_bass_2").gain(0.47)

// chords · lead 3 calliope · "CALLIOPE"
const lead_3_calliope = note(`<
  ~ A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 D E D E F G F H I@2 J@2 K@2 L@2 A@4 B@2 C@2 A@4 B@2 C@2 D E D E F G F H I@2 J@2
  K@2 L@2 ~@4 M@5 N O P Q R S T A@4 B@2 C@2 A@4 B@2 C@2 D E D E F G F H I@2 J@2 K@2 L@2 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2
  U@8 ~@2
>`.pickRestart({
  A: "[d5@15 ~ c#5@15 d5@16 c#5@16 ~, [g4,b4]]/4", B: "[b4@7 ~ a4@8 [f#4,b4]@15 ~, d5, ~@7 c#5@9 ~@16]/2",
  C: "[b4 [a4,c#5] b4@2, [g4,d5]]/2", D: "[f#4,a4]", E: "[g4,b4]", F: "f#4@7 ~ [e4,c#5]@8, a4@15 ~",
  G: "[d4,b4] b4, g4@7 ~", H: "[d4,g4,b4]@15 ~", I: "[d5@4 c#5@4 d5@4 e5 c#5@2 b4, [e4,g#4]]/2",
  J: "[d5@7 c#5@8 ~ d5@8 e5@2 c#5@4 a4@2, f#4, a4@7 ~]/2", K: "[d5@8 c#5@8 d5@8 e5@2 c#5@3 ~ b4@2, g4, b4@29 ~ a4 ~]/2",
  L: "[f#5 e5 f#5 g5, [a4,c#5]@31 ~]/2", M: "[a3,a4]/5", N: "[c4,e4,g4,a4]@5 ~ [c4,e4,g4,a4]@9 ~",
  O: "[b3,e4,f#4,g4]@2 ~ [b3,d4,f#4,g4]@4 ~", P: "[b3,d4,f#4,a4]@3 ~@3 [b3,d4,f#4,a4]@8 ~@2",
  Q: "[a3,c4,e4,a4]@2 ~ [a3,c4,e4,a4]@4 ~", R: "[g3,c4,e4,g4]@2 ~ [g3,c4,e4,g4]@4 ~",
  S: "[c4,e4,g4,b4]@2 ~ [c4,e4,g4,b4]@4 ~", T: "[c4,e4,f#4,a4]@4 ~@2 [c4,e4,f#4,a4]@9 ~",
  U: "[b4 [a4,c#5] ~@14, [g4,d5]]/8", // A G5
})).s("gm_lead_3_calliope").gain(0.16).pan(0.3)

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A B C D E F G@2 A B C D E F G@2 A B C D E F G@2 H@2 I@2 J@2 K@2 L M N O P Q R S A B C D E F G@2 A B C D E F G@2 H@2
  I@2 J@2 K@2 L M N O P Q R S T@2 U@2 T@2 U@2 V W X Y Z AA AB AC AD AE AF AG AH@2 AI AJ A B C D E F G@2 H@2 I@2 J@2 K@2
  L M N O P Q R S A B C D E F G@2 A B C D E F G@2 A B C D E F AK@2 ~@8
>`.pickRestart({
  A: "[g4,g5]@2 ~ [a4,a5]@2 ~ [b4,b5]@2 [a4,a5]@2 ~ [g4,g5]@2 ~ [f#4,f#5]@2", // G A B A G F#
  B: "[g4,g5]@3 [a4,a5]@3 [g4,g5]@2 [f#4,f#5]@4 [e4,e5]@3 ~", // G A G F# E
  C: "[g4,g5]@3 [a4,a5]@2 ~ [b4,b5]@2 [a4,a5]@2 ~ [g4,g5]@2 ~ [f#4,f#5]@2", // G A B A G F#
  D: "[g4,g5]@3 [a4,a5]@2 ~ [g4,g5]@2 [f#4,f#5]@4 [e4,e5]@2 [d4,d5]@2", // G A G F# E D
  E: "~@4 [e4,e5]@2 [f#4,f#5]@5 ~ [f#4,f#5]@2 [d4,d5]@2, [b3,b4], ~@2 [d4,d5]@11 ~@3", // E F# D B D
  F: "[d4,d5]@2 [e4,e5]@9 ~ [f#4,f#5]@3 ~", // D E F#
  G: "[~@9 [e4,e5]@6 ~, ~ [b3,b4]@5 [b3,b4]@8 ~@2, ~@2 [d4,d5]@5 [d4,d5]@7 ~@2, ~@3 [f#4,f#5]@11 ~@2]/2", // E B D F#
  H: "[[d4,d5]@2 ~@2 [d4,d5]@2 ~@4 [d4,d5]@2 [c#4,c#5]@2 [d4,d5]@11 ~ [d4,d5]@2 [c#4,c#5]@2 [d4,d5]@2]/2", // D C# D C# D
  I: "[[d4,d5] ~ [d4,d5] ~@2 [d4,d5] [c#4,c#5] [d4,d5]@5 ~ [d4,d5] [c#4,c#5] [d4,d5]]/2", // D C# D C# D
  J: "[[d4,d5]@2 ~@2 [d4,d5]@2 ~@4 [e4,e5]@2 [c#4,c#5]@2 [d4,d5]@11 ~ [e4,e5]@2 [c#4,c#5]@2 [d4,d5]@2]/2", // D E C# D E C# D
  K: "[[d4,d5]@2 ~@2 [d4,d5]@3 ~@3 [e4,e5]@2 [c#4,c#5]@2 [d4,d5]@10 ~@8]/2", // D E C# D
  L: "[e4,g#4,d5,d6]@5 ~ [e4,g#4,d5,d6]@2 [e4,g#4,c#5,c#6]@6 [c#5,c#6]@2", // E7 C#m C#
  M: "[e4,g#4,d5,d6]@4 ~@2 [e4,g#4,d5,d6]@2 e6@2 [c#5,c#6]@2 [a4,a5]@3 ~, ~@4 [e4,g#4]@3 ~", // E7 C# A E
  N: "[f#4,a4,d5,d6]@2 ~ [f#4,a4,d5,d6] [f#4,a4,c#5,c#6]@3 [c#5,c#6]", // D F#m C#
  O: "[f#4,a4,d5,d6]@4 ~@2 [f#4,a4,d5,d6]@2 [e5,e6]@2 [c#5,c#6]@2 a5@3 ~, ~@4 f#4@3 ~, ~@8 a4@4 a4 ~@3", // D E C#
  P: "[g4,b4,d5,d6]@2 ~ [g4,b4,d5,d6] [g4,b4]@3 [c#5,c#6], ~@2 [c#5,c#6] ~", // G C#
  Q: "[g4,b4,d5,d6]@4 ~@2 [g4,b4,d5,d6]@2 [e5,e6]@2 [c#5,c#6]@2 [a4,a5]@3 ~, ~@8 [g4,b4]@5 ~@3", // G E C# A G
  R: "[a4,c#5,f#5,f#6]@5 ~ [a4,c#5,f#5,f#6]@2 [a4,c#5,e5,e6]@6 e5 e6", // F#m A
  S: "[a4,c#5,f#5,f#6]@5 ~ [a4,c#5,f#5,f#6]@2 [a4,c#5,g5,g6]@3 ~ [a4,c#5,g5,g6]@3 ~", // F#m A7
  T: "[[f#4,f#5]@2 [d4,d5] [g4,g5]@2 [f#4,f#5] [d4,d5] [c4,c5]@2 [g4,g5] [b3,b4] [g4,g5] [a3,a4]!2 [b3,b4] [d4,d5]]/2", // F# D G F# D C G B …
  U: "[[f#4,f#5]@2 [d4,d5] [g4,g5]@2 [f#4,f#5] [d4,d5] [c4,c5]@2 [d4,d5] [d4,d5]@3 [a3,a4] [b3,g4,b4,g5] [d4,d5]]/2", // F# D G F# D C D A …
  V: "[f#4,f#5]@4 [d4,d5]@2 [g4,g5]@4 [f#4,f#5]@2 [d4,d5]@3 ~", // F# D G F# D
  W: "~@3 [a4,a5]@4 ~, [c4,c5]@7 ~, ~ [e4,e5]@6 ~, ~@2 [g4,g5]@5 ~", // A C E G
  X: "~@3 [g4,g5]@4 ~, [b3,b4]@7 ~, ~ [d4,d5]@6 ~, ~@2 [f#4,f#5]@5 ~", // G B D F#
  Y: "~@3 [a4,a5]@4 ~, [b3,b4]@7 ~, ~ [d4,d5]@6 ~, ~@2 [f#4,f#5]@5 ~", // A B D F#
  Z: "~@6 [a4,a5]@9 ~, a3@15 ~, a4@3 ~@5, ~@2 [c4,c5]@13 ~, ~@4 [e4,e5]@11 ~", // A C E
  AA: "~@3 [g4,g5]@4 ~, g3@7 ~, g4@3 ~@5, ~ [c4,c5]@6 ~, ~@2 [e4,e5]@5 ~", // G C E
  AB: "~@6 [b4,b5]@9 ~, [c4,c5]@7 ~, ~@2 [e4,e5]@13 ~, ~@2 [g4,g5]@5 ~", // B C E G
  AC: "~@3 [a4,a5]@5, [c4,c5]@15 ~, ~ [e4,e5]@7, ~ [f#4,f#5]@3", // A C E F#
  AD: "~@2 [d4,d5]@2 [e4,e5]@2 [f#4,f#5]@2 [g4,g5]@2 ~ [a4,a5]@3 [b4,b5]@2", // D E F# G A B
  AE: "[a4,a5]@2 ~ [g4,g5]@3 [f#4,f#5]@2 [g4,g5]@2 ~ d5@4 ~, ~@5 d4@2 ~", // A G F# G
  AF: "[d4,d5]@2 ~ [e4,e5]@2 ~ f#5@2 [g4,g5]@2 ~ [a4,a5]@2 ~ [b4,b5]@2, ~@5 f#4@2 ~@9", // D E G A B
  AG: "~ d6@2 [b4,b5]@2 ~ d6@2 [c#5,c#6]@2 ~ [b4,b5]@2 ~ [c#5,c#6]@2, d5@2 ~@3 d5@2 ~@9", // B C# B C#
  AH: "[[d5,d6]@7 ~ [d5,d6]@4 [b4,b5]@2 ~ d6@14 ~@3, ~@7 d5@7 ~@2]/2", // D B
  AI: "~ e5@2 [f#4,f#5]@3 [d4,d5]@2 [e4,e5]@3 [f#4,f#5]@3 [d4,d5]@2, e4 ~@7", // F# D E F# D
  AJ: "~ e5@2 [f#4,f#5]@3 [b4,b5]@8 ~@2, e4@3 ~@13", // F# B
  AK: "[~@3 [f#4,f#5]@11 ~@2, ~ [b3,b4]@5 ~@10, ~@2 [d4,d5]@5 ~@9]/2", // F# B D
})).s("gm_acoustic_guitar_steel").gain(0.26).pan(0.8)

// other · pad new age · "FANTASIA"
const pad_new_age = note(`<
  ~@33 A B C D E F G H ~@24 A B C D E F G H ~@8 I J K I L M N O ~@24 A B C D E F G H ~@32
>`.pickRestart({
  A: "d6@4 ~@2 d6@2 c#6@5 ~ c#6@2", B: "d6@4 ~@2 d6 ~ e6@2 c#6@4 a5@2", C: "d6@5 ~ d6@2 c#6@5 ~ c#6@2",
  D: "d6@2 ~ d6 e6 c#6@2 a5", E: "d6@5 ~ d6@2 c#6@4 ~@2 c#6@2", F: "d6@4 ~@2 d6@2 e6@2 c#6@3 ~ a5@2",
  G: "f#6@4 ~@2 f#6@2 e6@5 ~ e6@2", H: "f#6@4 ~@2 f#6@2 g6@3 ~ g6@3 ~", I: "[f#5,a5]@7 ~", J: "[e5,g5]@15 ~",
  K: "[d5,f#5]@15 ~", L: "[e5,a5]@15 ~", M: "[e5,g5]@7 ~", N: "[g5,b5]@15 ~", O: "[e5,f#5,a5]@15 ~",
})).s("gm_pad_new_age").gain(0.35).pan(0.2)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A ~@7 A ~@15 A ~@15 A ~@15 A ~@15 A ~@31 A ~@15 A ~@7 A ~@7 A ~@16>".pickRestart({
  A: "~@8 x!4 ~@4",
})).gain(0.15)

// drums · hihat
const hihat = s("hh").struct("<~ [x!8]!142 [x!4 ~@4] ~@9>").gain(0.25)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~@7 B ~@15 B ~@7 C ~@7 B ~@15 B ~@7 C ~@7 B ~@31 B ~@7 C ~@7 B ~@7 B ~@7 B ~@16
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@5 x ~ x", C: "~@5 x ~@2",
})).gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<A ~@7 A ~@15 A ~@15 A ~@15 A ~@15 A ~@31 A ~@15 A ~@7 A ~@7 A ~@16>".pickRestart({
  A: "~ x",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@14 B ~@16 A ~@5 A ~@8 B ~@16 A ~@5 A ~@10 A ~@5 A ~@7 B ~@16 A ~@5 A ~ A ~@7 A ~@7 A ~@15
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~ [x!16]!142 [x!8 ~@8] ~@9>").gain(0.2)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [~ x ~ x ~ x ~ x]!142 [~ x ~ x ~@4] ~@9>").gain(1.26)

// drums · shaker
const shaker = s("sh").struct("<~ [~ x ~ x]!142 [~ x ~@2] ~@9>").gain(0.25)

stack(
  piano, bass, lead_3_calliope, acoustic_guitar_steel, pad_new_age, kick, snare, snare_soft, hihat, low_tom, mid_tom,
  high_tom, crash, tambourine, cabasa, shaker
)

More by Genesis