Strudelify
Your Woman cover art

Women in Technology

Your Woman

White Town

KeyG minorTempo100 bpm
0:00/0:00
// Your Woman — White Town
// 100 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: duplicate parts dropped: ch 3 "Bass 2" synth bass 1 (copy of ch 1 "Bass" acoustic bass)
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · acoustic bass · "Bass"
const bass = note(`<
  ~@2 A B A B A B A B A B A B A B A B A B A B A B A B C D E F A B A B A B A B A B A B A B A B A B A B A B A B A B A B C
  D E F A B A B A B A B A B A B A B A B ~@4 E F E F C D E F A B A B A B A B A B A B A B A B ~@5
>`.pickRestart({
  A: "g1 ~ g1@2 ~@2 g1@2 eb1 ~ eb1@2 ~@2 eb1@2", B: "c1@2 c1@2 ~@2 c1@2 f1 ~ f1@2 gb1 ~ gb1 ~",
  C: "gb1 ~ gb1@3 ~ gb1@2 f1 ~ f1@2 ~@2 f1@2", D: "eb1 ~ eb1@2 ~@2 eb1@2 gb1@2 ab1 gb1@2 ab1 bb1@2",
  E: "gb1 ~ gb1@2 ~@2 gb1@2 f1 ~ f1@2 ~@2 f1@2", F: "eb1@2 eb1@2 ~@2 eb1@2 gb1@2 ab1 gb1@2 ab1 bb1@2",
})).s("gm_acoustic_bass").gain(0.41)

// chords · piano
const piano = note(`<
  ~@6 A B A B A B A B A B A B A B A B A B A B C D E F A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D E F A
  B A B A B A B A B A B A B A B ~@8 C D E F A B A B A B A B A B A B A B A B ~@5
>`.pickRestart({
  A: "g3@2 [g3,bb4,d5]@3 ~ [g3,g4,bb4,d5]@2 eb3@2 [g4,bb4]@4 [eb3,eb4]@2, ~@5 eb3 ~@2", // Gm Eb
  B: "c3 [c3,eb4,g4] ~ [c3,eb4,g4] [a4,c5] [f3,f4] [bb4,db5] gb3, gb4 ~@7 f3 ~@3 gb3 ~ gb4 ~", // Cm Am F Bbm
  C: "gb3@2 gb4 gb3 ~@2 f3@2, [bb4,db5]@9 ~ [f4,a4,c5]@4 ~@2, gb4@3 ~@5 f3@4 ~@4", // Bbm F
  D: "[eb3,eb4,g4,bb4]@2 ~ eb3@5, ~@4 [g4,bb4]@9 ~@3, ~@4 eb4@7 ~@5", // Eb Gm
  E: "[gb3,bb4,db5]@4 ~@2 gb3@2 ~@2 f4@3 ~ f4@2, gb4@3 ~ [gb4,bb4,db5]@4 f3@6 ~@2, ~@5 [a4,c5]@3", // Gb Am
  F: "~@6 g4@7 ~@3, g3@11 ~@5, [eb3,f3] eb3@5 ~@2, ~ bb3@11 ~@4", // Ebsus2
})).s("gm_piano").gain(0.27)

// other · electric guitar muted · "Guitar 1"
const electric_guitar_muted = note(`<
  ~@22 A B C D ~@28 A B C D ~@12 A B C D A B C D ~@20 A B C D A B C D ~@5
>`.pickRestart({
  A: "~@2 [a3,a4]!2 ~ [a3,a4] [g3,a4] [bb3,g4] [bb3,bb4]!2 ~ [bb3,bb4] ~ bb3 [bb3,bb4] [c4,c5]", // A Gsus2 Eb Bb C
  B: "~ [c4,c5] c5 c4 [c4,c5] ~ [c4,c5] ~ [f3,f4] ~ [f3,f4] ~ [gb3,gb4] ~ [gb3,gb4]@2", // C F Gb
  C: "~@3 a3 ~@2 a3 [g3,g4] [a3,bb3,a4] bb4 bb3 [bb3,bb4] ~ [bb3,bb4] ~ [bb3,bb4], ~@2 [a3,g4]@2 ~ [a3,a4]@2 ~@9", // G Bbmaj7 Bb A7 A
  D: "[c4,c5] ~ [c4,c5] c4 c5 c4 [c4,c5] db4 [db4,db5]@4 [c4,c5]@3 ~", // C Db C
})).s("gm_electric_guitar_muted").gain(0.29)

// other · electric guitar clean · "Guitar 2"
const electric_guitar_clean = note(`<
  ~@22 A B C D ~@28 A B C D ~@12 A B C D A B C D ~@20 A B C D A B C D ~@5
>`.pickRestart({
  A: "a4@3 g4 bb4@4", B: "c5@8 f4 ~ f4 ~ gb4 ~ gb4@2", C: "g4@3 g4 bb4@4", D: "c5@6 c5@2 db5@4 c5@3 ~",
})).s("gm_electric_guitar_clean").gain(0.23)

// chords · flute
const flute = note(`<
  A B A B A B ~@24 A B A B A B A B ~@24 A B A B A B A B A B A B A B A B ~@12 A B A B A B A B A B A B A B A B C D E F ~
>`.pickRestart({
  A: "[d4,g4]@7 ~ [bb3,eb4]@7 ~", B: "[g3,c4]@7 ~ [gb3,d4]@8", C: "[d3,g3]@15 ~", D: "[bb2,eb3]@7 ~", E: "[g2,c3]@7 ~",
  F: "gb2@15 ~, d3@13 ~@3",
})).s("gm_flute").gain(0.17)

// chords · cello · "Cellos"
const cello = note(`<
  A B A B A B ~@24 A B A B A B A B ~@24 A B A B A B A B A B A B A B A B ~@12 A B A B A B A B A B A B A B A B C@2 D@2 ~
>`.pickRestart({
  A: "[g3,bb4]@7 ~ eb3@7 ~, ~@7 g4@8 ~", B: "[c3,eb4]@7 ~ a3@7 ~, ~@7 d3@7 ~@2",
  C: "[[g2,bb3]@7 ~ eb2@7 ~, ~@7 g3@8 ~]/2", D: "[[c2,eb3]@7 ~ a2@7 ~, ~@15 d2@15 ~@2]/2",
})).s("gm_cello").gain(0.17)

// other · trombone · "Trumpet"
const trombone = note(`<
  A B A B A B ~@24 A B A B A B A B ~@24 A B A B A B A B A B A B A B A B ~@12 A B A B A B A B A B A B A B A B C D@2 E ~
>`.pickRestart({
  A: "g5@3 ~ d5@3 bb5 g5@4 d5@3 bb5", B: "g5@4 d5@3 bb5 g5@4 d5@4", C: "g4@3 ~ d4@3 bb4", D: "g4@4 d4@3 bb4",
  E: "g4 d4",
})).s("gm_trombone").gain(0.27)

// chords · drawbar organ · "Organ"
const drawbar_organ = note(`<
  ~@38 A B A B A B A B A B A B A B A B A B A B C D C D A B A B A B A B A B A B A B A B ~@8 C D C D A B A B A B A B A B A
  B A B A B ~@5
>`.pickRestart({
  A: "[g3,g4,bb4] [eb3,eb4], d4@3 ~ [g4,bb4]@3 ~", B: "[c3,c4,eb4,g4]@2 [f3,f4] [gb3,gb4], ~ [c4,a4]",
  C: "[gb3,gb4,bb4,db5] [f3,f4,a4,c5]", D: "[eb3,eb4,g4,bb4] ~",
})).s("gm_drawbar_organ").gain(0.07)

// drums · kick
const kick = s("bd").struct("<~@6 [x!2 ~ x!3 ~ x]!75 ~ [x!2 ~ x!3 ~ x]!24 [x!2 ~@2]!4 ~>").gain(0.48)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A B C B C B C B C B C B C B C B C B C B C B C B@2 C B C B C B C@2 B C B C B C B C B C B C B C B C B C B C B C B@2
  C B C B C B C B C B C B C B C B C B ~ A B C B C B C B@2 C B C B C B C B C B C B C B C D E@3 ~
>`.pickRestart({
  A: "~@4 x ~ x!3 ~ x ~ x ~ x!2", B: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x!2", C: "x ~@3 x ~ x!3 ~ x ~ x ~ x!2", D: "x!2",
  E: "~ x",
})).gain(0.35)

// drums · clap
const clap = s("cp").struct("<~@6 [~ x ~ x]!74 [~ x ~@2]!2 [~ x ~ x]!24 [~ x]!4 ~>").gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@106 [x!2 ~@2]!2 [x!3 ~]!2 ~>").gain(0.69)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@6
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!75
  ~
  [~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x]!24
  [~ x ~@2]!4
  ~
>`).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@6 [x!8]!75 [~ x ~@2] [x!8]!24 [~ x]!4 ~>").gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~@81 [x ~@2 x!2 ~@3] ~@29>").gain(0.69)

// drums · tambourine
const tambourine = s("tb").struct("<~@6 [x!8]!75 ~ [x!8]!24 [~ x ~@2]!4 ~>").gain(0.35)

// drums · congas
const congas = s("conga:13").struct("<~@81 [~@3 x] ~@29>").gain(2.21)

// drums · congas
const congas_2 = s("conga:18").struct("<~@81 [~@3 x ~@12] ~@29>").gain(2.21)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@6 [x!8]!75 ~ [x!8]!24 ~@5>").gain(1.75)

stack(
  bass, piano, electric_guitar_muted, electric_guitar_clean, flute, cello, trombone, drawbar_organ, kick, snare, clap,
  low_tom, hihat, open_hat, high_tom, tambourine, congas, congas_2, cabasa
)