Strudelify

She Drive Me Crazy

Fine Young Cannibals

KeyD majorTempo112 bpm
0:00/0:00
// She Drive Me Crazy — Fine Young Cannibals
// 112 bpm, 4/4, key D 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 C D C D A B ~@16 C D C D A B A D ~@16 A E A E A E A E ~@16 A E A E A E A E A E A E A E A E A E A E A E A E A E
  A E F ~@2
>`.pickRestart({
  A: "[d2,a2,d3,f#3]@5 ~@3 [g2,b2,d3,g3]@5 ~@3", B: "[f#2,b2,d3,f#3]@3 [e2,a2,c#3,e3]@4 ~",
  C: "[d2,a2,d3,f#3] ~ [g2,b2,d3,g3] ~", D: "[f#2,b2,d3,f#3]@5 ~ [e2,a2,c#3,e3]@8 ~@2",
  E: "[f#2,b2,d3,f#3]@6 [e2,a2,c#3,e3]@9 ~", F: "[d2,a2,d3,f#3]@5 ~@11",
})).s("gm_distortion_guitar").gain(0.13).pan(0.7)

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

// other · overdriven guitar · "P4-Overdriven Guitar #"
const overdriven_guitar = note("<~ A ~ A ~@56 A ~ A ~ A ~ A ~@40>".pickRestart({
  A: "[d3,d4]!2 [c3,c4]!2 ~@4", // D C
})).s("gm_overdriven_guitar").gain(0.08).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: "[b4,d5,f#5]@5 ~@11", B: "~ b4@3 ~@12, [d5,f#5]@3 ~@13", C: "[b4,d5,f#5] ~@3", D: "[b4,d5,f#5]@3 ~@5",
  E: "~ [b4,d5,f#5]@4 ~@11", // Bm
})).s("gm_percussive_organ").gain(0.1).pan(0.6)

// chords · pad metallic · "P6-Metallic Pad"
const pad_metallic = 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: "[a3,d4,f#4]@3 [b3,d4,g4]@5", B: "[b3,d4,f#4]@3 [a3,c#4,e4]@5", C: "[a3,d4,f#4] [b3,d4,g4]", D: "[a3,d4,f#4] ~",
})).s("gm_pad_metallic").gain(0.06).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: "[b3,f4,a4,d5]!5 ~ [b3,f4,a4,d5] ~@2 [c#4,g4,b4,e5] ~@2 [c#4,g4,b4,e5] ~@3", // Bm7b5 C#m7b5
  B: "[b3,f4,a4,d5]!5 ~ [b3,f4,a4,d5] ~@2 [c#4,g4,b4,e5] ~@2 [c#4,g4,b4,e5]!2 ~@2", // Bm7b5 C#m7b5
  C: "[b3,f4,a4,d5]!5 ~ [b3,f4,a4,d5] ~@2 [c#4,g4,b4,e5] ~@2 [c#4,g4,b4,e5]!3 ~", // Bm7b5 C#m7b5
})).s("gm_electric_guitar_clean").gain(0.09).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: "f#5@3 ~ a5@2 b5@6 ~@4, f5 ~@15", B: "f#5 d5 e5!2 d5 ~@3, f5 ~@15", C: "f#5@2 d5@2 e5@2 e5@2 d5@3 ~@5, f5 ~@15",
  D: "~@4 f#5@2 a5@2 b5@3 ~@5, ~@4 f5 ~@11", E: "d5 d5@2 ~ d5@2 e5@4 ~@6", F: "~@4 f#5@2 a5@2 b5@6 d5 ~, ~@4 f5 ~@11",
  G: "d5@3 ~ d5@2 e5@4 ~@6, ~@6 d#5 ~@9", H: "d5@3 ~ d5@2 e5@4 f#5 ~@5", I: "d5@3 ~ d5@2 e5@5 ~@3 [d4,d5] ~",
  J: "[f#4,f#5]@3 ~ [f#4,f#5]@4 [e4,e5]@2 [d4,d5]@2 ~@4, [f4,f5] ~@3 [f4,f5] ~@11", K: "~@14 [d4,d5] ~",
  L: "[f#4,f#5]@3 ~ [f#4,f#5]@4 [e4,e5]@2 [d4,d5] ~@5, [f4,f5] ~@3 [f4,f5] ~@11", // F# E D F
  M: "[f#4,f#5]@3 ~ [f#4,f#5]@3 ~ [e4,e5]@2 [d4,d5] ~@3 [d4,d5] ~, [f4,f5] ~@3 [f4,f5] ~@11", // F# E D F
  N: "[f#4,f#5] ~ [f#4,f#5]@2 [e4,e5] [d4,d5] [c#4,c#5] [d4,d5], [f4,f5] ~@3 [f4,f5] ~@11", // F# E D C# D F
  O: "~ [a3,a4] ~@6, ~ [b3,b4]@2 ~@13", P: "f#5@2 a5 b5@2 ~@3, f5 ~@15", Q: "f#5@2 d5@2 e5@2 e5@2 d5@5 ~@3, f5 ~@15",
  R: "f#5@3 ~ a5@2 b5@5 ~@5, f5 ~@15", S: "f#5@2 e5@2 ~@2 e5@2 d5@5 ~@3, f5 ~@15", T: "~@4 [f5,f#5] ~ a5@2 b5@5 ~ d5 ~",
  U: "~@4 [f5,f#5] ~ a5@2 b5@6 d5 ~", V: "d5@3 ~ d5@2 e5@5 ~@5", W: "d5@3 ~ d5@2 f#5@3 ~ e5 ~@5, ~@6 f5 ~@9",
  X: "~@4 f#5@2 a5@2 b5@3 ~@3 d5 ~, ~@4 f5 ~@11", Y: "d5@4 d5@2 d#5 e5@4 ~@3 [d4,d5] ~",
  Z: "[f#4,f#5]@3 ~ [f#4,f#5]@3 ~ [e4,e5]@2 [d4,d5]@2 ~@4, [f4,f5] ~@3 [f4,f5] ~@11", // F# E D F
  AA: "[f#4,f#5]@3 ~ [f#4,f#5]@3 ~ [e4,e5]@2 [d4,d5] ~@5, [f4,f5] ~@3 [f4,f5] ~@11", // F# E D F
  AB: "[f#4,f#5]@2 ~@2 [f#4,f#5]@3 ~ [e4,e5]@2 [d4,d5]@2 [c#4,c#5]@2 [d4,d5]@2, [f4,f5] ~@3 [f4,f5] ~@11", // F# E D C# D F
  AC: "~@2 f#5 a5 b5 ~@3, ~@4 f5 ~@11", AD: "f#5@3 ~ a5@2 b5@3 ~@7, f5 ~@15",
  AE: "f#5@2 d5@2 e5 ~ e5@2 d5@5 ~@3, f5 ~@15", AF: "[f#4,f#5]@3 ~@13, [f4,f5] ~@15",
})).s("gm_lead_3_calliope").gain(0.19).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.09)

// 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.12)

// 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.1)

// 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.06)

// 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.07)

// 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.07)

// 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.09)

// 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.07)

// 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.2)

// 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.1)

// 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(0.2)

// 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.12)

// 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(0.2)

// 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(0.2)

// 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.12)

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

stack(
  distortion_guitar, bass, overdriven_guitar, percussive_organ, pad_metallic, 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