Strudelify

She Drives Me Crazy

Fine Young Cannibals

KeyD♭ majorTempo112 bpm
0:00/0:00
// She Drives Me Crazy — Fine Young Cannibals
// 112 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · distortion guitar · "P1-Distortion Guitar #"
const distortion_guitar = note(`<
  ~@4 A B A C D B E C ~@16 A C A B E C A C ~@16 E F E F E F E F ~@16 E F E F E F E F E F E F E F E F E F E F E F E F E F
  E F G ~@2
>`.pickRestart({
  A: "[db2,ab2,db3,f3] ~ [gb2,bb2,db3,gb3] ~", B: "[f2,bb2,db3,f3]@3 [eb2,ab2,c3,eb3]@4 ~",
  C: "[f2,bb2,db3,f3]@5 ~ [eb2,ab2,c3,eb3]@8 ~@2", D: "[db2,ab2,db3,f3]@4 ~@4 [gb2,bb2,db3,gb3]@5 ~@3",
  E: "[db2,ab2,db3,f3]@5 ~@3 [gb2,bb2,db3,gb3]@5 ~@3", F: "[f2,bb2,db3,f3]@6 [eb2,ab2,c3,eb3]@9 ~",
  G: "[db2,ab2,db3,f3]@5 ~@11", // Db
})).s("gm_distortion_guitar").gain(0.29).pan(0.7)

// bass · electric bass pick · "P2-Pick Bass Plus"
const bass = note(`<
  ~@12 A B C D E B A F G F C H A F C I J K L M N O P Q A B A B E B E F R F E F A F C I S K S T U O V W R F E F A F C I A
  B A B E B E F S K S T U O V W S K S T U O V W S K S T U O V W S K S T X ~@2
>`.pickRestart({
  A: "db2@3 db2@2 ~ gb1@2 ~@8", B: "bb1@3 bb1@3 ab1@2 ~@8", C: "db2@2 ~ db2@2 ~ gb1@2 ~@8",
  D: "bb1@2 ~ bb1@3 ab1@2 ~@8", E: "db2@3 db2@3 gb1@2 ~@8", F: "bb1 bb1@2 bb1@3 ab1@2 ~@8",
  G: "db2 db2@2 ~ db2@2 gb1@2 ~@8", H: "bb1 bb1@2 bb1@2 ~ ab1@2 ~@8", I: "bb1 bb1@2 bb1@3 ab1@2 ~@6 c2@2",
  J: "db2@3 ~ db2@4 gb1@2 gb1@4 gb1@2", K: "bb1 bb1@2 ab1@3 ~ c2", L: "db2@3 ~ db2@4 gb1 ~ gb1@3 ~ gb1@2",
  M: "bb1@2 bb1@3 ~ ab1@7 ~ c2@2", N: "db2@3 ~ db2@4 gb1@2 gb1@3 ~ ab1@2", O: "bb1@2 bb1@3 ~ ab1@8 c2@2",
  P: "db2@3 ~ db2@3 ~ gb1@2 gb1@3 ~ gb1@2", Q: "bb1 ~ bb1@3 ~ ab1@7 ~@3", R: "db2 db2@3 db2@2 gb1@2 ~@8",
  S: "db2@2 db2@2 gb1 gb1@2 gb1", T: "bb1@2 ~ bb1@3 ab1@7 ~ c2@2", U: "db2@4 db2@4 gb1@2 gb1@3 ~ ab1@2",
  V: "db2@4 db2@4 gb1@2 gb1@3 ~ gb1@2", W: "bb1@2 bb1@4 ab1@7 ~@3", X: "db2!2 ~@2",
})).s("gm_electric_bass_pick").gain(0.35)

// other · overdriven guitar · "P4-Overdriven Guitar #"
const overdriven_guitar = note("<~ A ~ A ~@56 A ~ A ~ A ~ A ~@40>".pickRestart({
  A: "[db3,db4]!2 [b2,b3]!2 ~@4", // Db B
})).s("gm_overdriven_guitar").gain(0.64).pan(0.9)

// chords · percussive organ · "P5-Jazz Organ"
const percussive_organ = note(`<
  ~@13 A ~ B ~ C ~ A ~ A ~ A ~ C ~ C ~ A ~ A ~ A ~ A ~ A ~ C ~ C ~ A ~ A ~ C ~ C ~ C ~ D ~ A ~ A ~ C ~ A ~ C ~ C ~ C ~ A
  ~ C ~ E ~ A ~ D ~ A ~ A ~ E ~ D ~ A ~ A ~ E ~ D ~ A ~ A ~ E ~ D ~ A ~@3
>`.pickRestart({
  A: "[bb4,db5,f5]@5 ~@11", B: "~ bb4@3 ~@12, [db5,f5]@3 ~@13", C: "[bb4,db5,f5] ~@3", D: "[bb4,db5,f5]@3 ~@5",
  E: "~ [bb4,db5,f5]@4 ~@11", // Bbm
})).s("gm_percussive_organ").gain(0.27).pan(0.6)

// chords · reed organ · "P6-Synth Reed Dark"
const reed_organ = note(`<
  ~@20 A B A B A B A B C B C B C B C B ~@8 A B A B A B A B C B C B C B C B A B A B A B A B A B A B A B A B C B C B C B C
  B C B C B C B C B C B C B C B C B C B C B D ~@2
>`.pickRestart({
  A: "[ab3,db4,f4]@3 [bb3,db4,gb4]@5", B: "[bb3,db4,f4]@3 [ab3,c4,eb4]@5", C: "[ab3,db4,f4] [bb3,db4,gb4]",
  D: "[ab3,db4,f4] ~", // Db
})).s("gm_reed_organ").gain(0.15).pan(0.3)

// chords · electric guitar clean · "P7-Clean Guitar"
const electric_guitar_clean = note("<~@61 A ~ B ~ B ~ C ~ B ~ C ~ B ~ A ~@31>".pickRestart({
  A: "[bb3,e4,ab4,db5]!5 ~ [bb3,e4,ab4,db5] ~@2 [c4,gb4,bb4,eb5] ~@2 [c4,gb4,bb4,eb5] ~@3", // Bbm7b5 Cm7b5
  B: "[bb3,e4,ab4,db5]!5 ~ [bb3,e4,ab4,db5] ~@2 [c4,gb4,bb4,eb5] ~@2 [c4,gb4,bb4,eb5]!2 ~@2", // Bbm7b5 Cm7b5
  C: "[bb3,e4,ab4,db5]!5 ~ [bb3,e4,ab4,db5] ~@2 [c4,gb4,bb4,eb5] ~@2 [c4,gb4,bb4,eb5]!3 ~", // Bbm7b5 Cm7b5
})).s("gm_electric_guitar_clean").gain(0.29).pan(0.8)

// chords · lead 3 calliope · "P8-Calliope Lead"
const lead_3_calliope = note(`<
  ~@12 A ~ B ~ A ~ C ~ D E F G D H F I J K L K M N O ~ P ~ Q ~ R ~ S ~ T H U V T W X Y Z K AA K M AB O ~@9 AC ~ C ~ AD ~
  AE K Z K AA K M AB O K Z K AA K M AB O K Z K AA K M AB O K Z K AA K AF ~@2
>`.pickRestart({
  A: "f5@3 ~ ab5@2 bb5@6 ~@4, e5 ~@15", B: "f5 db5 eb5!2 db5 ~@3, e5 ~@15",
  C: "f5@2 db5@2 eb5@2 eb5@2 db5@3 ~@5, e5 ~@15", D: "~@4 f5@2 ab5@2 bb5@3 ~@5, ~@4 e5 ~@11",
  E: "db5 db5@2 ~ db5@2 eb5@4 ~@6", F: "~@4 f5@2 ab5@2 bb5@6 db5 ~, ~@4 e5 ~@11",
  G: "db5@3 ~ db5@2 eb5@4 ~@6, ~@6 d5 ~@9", H: "db5@3 ~ db5@2 eb5@4 f5 ~@5", I: "db5@3 ~ db5@2 eb5@5 ~@3 [db4,db5] ~",
  J: "[f4,f5]@3 ~ [f4,f5]@4 [eb4,eb5]@2 [db4,db5]@2 ~@4, [e4,e5] ~@3 [e4,e5] ~@11", K: "~@14 [db4,db5] ~",
  L: "[f4,f5]@3 ~ [f4,f5]@4 [eb4,eb5]@2 [db4,db5] ~@5, [e4,e5] ~@3 [e4,e5] ~@11", // F Eb Db E
  M: "[f4,f5]@3 ~ [f4,f5]@3 ~ [eb4,eb5]@2 [db4,db5] ~@3 [db4,db5] ~, [e4,e5] ~@3 [e4,e5] ~@11", // F Eb Db E
  N: "[f4,f5] ~ [f4,f5]@2 [eb4,eb5] [db4,db5] [c4,c5] [db4,db5], [e4,e5] ~@3 [e4,e5] ~@11", // F Eb Db C Db E
  O: "~ [ab3,ab4] ~@6, ~ [bb3,bb4]@2 ~@13", P: "f5@2 ab5 bb5@2 ~@3, e5 ~@15",
  Q: "f5@2 db5@2 eb5@2 eb5@2 db5@5 ~@3, e5 ~@15", R: "f5@3 ~ ab5@2 bb5@5 ~@5, e5 ~@15",
  S: "f5@2 eb5@2 ~@2 eb5@2 db5@5 ~@3, e5 ~@15", T: "~@4 [e5,f5] ~ ab5@2 bb5@5 ~ db5 ~",
  U: "~@4 [e5,f5] ~ ab5@2 bb5@6 db5 ~", V: "db5@3 ~ db5@2 eb5@5 ~@5", W: "db5@3 ~ db5@2 f5@3 ~ eb5 ~@5, ~@6 e5 ~@9",
  X: "~@4 f5@2 ab5@2 bb5@3 ~@3 db5 ~, ~@4 e5 ~@11", Y: "db5@4 db5@2 d5 eb5@4 ~@3 [db4,db5] ~",
  Z: "[f4,f5]@3 ~ [f4,f5]@3 ~ [eb4,eb5]@2 [db4,db5]@2 ~@4, [e4,e5] ~@3 [e4,e5] ~@11", // F Eb Db E
  AA: "[f4,f5]@3 ~ [f4,f5]@3 ~ [eb4,eb5]@2 [db4,db5] ~@5, [e4,e5] ~@3 [e4,e5] ~@11", // F Eb Db E
  AB: "[f4,f5]@2 ~@2 [f4,f5]@3 ~ [eb4,eb5]@2 [db4,db5]@2 [c4,c5]@2 [db4,db5]@2, [e4,e5] ~@3 [e4,e5] ~@11", // F Eb Db C Db E
  AC: "~@2 f5 ab5 bb5 ~@3, ~@4 e5 ~@11", AD: "f5@3 ~ ab5@2 bb5@3 ~@7, e5 ~@15",
  AE: "f5@2 db5@2 eb5 ~ eb5@2 db5@5 ~@3, e5 ~@15", AF: "[f4,f5]@3 ~@13, [e4,e5] ~@15",
})).s("gm_lead_3_calliope").gain(0.36).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  A B A B A B A C A B A B A B A B A B A C A B A B A B A C A B A B A B A B A B A B A B A C A B A B A B A C A B A B A B A
  B A B A B A B A C A B A B A B A C 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 D ~@2
>`.pickRestart({
  A: "x!2 ~ x!2 ~@3", B: "x ~@2 x!2 ~@3", C: "x!2", D: "x!2 ~@6",
})).gain(0.44)

// drums · clap
const clap = s("cp").struct("<~@36 A ~ A ~ A@2 ~@2 A ~@2 A ~ A ~ B ~@15 B ~ A ~ A ~ A ~ B ~@31>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4",
})).gain(0.62)

// drums · snare
const snare = s("sd").struct("<A@7 B A@11 B A@7 B A@15 B A@7 B A@15 B A@7 B A@28 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@6 x!3 ~@2",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<A@7 B A@11 B A@7 B A@15 B A@7 B A@15 B A@7 B A@28 C ~@2>".pickRestart({
  A: "x!16", B: "x!6 ~@2 x!3 ~ x ~ x ~", C: "x!4 ~@12",
})).gain(0.31)

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@11 A ~@7 A ~@15 A ~@7 A ~@15 A ~@7 A ~@31>".pickRestart({
  A: "~@15 x",
})).gain(0.37)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@11 A ~@7 A ~@15 A ~@7 A ~@15 A ~@7 A ~@31>".pickRestart({
  A: "~@7 x",
})).gain(0.37)

// drums · open hat
const open_hat = s("oh").struct("<~@7 A ~@11 A ~@7 A ~@15 A ~@7 A ~@15 A ~@7 A ~@31>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.44)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@19 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "x",
})).gain(0.37)

// drums · bongos
const bongos = s("bongo:18").struct(`<
  ~@8 A B A B ~@16 A B A B A B A B ~@16 A B A B A B A B ~@16 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 ~@3
>`.pickRestart({
  A: "~@8 x!3 ~@5", B: "~@7 x!4 ~@5",
})).gain(0.98)

// drums · bongos · soft notes
const bongos_soft = s("bongo:18").struct(`<
  ~@8 A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@7 x ~@8",
})).gain(0.49)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@8 A B A B ~@16 A B A B A B A B ~@16 A B A B A B A B ~@16 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 ~@3
>`.pickRestart({
  A: "~@5 x ~@5 x ~ x ~@2", B: "~@2 x ~@2 x ~@5 x ~ x ~@2",
})).gain(1)

// drums · congas · soft notes
const congas_soft = s("conga:13").struct(`<
  ~@8 A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~ x ~@6",
})).gain(0.6)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@8 A B A B ~@16 A B A B A B A B ~@16 A B A B A B A B ~@16 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 A
  ~@2
>`.pickRestart({
  A: "~ x ~@14", B: "~ x ~@4 x ~@9",
})).gain(1)

// drums · congas
const congas_3 = s("conga:33").struct("<~@8 A@4 ~@16 A@8 ~@16 A@8 ~@16 A@28 B ~@2>".pickRestart({
  A: "x ~@2 x!2 ~@7 x ~ x!2", B: "x ~@2 x ~@12",
})).gain(1)

// drums · congas · soft notes
const congas_soft_2 = s("conga:33").struct(`<
  ~@8 A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(0.6)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~@14 x!2] [x!3 ~@11 x!2]!103 [x!3 ~@13] ~@2>").gain(1.89)

stack(
  distortion_guitar, bass, overdriven_guitar, percussive_organ, reed_organ, electric_guitar_clean, lead_3_calliope,
  kick, clap, snare, hihat, low_tom, mid_tom, open_hat, crash, bongos, bongos_soft, congas, congas_soft, congas_2,
  congas_3, congas_soft_2, cabasa
)

More by Fine Young Cannibals