Strudelify

Something So Strong

Crowded House

KeyC majorTempo123 bpm
0:00/0:00
// Something So Strong — Crowded House
// 123 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 1 "Track 1" slap bass 1 (copy of ch 11 "Track 11" electric bass finger)
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(123/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 · rock organ · "Track 6"
const rock_organ = note(`<
  ~@3 A@3 B ~@2 C@2 ~@2 D E@8 F@2 G H I@3 J E@8 ~@3 K L M N O@4 G P@4 Q ~@7 R S@7 T U V W X Y Z@2 AA AB AC AD AE@2 AF
  AG@2 AH ~
>`.pickRestart({
  A: "[~@32 g5@2 ~@4 [f5,a5]@2 [e5,g5]@2 [c5,e5] ~ [d5,f5]@4, ~@14 e5@20 ~@10 e5 ~@3, ~@14 g5@18 ~@6 g5 ~@9, ~@7 c6@8 c6@2 ~@7, ~@13 c5@4 ~@7]/3", // F Em C Dm
  B: "[c5,e5] ~", C: "[~@14 [c5,e5,g5,c6]@6 [c5,e5,g5] ~@11]/2", D: "~@2 f6 e6, ~@8 e6 ~@7",
  E: "[[f5,a5]@16 [e5,g5]@16 f5@16 e5@2 f5@2 g5@2 d5@2 d5@2 e5@2 f5@2 f5@2 f5@16 [e5,g5]@16 [f5,a5]@14 e6@4 d6 ~ e6@2 d6 ~ e6@2 d6 ~ d6@2 e6 ~, c6@108 ~@2 d#6 ~@5 d#6 ~@3 d#6 ~@7, ~@16 a5@24 ~@15 [d5,f5,g5]@8 ~]/8", // F Em F G7
  F: "[c5,e5,g5,c6]/2", G: "[d5,f5,a5,d6]", H: "~@6 [f5,a5]@2 [e5,g5]@2 [c5,e5] ~ [d5,f5]@4, ~@6 g5 ~@5 e5 ~@3",
  I: "[e5 ~ f5, c5@2 ~, ~ a5@2]/3", J: "[c5,e5]", K: "~@7 [g5,g6], ~@14 f6 ~",
  L: "[c6,e6]@2 f6 ~ f6@3 ~ a5@3 c6@3 d6@2", M: "[e6,g6]@5 ~ [c#6,d6] e6 d6@5 ~ [b5,c6] d6", N: "[c6,f6] e6",
  O: "[~@18 d6 ~ e6@2 d6 ~ e6@2 d6 ~ d6@2 e6 ~ [c5,e5,c6]@32, g5, d6@17 ~@3 d#6 ~@3 d#6 ~@39, ~@7 [d5,f5]@8 ~@17]/4", // C Dm
  P: "[g5@2 ~ f5, c5, [e5,c6]@3 ~, ~ a5]/4", Q: "[e5,g#5,b5]",
  R: "~@2 d6 ~ e6@2 d6 ~ e6@2 d6 ~ d6@2 e6 [a#5,d#6], [d5,f5,g5], ~@4 d#6 ~@3 d#6 ~@7", // D#5 G7
  S: "[[a5,f6] [g5,e6] [f5,a5] [e5,g5] [f5,a5] [e5,g5] [f5,a5], c6, [b5,e6] ~@111]/7", // Dm C F Em F Em F E5
  T: "e6 ~ e6@2 d6 ~ e6@2 d6 ~ c6 ~ c6@2 d6 ~, [e5,g5], ~@2 d#6 ~@3 d#6 ~@9", // Em
  U: "a5@2 g5@5 ~ d6@2 c6@3 ~ d5 ~, [f4,a4]", V: "e5@2 ~@2 e5@2 d5@3 ~ c5 ~ c5@3 ~, [e4,g4], d5 ~@3 d5 ~@11",
  W: "a5@2 g5@5 ~ d6@2 c6@3 ~ d5 ~, [f4,a4], g5 ~@7 c6 ~@7", // F
  X: "e5@2 ~@2 e5@2 d5@3 ~ c5 ~ c5@2 d5@2, [e4,g4], d5 ~@3 d5 ~@11", Y: "a5@2 g5@5 ~ d6@2 c6@6, [f4,a4], g5 ~@7 c6 ~@7",
  Z: "[~@2 [c6,e6]@2 [a5,d6] ~ [g5,c6] ~ [c6,e6]@2 [a5,d6] ~ [a5,d6]@2 ~@2 [f4,a4]@16, [e4,g4] ~, ~@2 d6 ~@5 d6 ~@5 [g5,c6]@18]/2", // C D5 C5 C D5 F Em C5
  AA: "~@2 [c6,e6]@2 [a5,d6] ~ [g5,c6] ~ [c6,e6]@2 [a5,d6] ~ [a5,d6]@2 [g5,c6]@2, [e4,g4], ~@2 d6 ~@5 d6 ~@7", // C D5 C5 C D5 C5 Em
  AB: "~@2 [c6,e6,f6] ~ [c6,f6]@2 ~@2 [c6,e6,f6] ~ [c6,f6]@2 ~@4, [f4,a4], ~@4 e6 ~@5 e6 ~@5", // Fmaj7 F5 Fmaj7 F5 F
  AC: "~@2 [c6,d6,e6] ~ [c6,e6]@2 ~@2 [c6,e6]@2 ~ [c6,e6]@2 d6 c6 ~, [e4,g4], ~@4 d6 ~@3 d6 ~@2 d6 ~@4", // C Em
  AD: "~@2 [c6,e6,f6] ~ [c6,f6]@2 ~@2 [c6,f6]@2 ~ [c6,f6]@2 d6 c6 ~, [f4,a4], ~@4 e6 ~@3 e6 ~@2 e6 ~@4", // Fmaj7 F5 F
  AE: "[~@2 [c6,e6]@2 [a5,d6] ~ [g5,c6] ~ [c6,e6]@2 [a5,d6] ~ [a5,d6]@2 g5@2 a5@11 ~ [c5,f5]@2 d5 c5, [e4,g4] [f4,a4], ~@2 d6 ~@5 d6 ~@5 c6@13 ~ e5 ~@3]/2", // C D5 C5 C D5 F5 Em F
  AF: "[c5,e5]@2 ~@2 [c5,e5]@7 ~ [c5,e5]@2 [a#4,d5] ~, [e4,g4], d5 ~@3 d5 ~@7 a#4 ~@3", // C A# Em
  AG: "[[f5,a5]@7 ~ [c5,f5]@2 d5 c5 [c5,f5]@2 d5 ~ [e4,g4]@15 ~, [f4,a4] ~, ~@8 e5 ~@3 e5 ~@2 c5@9 ~@8]/2", // F F5 Em F
  AH: "[f4,a4] ~@7", // F
})).s("gm_rock_organ").gain(0.45)

// bass · electric bass finger · "Track 11"
const bass = note(`<
  ~@6 A@2 B C D E F G H C H I H J K L M N O C D E H J H J H P H C Q R S T U V W T U X Y Z@2 AA@2 Z AB H AC H J H P H J Q
  R H AD H AE H AD H J H AD H AE H AD H J H AD H AF AG AD H AH AI@2
>`.pickRestart({
  A: "[c2@2 ~@3 c2 ~ c2@3 ~@2 g1 a1 ~ c2]/2", B: "d2@2 ~@3 d2 ~ d2", C: "c2@2 ~@2 g1 a1 c2 a1", D: "c2@2 ~@3 c2 ~ g1",
  E: "a1@2 ~@3 a1 ~ e1", F: "f1@2 ~@3 f1 ~ e1", G: "c2@4 ~@3 c2 g1@2 a1@2 c2 ~ c2@2", H: "f1 ~ f1@2 ~ f1 ~ g1",
  I: "a1@4 ~@2 a1@2 g1 ~ g1 ~ g1@2 e1@2", J: "c2@4 ~@3 c2 g1@2 a1@2 c2@2 a1@2", K: "f1 ~ f1@2 ~ f1 ~ f1",
  L: "g1 ~ g1 ~ g1!2 ~ g1", M: "c2@2 c2 ~@2 c2 ~ g1", N: "c2@2 ~@2 c2!2 ~ g1", O: "d2@2 ~@3 d2 ~ g1",
  P: "a1@2 ~ a1 g1!2 ~ e1", Q: "f1 ~ f1@2 ~ f1 ~ c2", R: "g1@2 ~@2 g1@2 ~ g1 b1@2 d2@2 e2@2 g2@2", S: "f3!4 e3@2 ~@2",
  T: "c3!4 b2!2 b2@2", U: "a2!2 a2@2 a2!2 a2@2", V: "g2!3 g2@2 g2!3", W: "f3!4 e3@3 ~", X: "g2!4 a2 f2 g2 f1",
  Y: "g1!4 a1 f1 g1 b1", Z: "c2 ~ c2@2 ~ c2 ~ g1", AA: "[d2@4 ~@6 d2@2 ~@2 c2@6 ~@3 c2 g1@2 a1@2 c2@2 a1@2]/2",
  AB: "a1 ~ a1@2 ~ a1 ~ e1", AC: "e1 ~ e1@2 e1!2 ~ e1", AD: "c2@2 ~ c2 g1 a1 c2 a1", AE: "c2@2 ~ c2 ~ c2 ~ a1",
  AF: "c2@2 ~ c2 e2 g2 a2 g2", AG: "f2 ~ f1@2 ~ f1 ~ g1", AH: "c2@4 ~@3 c2 a2@2 g2@2 e2@2 c2@2",
  AI: "[f1 ~ f1@10 ~@4]/2",
})).s("gm_electric_bass_finger").gain(0.36)

// chords · pad warm · "Track 14"
const pad_warm = note("<~@5 A@8 ~@8 A@8 ~@3 B@6 ~@8 C@7 D@8 E F@8 G@16 ~@3>".pickRestart({
  A: "[~@15 e4@32 f4@16 e4@48 f4@16 e4]/8",
  B: "[~@15 a3@8 g3@8 [f3,c4]@16 [e3,e4]@16 f3@16 g3@16 ~, ~@15 e4@16 ~@65]/6", // F5 E
  C: "[~@15 [c4,e4]@32 [d4,f4]@16 c4@32 a3@15 ~ [c4,f4], ~@63 e4@48 ~]/7", // C Dm F5
  D: "[~@15 [g#3,e4]@16 [a3,f4]@16 [g3,e4]@16 f4@16 ~@8 g3@8 [f3,f4]@16 [e3,e4]@16 [f3,a3], ~@31 c4@96 ~, ~@63 a3@24 ~@41, ~@79 e4@16 ~@33]/8", // C#m Dm C F E F
  E: "~@15 [g3,b3]", F: "[~@15 f4@16 e4@16 f4@16 e4@16 f4@16 e4@16 f4@16 e4, ~@15 c4@113]/8",
  G: "[~@15 f4@16 e4@16 f4@16 e4@16 f4@16 e4@16 f4@16 e4]/8",
})).s("gm_pad_warm").gain(0.4)

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

// drums · rim
const rim = s("rim").struct("<~@38 [~ x!3] [x!4]!7 [x!2 ~@2] ~@42>").gain(0.42)

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

// drums · low tom
const low_tom = s("lt").struct("<~@5 A ~@40 B ~@31 B ~@7 C ~@2>".pickRestart({
  A: "~ x", B: "~@14 x!2", C: "~@5 x!3",
})).gain(0.42)

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

// drums · open hat
const open_hat = s("oh").struct("<~@34 A ~@3 B ~@2 C ~@2 D C ~@9 A ~@3 A ~@2 E ~@26>".pickRestart({
  A: "x", B: "~@7 x", C: "~@5 x ~@2", D: "~ x ~@6", E: "~ x",
})).gain(0.54)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@23 B ~@3 B ~@3 A ~@8 C ~@7 B ~ B ~ B ~@3 C ~ B ~ B ~ B ~ C ~ B ~ B ~ B ~ C ~ B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "x!2 ~@2",
})).gain(0.42)

// drums · ride
const ride = s("rd").struct("<~@71 A B C D E B F G A B C D E B F H ~@2>".pickRestart({
  A: "~@4 x ~ x!2", B: "x ~@3 x ~ x ~ x ~ x ~ x ~ x!2", C: "x!2 ~@2 x ~ x!2", D: "x ~ x!4 ~@2", E: "~@4 x!4",
  F: "x!2 ~ x!2 ~ x!2", G: "x ~ x!2 ~@4", H: "x",
})).gain(0.42)

stack(rock_organ, bass, pad_warm, kick, rim, snare, low_tom, hihat, open_hat, crash, ride)

More by Crowded House