Strudelify

American Woman

Lenny Kravitz

KeyC majorTempo85 bpm
0:00/0:00
// American Woman — Lenny Kravitz
// 85 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 78 bars on a 16-step grid, each part at one level. 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 · [...]/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
const bass = note("<~@12 A@4 ~@4 A@4 ~@4 A@4 ~@4 A@4 B@3 A@5 ~ C ~ C ~ C A@8 ~@16>".pickRestart({
  A: "c2!2 ~ c2!2 ~ a#1 ~ c2 ~@7", B: "c2!2 ~ c2!2 ~ a#1 ~@9", C: "c2!2 ~ c2!2 ~@11",
})).s("gm_fretless_bass").gain(0.56)

// other · piano
const piano = note(`<
  ~@3 A B A B ~@4 C D A B ~@4 A B A B E F@2 G@2 D A B ~@12 A B A B E F@2 H@2 ~ C D A B A B A B ~@17
>`.pickRestart({
  A: "~@11 g4 a4@4", B: "g4", C: "~@7 a4", D: "~ g4@15", E: "~@15 d#4", F: "[f4@6 d#4 g4@2 f4@16 ~@7]/2",
  G: "[~@2 f4 d#4 f4@2 d#4 g4@2 f4@16 ~@5 a4@2]/2", H: "[~@2 f4 d#4 f4@2 d#4 g4@2 f4@16 ~@7]/2",
})).s("gm_piano").gain(0.05)

// bass · synth bass 2
const bass_2 = note("<~@62 A B C D B C D B C D B C D B C D>".pickRestart({
  A: "~@2 a#0 c1 ~ d#1 ~ f1 ~ f1 g1 a#1 c2 g1 a#1 c2", B: "~ d#1 ~ f1 ~ f#1 g1 a#1 c2 g1 a#1 c2 ~ d#1 ~ f1",
  C: "~ f#1 g1 a#1 c2 g1 a#1 c2 ~ d#1 ~ f1 ~ f#1 g1 a#1", D: "c2 g1 a#1 c2 ~ d#1 ~ f1 ~ f#1 g1 a#1 c2 g1 a#1 c2",
})).s("gm_synth_bass_2").gain(0.22).pan(0.3)

// other · distortion guitar
const distortion_guitar = note("<~@16 A B A B ~@16 A B A B ~@38>".pickRestart({
  A: "c3@2 c3 a#2 ~ a#2!2 g2 c3 a#2!2 ~ a#2@2 ~@2", B: "c3@2 c3 a#2 ~ a#2!2 g2 c3 a#2 d#3 ~ d#3@2 ~@2",
})).s("gm_distortion_guitar").gain(0.43).pan(0.3)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  A B C B C B C B ~@4 C B C B ~@4 C B C B ~@4 C B C B D E D E C B C B A B C B C B C B ~ F ~ F ~ F C B C B C B C B ~@16
>`.pickRestart({
  A: "[g3,c4]!5 ~ [f3,a#3] [g3,c4] ~@4 f2@2 [g#2,c#3] ~", // C5 A#5 C5 C#5
  B: "[g3,c4]!5 ~ [f3,a#3] [g3,c4] ~@2 [g3,c4]!2 [d#4,f4] d#4 [g3,c4]!2", // C5 A#5 C5 D#sus2 C5
  C: "[g3,c4]!5 ~ [f3,a#3] ~ [g3,c4] ~ [g3,c4]!2 f2@2 [g#2,c#3] ~", // C5 A#5 C5 C#5
  D: "[f#3,b3]!5 ~ [e3,a3] ~ [f#3,b3] ~ [f#3,b3]!2 e2@2 [g2,c3] ~", // B5 A5 B5 C5
  E: "[f#3,b3]!5 ~ [e3,a3] [f#3,b3] ~@2 [f#3,b3]!2 [d4,e4] d4 [f#3,b3]!2", F: "[g3,c4]!5 ~ [f3,a#3] [g3,c4] ~@8",
})).s("gm_distortion_guitar").gain(0.47)

// chords · distortion guitar
const distortion_guitar_3 = note("<~@16 A B C B ~@20 D ~ E B ~@10 A B C B A B C B ~@16>".pickRestart({
  A: "[c4,g4]@2 ~@4 [a#3,f4] ~ [c4,g4]@2 ~@6", B: "[a#3,f4]@2 ~@4 [a#3,f4] ~ [c4,g4] ~@3 f3@2 g#3 ~",
  C: "[a#3,f4]@2 ~@4 [a#3,f4] ~ [c4,g4]@2 ~@6", D: "~@4 [c4,d#4]@3 ~@9", E: "[c4,g4]@2 ~@4 [a#3,f4] ~@9",
})).s("gm_distortion_guitar").gain(0.11).pan(1)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@62 A B A B A B A B A B A B A B A B>".pickRestart({
  A: "[a#2,g3] ~ [g3,c4]!4 [a2,f3] ~ [a#2,g3] ~ [g3,c4]!3 ~ [g3,c4]!2", // D# C5 Dm D# C5
  B: "[a#2,g3] ~ [g3,c4]!4 [a2,f3] ~ [a#2,g3] ~ [g3,c4]!2 [f3,g3,c4] ~ g#3 ~", // D# C5 Dm D# C5 Fsus2
})).s("gm_electric_guitar_clean").gain(0.29).pan(1)

// chords · electric guitar clean
const electric_guitar_clean_2 = note(`<
  ~@16 A B A B ~@22 C B ~@10 A B A B A B A B A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "[c3,g3]@2 ~@4 [a#2,f3] ~ [c3,g3]@2 ~@6", B: "[c3,g3]@2 ~@4 [a#2,f3] ~ [c3,g3] ~@3 [f2,c3]@2 [g#2,d#3] ~",
  C: "[c3,g3]@2 ~@4 [a#2,f3] ~@9", // C5 A#5
})).s("gm_electric_guitar_clean").gain(0.3).pan(0)

// other · distortion guitar
const distortion_guitar_4 = note("<~@32 A B C D E F G H I ~@37>".pickRestart({
  A: "~@9 a4@4 ~ [a4,b4] f#4", B: "e4 ~ d4 b3 d4 e4!2 d4 b3 d4 d4@4 b3@2, ~ e4@2 ~@13",
  C: "~@4 e3 f3 f#3 a3 b3 d4 e4!2 d4 b3 d4 e4", D: "f#4 ~ a4 e4@2 b3 d4 d4@3 a4@2 a4!4",
  E: "a4 a#4!4 a4!4 g4!4 [f4,f#4,g4] e4 ~", F: "~ c5 ~ d#5@2 d#5 ~ [c5,d#5] c5 a#4 g4 a#4 c5 ~ c5 a#4",
  G: "a#4!10 f4!3 [d#4,f4] [c4,d#4] d#4", H: "f4!3 d#4 c4 d#4 f4 d#4@3 c4 g3 a#3 c4@3", I: "[c4,d#4]@3 ~@13",
})).s("gm_distortion_guitar").gain(0.45).pan(0.9)

// drums · kick
const kick = s("bd").struct(`<
  [x ~@2 x ~@4]!2
  [x ~@2 x!2 ~@3]!38
  [x ~@2 x ~@4]!4
  [x ~@2 x!2 ~@3]!33
  [x ~@5 x ~ x ~@6 x]
>`).gain(0.56)

// drums · clap
const clap = s("cp").struct("~ x ~ x").gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@77 [~@9 x ~@2 x!3 ~]>").gain(0.64)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@40 [~@3 x ~@4]!4 ~@34>").gain(0.56)

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

// drums · tambourine
const tambourine = s("tb").struct("~ x ~ x").gain(0.56)

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

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!40 ~@4 [~ x ~ x]!34>").gain(0.64)

stack(
  bass, piano, bass_2, distortion_guitar, distortion_guitar_2, distortion_guitar_3, electric_guitar_clean,
  electric_guitar_clean_2, distortion_guitar_4, kick, clap, snare, pedal_hat, open_hat, tambourine, crash, rim
)

More by Lenny Kravitz