Strudelify
Brick House cover art

1992 · Commodores

Brick House

Commodores

KeyA minorTempo116 bpm
0:00/0:00
// Brick House — Commodores
// 116 bpm, 4/4, key A 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 98 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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.

// bass · slap bass 1 · "SLAPBASS 1"
const bass = note(`<
  ~ A B A C A D A C A B A C A B A C A B A C E F G H G I G J A B A C A B A C A B A C E F G H G I G J A B A C A B A C K L
  M L K N L O A B A C A B A C A B A C A B A C P ~@3 A B A C A B A C A B A C P
>`.pickRestart({
  A: "a1 ~@3 c2 ~ d2 ~ g1 ~@2 g#1 ~@2 a1 ~", B: "~@2 g2 a2 g2 ~ d2 ~ e2@2 ~ c2 ~@2 a2 ~",
  C: "~@2 g2 a2 g2 ~ c2 ~ d2@3 e2@2 d2 e2 c2", D: "~ c2 a2@2 d2 ~ g2 ~ d2@2 ~ e2@2 ~ c2 ~",
  E: "a1@4 ~@2 a1 ~ a1@3 ~@3 a1 ~", F: "a1@4 ~@2 a1 ~ a1@4 ~ a1 g1 ~", G: "a1@4 ~@2 a1 ~ a1@4 ~@2 a1 ~",
  H: "a1@4 ~@2 a1 ~ a1 ~ a1 ~ a1 g1 ~ g1", I: "a1@4 ~@2 a1 ~ a1 ~ a1@2 g1@3 ~",
  J: "a1@2 a2@3 a1 a2@2 a2 ~ a2 ~ a2 g2 e2 ~", K: "a1@2 ~ a1 ~@2 g2!3 ~ g2 ~ c3@2 g2 ~",
  L: "a1@2 ~ a1 ~@2 g2!3 ~ g2 ~ c3 b2 a2 ~", M: "a1@2 ~ a1 ~@2 g2!3 ~ g2 ~ c3@2 a2 ~",
  N: "a1@2 ~ a1 ~@2 g2!3 ~ g2 ~ c3 a2 ~@2", O: "a1@2 ~ a1 ~@2 g2!3 ~ g2 ~ c3 b2 a2 g2", P: "a1 ~@15",
})).s("gm_slap_bass_1").gain(0.72)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@9 A B C D E F G F A B C D H I J K L M N O A B C D E F G F A B C D H I J K L M N O A B C D E F G F P Q@6 R A B C D E
  F G F A B C D E F G F S T U V S T U V A B C D E F G F W
>`.pickRestart({
  A: "[a2,a3,c4,e4] ~@5 [a2,a3,c4,e4] ~ [b3,d4,f#4,a4]@2 ~ [a3,c4,e4,a4] ~@2 [a3,c4,e4] ~", // Am Bm7 Am
  B: "~@2 [a3,c4,e4] ~@2 a2 [a3,c4,e4] ~ [b3,d4,f#4,a4]@2 ~ [a3,c4,e4,g4] ~@2 [a3,c4,e4] ~", // Am Bm7 Am7 Am
  C: "~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~ [b3,d4,f#4,a4]@2 ~ [a3,c4,e4,g4] ~@2 [a3,c4,e4] ~", // Am Bm7 Am7 Am
  D: "~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~ [b3,d4,f#4]@2 ~ [a3,c4,e4] ~@2 [a3,c4,e4] ~, ~@8 a4 ~@7", // Am Bm Am
  E: "[a2,a3,c4,e4,g4] ~@5 [a3,c4,e4] ~ [b3,d4,f#4]@2 ~ [a3,c4,e4,g4] ~@2 [a3,c4,e4,g4] ~, ~@8 a4 ~@7", // Am7 Am Bm Am7
  F: "~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~ [b3,d4,f#4]@2 ~ [a3,c4,e4] ~@2 [a3,c4,e4] ~", // Am Bm Am
  G: "~@2 [a3,c4,e4] ~@3 [a3,c4,e4,g4] ~ [b3,d4,f#4]@2 ~ [a3,c4,e4,g4] ~@2 [a3,c4,e4] ~, ~@8 a4 ~@7", // Am Am7 Bm Am7 Am
  H: "[a2,e3,g3,c4,e4]@3 [g3,c4,e4] ~@6 a3 a2 ~ a2 a3 ~", // Am7 C
  I: "[a3,c4,e4]@2 ~ [a3,c4,e4] ~@4 [a2,e3] ~ [a2,e3] ~ [a2,e3]!2 ~@2", // Am A5
  J: "[a2,e3,g3,c4,e4]@3 [g3,c4,e4] ~@4 a3 a2 ~ a2 ~ a2 a3 ~", // Am7 C
  K: "[a2,e3,g3,c4,e4]@2 ~ [a2,e3,g3,c4,e4] ~@6 [a2,e3,g3,c4,e4] ~@2 [a2,e3,g3,c4,e4] ~@2", // Am7
  L: "[a2,e3,g3,c4,e4]@3 [g3,c4,e4] ~@2 a3 a2 ~@6 [a2,e3,g3,c4,e4] ~", // Am7 C Am7
  M: "~@2 [g3,c4,e4] ~@5 [a2,e3,g3,c4,e4] ~ [g3,c4,e4] ~@2 [a2,e3] [g3,c4,e4] ~", // C Am7 C A5 C
  N: "[a2,e3,g3,c4,e4]@3 [g3,c4,e4] ~ a2 a3 a2 ~@8", // Am7 C
  O: "~@2 [a2,e3,g3,c4,e4] ~@2 [a2,e3,g3,c4,e4] ~@2 [a2,e3,g3,c4,e4] ~@2 [a2,e3,g3,c4,e4] ~@4", // Am7
  P: "[g3,a3,b3,d4]@3 [g3,a3,b3,d4] ~@12", Q: "[g3,a3,b3,d4]@2 ~ [g3,a3,b3,d4] ~@12",
  R: "[g3,a3,b3,d4]@2 ~ [g3,a3,b3,d4] ~@5 a2 a3 ~ a3 ~@3", // G
  S: "[e4,g4,a4,c5] ~@5 [e4,g4,a4,c5] ~ [d4,f#4,a4,b4]@2 ~ [d4,f#4,a4,b4]@2 ~ [e4,g4,a4,c5] ~", // Am7 Bm7 Am7
  T: "~@2 [e4,g4,a4,c5] ~@3 [e4,g4,a4,c5] ~ [d4,f#4,a4,b4]@2 ~ [d4,f#4,a4,b4]@2 ~ [d4,f#4,a4,b4] ~", // Am7 Bm7
  U: "[e4,g4,a4,c5] ~@5 [e4,g4,a4,c5] ~ [d4,f#4,a4,b4]@2 ~ [a4,b4]@2 ~ [e4,g4,a4,c5] ~, ~@11 [d4,f#4] ~@4", // Am7 Bm7 Asus2 Am7 D
  V: "~@2 [e4,g4,a4,c5] ~@13", W: "[a2,a3,c4,e4,g4] ~@15",
})).s("gm_epiano2").gain(0.52)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  ~@5 A ~ B C D E F G H I F J D E F G ~@8 D E F G H I F J D E F G ~@8 D E F G H I F J K L K L@2 K L@2 D E F G H I F J D
  E F G H I F J ~@8 D E F G H I F J M
>`.pickRestart({
  A: "[e4,a4] ~@3 [c4,c5] ~ [d4,d5] ~ [g3,g4] ~@2 [g#3,g#4] ~@2 [a3,a4] ~", // A5 C D G G# A
  B: "~@2 [g3,g4] [a3,a4] [c4,c5] [a3,a4]@3 ~@2 [g3,g4] [a3,a4] [d4,d5] [c4,c5]@2 ~", // G A C A G A D C
  C: "~@2 [d4,f#4,d5,f#5] ~@2 [d4,f#4,d5,f#5] ~@2 [d4,f#4,d5,f#5] ~@3 [g4,g5] [a4,a5]@2 ~", // D G A
  D: "[a4,a5]@2 ~@4 [g4,b4] [a4,c5] [b4,d5]@3 [a4,c5] ~@2 [a4,c5] ~", // A G Am Bm Am
  E: "~@6 [g4,e5] [a4,c5] [b4,d5]@2 ~ [a4,c5] ~@2 [a4,c5] ~", F: "~@6 [g4,b4] [a4,c5] [b4,d5]@2 ~ [a4,c5] ~@2 a4 ~",
  G: "~@2 [d5,f#5] ~@3 g4 a4 [d5,f#5] ~@2 [a4,d5,f#5] ~@2 [a4,d5,f#5] ~, ~@4 b4 ~@3", // D
  H: "~@6 [g4,b4] [a4,c5] [b4,d5]@2 ~ [a4,c5] ~@2 [a4,c5] ~", // G Am Bm Am
  I: "~@2 a4 ~@3 [g4,e5] [a4,c5] [b4,d5]@2 ~ [a4,c5] ~@2 [a4,c5] ~", // C Am Bm Am
  J: "~@2 [d5,f#5] ~@2 [d5,f#5] g4 a4 [d5,f#5] ~ [d5,f#5] a4 [d5,f#5]!2 a4 ~, ~@4 b4 ~@3", // D
  K: "[e4,a4,d5]@2 ~ [e4,a4,d5] ~@12", L: "[e4,g4,a4,d5]@2 ~ [e4,g4,a4,d5] ~@12", M: "[a4,e5,a5] ~@15",
})).s("gm_brass_section").gain(0.69)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@9 A@2 B C D@4 A@2 B C E F G H I J G K A@2 B C D@4 A@2 B C E F G H I J G K A@2 B C D@4 L M N O P Q R S A@2 B C D@4
  A@2 B C D@4 ~@4 A@2 B C A@2 B C D@4 T
>`.pickRestart({
  A: "[[a2,a3,c4,e4]@3 ~ [a3,c4,e4] ~ a2 ~ [b3,d4,f#4]@2 b2 [b3,d4,f#4]@2 ~ [a3,c4,e4]@4 a2 ~ [a3,c4,e4] ~ a2 ~ [b3,d4,f#4]@2 b2 [b3,d4,f#4] ~ b2 [b3,d4,f#4] a2]/2", // Am Bm Am Bm
  B: "[a3,c4,e4]@3 ~ [a3,c4,e4] ~ a2 ~ [b3,d4,f#4]@2 ~ [b3,d4,f#4] ~ a2 [a3,c4,e4] ~", // Am Bm Am
  C: "~@2 [a3,c4,e4]@2 a2 ~ [a3,c4,e4] ~ [b3,d4,f#4]@2 d3 [b3,d4,f#4]@2 d3 [b3,d4,f#4] ~", // Am Bm
  D: "[[a3,c4,e4]@3 ~ [a3,c4,e4] ~ a2 ~ [b3,d4,f#4]@2 b2 [b3,d4,f#4]@2 ~ [a3,c4,e4]@4 a2 ~ [a3,c4,e4] ~@3 [b3,d4,f#4]@2 b2 [b3,d4,f#4]@2 b2 [a3,c4,e4]@4 a2 ~ [a3,c4,e4] ~ a2 ~ [b3,d4,f#4]@2 ~ [b3,d4,f#4]@2 ~ [a3,c4,e4]@4 a2 ~ [a3,c4,e4] ~ a2 ~ [b3,d4,f#4]@3 [b3,d4,f#4]@2 d3 [b3,d4,f#4] ~]/4", // Am Bm Am Bm Am Bm Am Bm
  E: "[a3,c4,e4,f#4]@2 ~ [c4,e4] ~ a3 [c4,e4] ~ [a3,c4,f#4]@3 [c4,e4] ~ a3 [c4,e4]@2", // F#m7b5 C F#dim C
  F: "[a3,c4,f#4]@2 ~ [c4,e4]@2 a3 [c4,e4] ~ [a3,c4,e4,g4] ~ [c4,e4,g4]@3 [c4,e4,g4]@2 ~, ~@10 a3@5 ~", // F#dim C Am7 C
  G: "[a3,c4,f#4]@2 ~ [c4,e4] ~ a3 [c4,e4] ~ [a3,c4,f#4]@3 [c4,e4] ~ a3 [c4,e4] ~", // F#dim C F#dim C
  H: "[a3,c4,e4]@3 [a3,c4,e4] ~@2 a3 ~ [a3,c4,d4] ~ [a3,c4,d4] ~ [c4,d4] a3 [c4,d4] ~, ~@5 [a3,c4,e4]@2 ~@9", // Am D7 Csus2 Am
  I: "[a3,c4,f#4]@3 [c4,e4] ~ a3 [c4,e4] ~ [a3,c4,f#4]@3 [c4,e4] ~ a3 [c4,e4] ~", // F#dim C F#dim C
  J: "[a3,c4,f#4]@3 [c4,e4] ~ a3 [c4,e4] ~ [a3,c4,e4,g4]@2 [a3,c4,e4,g4]@2 ~ a3 [c4,e4,g4] ~", // F#dim C Am7 C
  K: "[a3,c4,e4,g4]@3 [c4,e4,g4] ~ a3 [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,d4,g4] ~ [c4,d4,g4] a3 ~@2", // Am7 C Csus2
  L: "a3 a2 a3 ~ a2 ~ g3 ~ g3 ~ g3 ~ g3 a3 g3 a3", M: "~@6 a3 a2 ~@2 g3 ~ g3 g2 ~@2",
  N: "a2@2 a3 ~@2 a2 g3 ~ g3 ~ g3 ~ g3 a3@3", O: "a2 ~@2 a2 ~ a2 a3 a2 g3 ~ g3 ~ g3 g2 g3 g2",
  P: "~@6 a3 a2 g3 ~ g3 ~ g3 f#3 e3 ~", Q: "~@5 a2 a3 ~ g3 ~ g3 ~ g3 g2 ~@2", R: "~@5 a3 a2 ~ g3 ~ g3 ~ g3 g2 f#3 ~",
  S: "~@5 a2 a3 ~ a3 ~ g3 ~ g3 a2 a3 ~", T: "[a2,e3] ~@15",
})).s("gm_acoustic_guitar_steel").gain(0.57)

// drums · kick
const kick = s("bd").struct(`<
  A B C B C B C B C B C B C B C B C B C B C B D B D B D B D B C B C B C B C B C B C B D B D B D B D B C B C B C B C E F
  E F E F E F B C B C B C B C B C B C B C B C G ~ G ~ B C B C B C B C E F E F G
>`.pickRestart({
  A: "~@13 x!3", B: "x ~@2 x!2 ~@2 x", C: "~@3 x!3 ~ x", D: "x!2 ~ x!3 ~ x", E: "x ~@2 x!3 ~ x",
  F: "x ~@5 x ~ x ~ x ~@3 x!2", G: "x",
})).gain(0.66)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  A ~@7 B ~@7 B ~@11 C ~@7 B ~@11 C ~@7 B ~@7 D ~@7 B ~@7 B ~@3 E ~@7 B ~@3 F ~
>`.pickRestart({
  A: "~@2 x!2 ~@3 x ~@3 x ~@4", B: "~@13 x ~@2", C: "~@10 x!4 ~@2", D: "~@2 x!8 ~@6",
  E: "~@2 x!2 ~ x ~ x ~ x ~@2 x!2 ~@2", F: "~@6 x!4 ~ x!3 ~@2",
})).gain(0.2)

// drums · clap
const clap = s("cp").struct("<~ A@20 ~@8 A@12 ~@8 A@32 ~@4 A@12 ~>".pickRestart({
  A: "~ x ~ x",
})).gain(0.66)

// drums · low tom
const low_tom = s("lt").struct("<A ~@27 B ~@19 B ~@35 C ~@11 D ~>".pickRestart({
  A: "~@4 x ~@2 x", B: "~ x", C: "~@13 x ~@2", D: "~@14 x!2",
})).gain(0.66)

// drums · hihat
const hihat = s("hh").struct("<~ [x!4]!96 ~>").gain(0.66)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ [~ x ~ x ~ x ~@2]!80 [~ x ~ x ~ x ~ x]!4 [~ x ~ x ~ x ~@2]!12 ~>").gain(0.2)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@27 B ~@19 B ~@35 C ~@11 D E>".pickRestart({
  A: "~@3 x ~ x!2 ~", B: "~@3 x ~@4", C: "~@5 x ~ x", D: "~@13 x ~@2", E: "x",
})).gain(0.66)

// drums · open hat
const open_hat = s("oh").struct("<~ [~@7 x]!80 ~@4 [~@7 x]!12 ~>").gain(0.66)

// drums · high tom
const high_tom = s("ht").struct("<A ~@27 B ~@19 B ~@35 C ~@11 D ~>".pickRestart({
  A: "~@5 x ~ x ~@5 x ~@2", B: "~ x ~@6", C: "~@6 x ~@4 x!2 ~@3", D: "~@11 x!2 ~@3",
})).gain(0.66)

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

// drums · ride
const ride = s("rd").struct("<~@57 A@8 ~@16 B ~ B ~@9 A@4 ~>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.66)

// drums · cowbell
const cowbell = s("cb").struct("<~@57 [x!4]!8 ~@28 [x!4]!4 ~>").gain(0.66)

// drums · congas
const congas = s("conga:18").struct("<~@57 A B A B A B A B ~@28 A B A C ~>".pickRestart({
  A: "~@2 x ~@7 x!2 ~ x ~@2", B: "~@2 x ~@3 x!3 ~@5 x ~", C: "~@2 x ~@3 x!3 ~@7",
})).gain(2.1)

// drums · congas
const congas_2 = s("conga:33").struct("<~@57 A B A B A B A B ~@28 A B A B ~>".pickRestart({
  A: "~@4 x ~ x ~@7 x!2", B: "~@5 x ~@2",
})).gain(2.1)

stack(
  bass, epiano2, brass_section, acoustic_guitar_steel, kick, snare, snare_soft, clap, low_tom, hihat, hihat_soft,
  mid_tom, open_hat, high_tom, crash, ride, cowbell, congas, congas_2
)

More by Commodores