Strudelify
American Woman cover art

1970 · American Woman

American Woman

Guess Who

KeyE majorTempo88 bpm
0:00/0:00
// American Woman — Guess Who
// 88 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: ch 11 "MELO TOM 1" (melodic tom patch on one pitch) is played as the kit's tom
// note: duplicate parts dropped: ch 12 "WHISTLE" whistle (copy of ch 6 "OVERDRIVE" overdriven guitar)
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): CLEAN GTR, OVERDRIVE.
setcpm(88/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~@2 A B C D E F D G H I@2 H I H I@2 H I@5 H I@7 H J K I@3 H I H I H I H I@2 H I H I H L M@3 N I J I H I J H I@2 K I@3
  J H I H J H I H J I@3 J I@3 J I@2 O
>`.pickRestart({
  A: "~@3 b1", B: "e2@7 ~", C: "~@5 b1 d2 d#2", D: "e2@3 e2 e2@2 ~ e2 e2@2 ~ e2 b1@2 d2@2",
  E: "e2@3 e2 e2@3 e2 e2@2 ~ e2 g2 e2 d2@2", F: "e2@3 e2 e2@3 e2 e2@2 ~ e2 b1@2 d2@2",
  G: "e2@3 e2 e2@3 e2 e2@2 ~ e2 a1 b1 d2@2", H: "e2@2 ~ e2 e2@2 ~ e2 e2@2 ~ e2 g2 e2 d2@2",
  I: "e2@2 ~ e2 e2@2 ~ e2 e2@2 ~ e2 a1 b1 d2@2", J: "e2@3 e2 e2@2 ~ e2 e2@2 ~ e2 a1 b1 d2@2",
  K: "e2@3 e2 e2@2 ~ e2 e2@2 ~ e2 g2 e2 d2@2", L: "e2@2 ~ e2 e2@2 ~ e2 e2@2 ~ e2 a1 b1 d2 ~",
  M: "d2 e2!3 e2@2 d2 e2@8 ~", N: "d2 e2!3 e2@2 d2 e2@2 ~@7", O: "e2@2 ~ e2 e2@2 d2 e2 ~@8",
})).s("gm_fretless_bass").gain(0.38)

// other · flute
const flute = note(`<
  ~@8 A@2 B@2 C D E F G H@3 I@2 ~@2 A@2 J@2 C D K L M N@3 O ~@19 P@2 Q@2 C D R S T U V W Q@2 C X Y Z AA AB@2 AC AB AD AE
  AF AG AH AI@2 AJ AK ~@2
>`.pickRestart({
  A: "[~@11 b3 a4!3 a4@2 g4@7 ~@2 b3!2 d4@2 e4@2]/2", B: "[g4@3 e4@7 ~ b3 a4!3 a4@2 g4@7 ~@2 b3!2 d4@2 e4@2]/2",
  C: "g4@4 e4@5 ~@7", D: "~ g4 a4!3 g4 a4 b4@2 a4@2 g4@3 ~@2", E: "d4 e4!2 d4 e4 d4@2 g4@3 d4@2 e4@2 ~@2",
  F: "~ g4 a4!2 g4 ~ a4 g4 a#4@2 a4 g4@3 ~ b3", G: "d4 e4@2 e4@3 e4 d4 g4@2 d4 e4@2 ~ a4@2",
  H: "[a4 g4@4 ~@4 a3 b3@2 d4 e4@2 g4@5 e4@4 ~@3 d4 a4!3 a4@2 g4@4 ~@5 b3!2 d4 e4@3]/3",
  I: "[a#4@3 a#4@3 a#4@3 a#4@3 g4 e4@11 ~@8]/2", J: "[g4@3 e4@7 ~ b3 a4!3 a4@2 g4@7 ~@2 b3!2 d4 e4@3]/2",
  K: "d4 e4!2 e4@2 e4@3 g4 d4 e4 e4@2 ~@3", L: "~ g4 a4@2 a4@2 g4@2 a#4@2 a4 g4@3 ~@2",
  M: "d4@2 e4@2 e4@2 d4@2 g4@2 d4 e4@3 a4@2",
  N: "[a4 g4@5 ~@3 a3 b3@2 d4 e4@2 g4@5 e4@5 ~@2 d4 a4!3 a4@2 g4@4 ~@5 b3!2 d4 e4@3]/3", O: "g4@3 e4@3 g4@6 e4@4",
  P: "[~@11 b3 a4!3 a4@2 g4@7 ~@2 b3@2 d4 e4@3]/2", Q: "[g4@3 e4@6 ~@2 b3 a4!3 a4@2 g4@7 ~@2 b3!2 d4 e4@3]/2",
  R: "d4 e4!2 e4@2 e4@2 g4@2 d4 e4@3 ~@3", S: "~ g4 a4 a4@2 g4@3 a#4@2 a4 g4@3 ~@2",
  T: "d4 e4@2 e4@2 e4@3 g4 d4@2 e4@2 ~@3", U: "~ g4@2 g4 g4@2 e4@2 e4@2 d4 g4@3 ~@2",
  V: "d4@2 e4@2 e4@2 d4@2 g4@2 d4 e4@3 e4@2", W: "g4 e4@3 ~@6 b3!2 d4 e4@3", X: "e4@2 ~@4 e4 d4 e4 d4 e4@2 g4 e4 g4 d4",
  Y: "e4@2 e4@2 e4 e4@2 g3@3 ~@3 d4 e4 d4", Z: "g4@2 e4 d4@2 e4@3 ~@5 e4 e4@2", AA: "g4@2 d4 d4@2 e4@3 ~@5 e4@3",
  AB: "g3@7 e3@5 ~@2 e4@2", AC: "g4@7 e4@6 ~ e4@2", AD: "~ d4@2 d4@2 d4 e4@2 ~@8", AE: "d4@2 d4@2 d4@2 d4 e4@3 ~@6",
  AF: "d4 e4 e4@2 e4@2 e4@2 g4@2 g4 e4@2 ~@3", AG: "e4!5 e4@2 g4@4 d4!3 e4!2", AH: "g3@5 ~@6 g4 f#4!2 g4!2",
  AI: "g3@6 ~@5 f#4 g4!4", AJ: "g4@6 d4@3 e4@2 ~@2 d4 e4 d4", AK: "g4@5 ~@2 a3@2 g3@4 ~@3",
})).s("gm_flute").gain(0.1)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@4 A B C@3 ~@11 A B C@3 ~@11 D E F G H I@2 J@2 K L M N O P Q R ~@18 S T U V W X Y Z AA AB AC AD AE AF AG AH ~@3
>`.pickRestart({
  A: "~@6 e4 f#4", B: "f#4@11 ~ g#4@4", C: "[b4@9 ~@3 d5 e4 g4@12 ~@2 g#5 b4 c#5@17 ~]/3", D: "~@10 f#4@3 ~ g4 ~",
  E: "f#4@7 ~", F: "g4 e4 f#4 ~ e4@10 ~@2", G: "a#4@7 ~", H: "a#4 g4 g#4 ~ g4@9 ~@2 g4",
  I: "[c#5@10 ~@2 d5 e4 g4@9 ~@2 c#5 ~ d5 c#5@2 d5 ~]/2", J: "[c#5@9 ~@3 d5 e4 g4@9 ~@2 d5@2 e5 d5@2 e5 ~]/2",
  K: "d#5@6 ~@3 e5@2 e5 f#5 ~ a5 ~", L: "a5@2 ~ a5@4 ~@3 a5@2 f#5 ~ a5 ~", M: "f#5@2 ~ e5@5 ~@2 [d5,e5] d5 c#5 ~ b4 ~",
  N: "a4@13 a4@2 ~", O: "a4@12 b4 ~ c#5 ~", P: "d5 b4 c#5 ~@2 b4@7 b4 ~ c#5 ~", Q: "c#5@10 ~@2 d5 b4 c#5 ~",
  R: "d5@13 ~@3", S: "~@11 c#5@2 b4 c#5 ~", T: "b4@8 ~ b4 c#5 e5 f5 e5 f#5 ~", U: "e5@7 ~@2 b4 c#5 ~ c#5 b4 c#5 ~",
  V: "b4@9 ~@7", W: "e5 f#4 ~ e4@11 e5@2", X: "g4@5 ~ e4@8 e5@2", Y: "g4@3 ~@4 e5, ~@7 e4@9", Z: "g4@6 ~ e4@6 f#5@2 ~",
  AA: "b4@6 c#5@2 d5@4 ~ g5 ~@2", AB: "b4@6 c#5 ~ c#5@4 ~ g5 ~@2", AC: "c5@6 b4 c#5 b4@2 ~@2 d5 b4 c5 ~",
  AD: "g5 c#5@3 ~@2 b5 ~", AE: "b5@5 b5@6 ~ a5 b5 a5 ~", AF: "g#5@6 ~@6 b5 e5 g#5 ~", AG: "g#5@7 ~ g#5@3 ~ f#5@2 ~@2",
  AH: "e5@9 ~@3 a#4@2 c#5@2",
})).s("gm_overdriven_guitar").gain(0.44).pan(0.4)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  A B C D E F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I J K L M F G
  H I F G H I F G H I F G H I F G H I F G H I F G H I F N O ~@2
>`.pickRestart({
  A: "~@12 b3 ~ [a3,d4] ~", // D5
  B: "[b3,e4,g#4] [e4,g#4] [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] ~ [b3,e4,g#4]!2 ~ [b3,e4,g#4] [e4,g#4] ~ b3 ~ [a3,d4,f#4] ~", // E D
  C: "[b3,e4,g#4] [e4,g#4] ~ g#4 [b3,e4,g#4] ~ [b3,e4,g#4] [e4,g#4] ~@4 b3 ~ [a3,d4,f#4] ~, ~ [b3,e4,g#4] ~@6", // E D E
  D: "[b3,e4,g#4] [e4,g#4] [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] ~ [b3,e4,g#4] [e4,g#4] ~ [b3,e4,g#4]!2 ~ b3 ~ [a3,d4] ~", // E D5
  E: "[b3,e4,g#4] [e4,g#4] [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] ~ [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] [e4,g#4] [b3,e4,g#4]!2 b3 ~ [a3,d4] ~", // E D5
  F: "[b3,e4,g#4] [e4,g#4] [b3,e4] e4 [b3,e4] ~ [b3,e4,g#4] [e4,g#4] [b3,e4,g#4]!3 b3!2 ~ [a3,d4] ~", // E E5 E D5
  G: "[b3,e4] [e4,g#4] [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] ~ [b3,e4,g#4] [e4,g#4] [b3,e4,g#4]!3 ~ b3 ~ [a3,d4] ~", // E5 E D5
  H: "[b3,e4,g#4] [e4,g#4] [b3,e4,g#4]!2 [b3,e4] ~ [b3,e4,g#4]!5 ~ b3 ~ [a3,d4] ~", // E E5 E D5
  I: "[e4,g#4]!3 [b3,e4] [b3,e4,g#4] ~ [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] ~ b3 ~ [a3,d4] ~, b3@3 ~@13", // E E5 E D5
  J: "[b3,e4,g#4] [e4,g#4] [b3,e4] e4 [b3,e4] ~ [b3,e4,g#4] [e4,g#4] ~@8", // E E5 E
  K: "[b3,e4] [e4,g#4] [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] ~ [b3,e4,g#4] [e4,g#4] ~@8", // E5 E
  L: "[b3,e4,g#4] [e4,g#4] [b3,e4,g#4]!2 [b3,e4] ~ [b3,e4,g#4]!2 ~@8", // E E5 E
  M: "[e4,g#4]!3 [b3,e4] [b3,e4,g#4] ~ [b3,e4,g#4] [e4,g#4] ~@8, b3@3 ~@13", // E E5 E
  N: "[b3,e4] [e4,g#4] [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] ~ [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] ~ b3 ~ [a3,d4] ~", // E5 E D5
  O: "[b3,e4] g#4 [b3,e4] [e4,g#4] e4 ~ e4 [e4,g#4] e4 ~@7", // E5 E
})).s("gm_electric_guitar_clean").gain(0.38).pan(0.4)

// chords · electric guitar clean · "CLEAN GTR" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@5 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A E C D A B C D A
  B C D A B C D A B C D A B C D A B C D A B C D A F G H I
>`.pickRestart({
  A: "~@3 b3 g#4 ~@11", B: "g#4 ~@11 d#4 ~@3", C: "~@4 g#4 ~@11", D: "~@3 g#4 ~@12", E: "g#4 ~@15",
  F: "g#4 ~@8 b3 ~@2 d#4 ~@3", G: "g#4 e4 g#4 b3 [b3,g#4] ~ [b3,g#4] b3 [b3,g#4] [b3,e4,g#4]!2 ~ b3 ~ [a3,d4] ~",
  H: "[e4,g#4]!3 [b3,e4,g#4]!2 ~ [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] [e4,g#4] [b3,e4,g#4] ~ b3 ~ [a3,d4] ~, b3@3 ~@13", // E D5
  I: "[b3,e4,g#4] [e4,g#4] [b3,e4]!2 [b3,e4,g#4] ~ [b3,e4,g#4] [e4,g#4] ~@8", // E E5 E
})).s("gm_electric_guitar_clean").gain(0.22).pan(0.4)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean_3 = note(`<
  ~
  [~@6 d3 ~@3 g3 ~@5]
  [~@3 e3 ~@2 d3 ~@9]
  [~@6 d3 ~@3 g3@2 ~@4]
  [~@6 d3 ~@9]!86
>`).s("gm_electric_guitar_clean").gain(0.44).pan(0.7)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar_2 = note("<~@2 [~@3 e2 ~@12] ~@87>").s("gm_overdriven_guitar").gain(0.24).pan(0.3)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A@4 B C@2 D E@3 F A G A H A I A J A E@2 A B C B K L M L N O E O E O E O E O P O@4 Q E O L E R E@3 L E@3 S E@5 T E
  T E@16 U
>`.pickRestart({
  A: "x ~@2 x ~@4 x ~ x!2 ~@4", B: "x ~@2 x ~@4 x!4 ~@4", C: "x ~ x!2 ~@4 x!4 ~@4", D: "x ~ x!2 ~@4 x!4 ~ x ~@2",
  E: "x ~ x!2 ~@4 x ~ x!2 ~@4", F: "x ~ x!2 ~@3 x ~@2 x ~@4 x", G: "x ~@2 x ~@4 x ~ x!2 ~ x ~@2",
  H: "x ~@2 x ~@5 x ~ x!2 ~@3", I: "x ~@2 x ~@4 x!2 ~@3 x ~@2", J: "x ~@2 x ~@4 x!2 ~ x ~ x ~@2",
  K: "x ~@2 x ~@4 x ~@7", L: "x ~ x!2 ~@4 x ~ x!2 ~ x ~@2", M: "x ~ x!2 ~@2 x ~ x ~@2 x ~ x ~@2",
  N: "x ~@2 x ~@7 x ~ x ~@2", O: "x ~ x!2 ~@4 x ~@2 x ~@4", P: "x ~ x!2 ~@4 x!2 ~@6",
  Q: "x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@3", R: "x ~ x!2 ~@2 x ~@9", S: "x ~ x!2 ~@4 x ~@7", T: "x ~ x!2 ~@4 x!2 ~ x ~ x ~@2",
  U: "x ~ x!2 ~@3 x ~@8",
})).gain(0.44)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B C D@2 E F@2 G D@2 H I J D J K L M C N F B@2 D G@3 O D G F P E D F D Q D F D G R G@4 S T G F D U D@3 C D@3 V
  D@2 H D C N D N D@14 W ~@2
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@2 x ~ x ~@2 x ~ x ~", D: "~@4 x ~@2 x ~ x ~@2 x ~ x!2",
  E: "~@4 x ~@2 x ~@4 x ~@3", F: "~@4 x ~@2 x ~@4 x ~@2 x", G: "~@4 x ~@2 x ~@4 x ~ x!2",
  H: "~@4 x ~@2 x ~ x ~@2 x ~@2 x", I: "~@2 x ~ x ~ x!2", J: "~@4 x ~@2 x ~ x ~@2 x ~@3",
  K: "~@4 x ~@2 x!2 ~ x ~@2 x!3", L: "x ~@3 x ~@2 x ~ x ~@2 x ~@3", M: "~@4 x ~@2 x ~@2 x ~@3 x!2",
  N: "~@4 x ~@2 x ~@7 x", O: "~@4 x ~@4 x!5 ~@2", P: "~@4 x ~@4 x!2 ~ x ~ x!2", Q: "~@4 x ~@2 x ~@4 x ~ x ~",
  R: "~@4 x ~@2 x ~@2 x ~ x ~ x!2", S: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", T: "~ x ~@2 x ~@2 x ~ x ~@2 x ~ x!2",
  U: "~@4 x ~@2 x ~@6 x ~", V: "~@4 x ~@2 x ~ x ~@2 x!2 ~@2", W: "~ x ~@2",
})).gain(0.44)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@56 A ~@7 B ~@2 C ~@19 D E F>".pickRestart({
  A: "~@13 x ~@2", B: "~ x", C: "~@7 x", D: "~@7 x ~ x ~@2 x ~ x!2", E: "~@4 x ~@2 x ~ x ~@2 x ~ x!2", F: "~@2 x!2 ~@4",
})).gain(0.22)

// drums · low tom
const low_tom = s("lt").struct("<~@22 [~@3 x] ~@9 [~@13 x!3] ~@31 [~@10 x!2 ~@2 x!2] ~@25>").gain(0.38)

// drums · hihat
const hihat = s("hh").struct("<~@5 [~@7 x] [~@3 x ~@3 x] [~@3 x ~@4]!2 ~@8 [~@7 x] ~@72>").gain(0.33)

// drums · open hat
const open_hat = s("oh").struct("<~@5 [~@3 x] [~ x ~ x] [~ x ~@2]!2 ~@8 [~@3 x] ~@72>").gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct("<~ x!4 ~@48 [x ~@2 x] [~@3 x]!2 ~@34>").gain(0.55)

// drums · china
const china = s("cr").struct("<~@8 x ~@11 [~ x] ~@12 x ~@56>").gain(0.38)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@5 A B C D E@3 F E@3 G F E@2 H E A F I E@7 A J E@2 K L E@8 L E@6 L I M N E@32 N
>`.pickRestart({
  A: "x!3 ~", B: "x!2", C: "x ~@3 x!4", D: "~ x", E: "x ~ x ~ x!3 ~", F: "x ~ x ~ x!2 ~@2", G: "x ~ x ~@2 x ~@2",
  H: "x!2 ~@2", I: "x ~ x ~ x!4", J: "~@2 x ~ x!3 ~", K: "x ~ x!2 ~@2 x ~", L: "x!4", M: "x!7 ~",
  N: "x ~@3 x ~@2 x ~@8",
})).gain(0.33)

// drums · congas
const congas = s("conga:13").struct("<~@5 [~ x ~@2]!85>").gain(1.05)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@5 A B@8 A B@8 A B@8 A B@8 A B@8 A B@2 C@4 B@2 A B@8 A B@8 A B@8 A B@2 D
>`.pickRestart({
  A: "x ~ x!2 ~@6 x!2 ~@4", B: "x ~ x!2 ~@4 x ~ x!2 ~@4", C: "x ~ x!2 ~@12", D: "x ~ x!2 ~@4 x ~@7",
})).gain(1.05)

// drums · congas
const congas_3 = s("conga:33").struct("<~@5 [~@3 x]!48 ~@4 [~@3 x]!32 ~>").gain(1.05)

stack(
  bass, flute, overdriven_guitar, electric_guitar_clean, electric_guitar_clean_2, electric_guitar_clean_3,
  overdriven_guitar_2, kick, snare, snare_soft, low_tom, hihat, open_hat, mid_tom, china, ride_bell, congas, congas_2,
  congas_3
)

More by Guess Who