Strudelify
Just a Girl cover art

1995 · Tragic Kingdom

Just a Girl

No Doubt

KeyD majorTempo205 bpm
0:00/0:00
// Just a Girl — No Doubt
// 205 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 177 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): That Weir.
setcpm(205/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.

// chords · overdriven guitar · "That Weir"
const overdriven_guitar = note(`<
  A B A ~ A B A ~ A B A ~ A B A ~ C D C E C D C E F G H G F G H G F G H G F G H G I J K L A B A ~ A B A ~ A B A ~ C D C
  E C D C E F G H G F G H G F G H G F G H G F G H G F G H G I J K L M N@3 M O@2 P M N@3 M O@2 P I J K L A B A ~ A B A ~
  A B A ~ C D C ~ F G H G F G H G F G H G F G H G M N@3 M O@2 P M N@3 M O@2 P I J K L Q R S T U@2 V@7
>`.pickRestart({
  A: "d3 d4 ~@2", B: "~@6 b3 a3", C: "d3@2 d4@2 b3!2 d4@2", D: "a#3!2 d4@2 a3!2 b3 a3, ~@3 e4",
  E: "a#3!2 d4@2 a3!2 e4@2", F: "[b3,f#4,b4]@2 [b3,f#4,b4]@2 [b3,f#4,b4]!4",
  G: "[a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4]!4", H: "[g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]!4", I: "g2 b2", J: "d3 g3",
  K: "c3 e3", L: "g3 c4", M: "[b3,f#4,b4]@2 [f#3,b3,f#4,b4]@2 [b3,f#4,b4]!4, ~@3 d4",
  N: "[[a3,c#4,e4,a4]@2 [a3,b3,e4,a4]@2 [a3,e4,a4]!4 [g3,d4,g4]@2 [b2,g3,d4,g4]@2 [g3,d4,g4]!4 [a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4]!4, ~@8 f#3@4 e3@8 ~@4 d3@4 e3@8 f#3@11 ~]/3", // A Asus2 A5 G5 G G5 A5
  O: "[[a3,c#4,e4,a4]@2 [a3,b3,e4,a4]@2 [a3,e4,a4]!4 [g3,d4,g4]@2 [b2,g3,d4,g4]@2 [g3,d4,g4]!4, ~@2 f#3 e3@2 ~ d3 e3]/2", // A Asus2 A5 G5 G G5
  P: "[b2,a3,e4,a4]@2 [f#3,a3,e4,a4]@2 [a3,e4,a4]!4, ~@2 b2 a2", Q: "g3 b3", R: "d4 g4", S: "c4 e4", T: "g4 c5",
  U: "[g4@11 b4@11 d5@10]/2", V: "[~ g5@11 c5@11 e5@11 g5@10 c6@11 b2@44 ~@13]/7",
})).s("gm_overdriven_guitar").gain(0.41)

// chords · electric guitar clean · "Clean Ele"
const electric_guitar_clean = note(`<
  A B A B A B A B A B A B A B A B A B A C ~@20 D@2 E@2 A B A B A B A B A B A B A B A C ~@28 D@2 E@2 ~@16 D@2 E@2 A B A B
  A B A B A B A B A B A B ~@32 D@2 E@2 D@2 E@2 F G H I J K@4
>`.pickRestart({
  A: "d3@2 d4@2 b3!2 d4@2", B: "a#3!2 d4@2 a3!2 e4@2", C: "a#3!2 d4@2 ~@4", D: "[b3,d4,g4]!8", E: "[c4,e4,g4]!8",
  F: "[b3,d4,g4]@5 [b3,d4,g4]@5 ~ [b3,d4,g4]@5", G: "[b3,d4,g4]@5 ~ [b3,d4,g4]@5 [b3,d4,g4]@5",
  H: "~ [b3,d4,g4]@5 [b3,d4,g4]@5 ~ [c4,e4,g4]@4", I: "~ [c4,e4,g4]@5 ~ [c4,e4,g4]@5 [c4,e4,g4]@4",
  J: "~@2 [c4,e4,g4]@5 [c4,e4,g4]@5 [c4,e4,g4]@4", K: "[~@2 [c4,e4,g4]@5 [b3,d4,f#4]@44 ~@13]/4",
})).s("gm_electric_guitar_clean").gain(0.41)

// chords · electric guitar clean · "Clean Ele" · soft notes
const electric_guitar_clean_2 = note("<~@19 A B C B C ~@35 A B C B C ~@113>".pickRestart({
  A: "~@4 a3!2 e4@2", B: "d3@2 d4@2 b3!2 d4@2", C: "a#3!2 d4@2 a3!2 e4@2",
})).s("gm_electric_guitar_clean").gain(0.2)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@7 A B ~ B ~ B ~ B A B@8 C D E D C D E D C D E D C D E D F@2 G@2 ~@3 A B ~ B ~ B ~ B A H I H I H I H I C D E D C D E
  D C D E D C D E D C D E D C D E D F@2 G@2 C D E D C D E D J K L M N M N@2 F@2 G@2 ~@3 A B ~ B ~ B ~ B A B@3 A C D E D
  C D E D C D E D C D E D C D E D C D E D C D E D C D E D F@2 G@2 F@2 G@2 O@2 P@3 Q@4
>`.pickRestart({
  A: "~ d3", B: "d2!2 ~@2", C: "b1@2 b1!2 e2 f#2 e2 b1", D: "a1@2 a1!2 e2 f#2 e2 a1",
  E: "g1@4 g1@2 g1 ~ e2@2 f#2@2 e2@2 g1@2", F: "g2!8", G: "c3!8", H: "d2@2 a2@2 b1!2 d2@2", I: "a#1!2 d2@2 a1!2 e2@2",
  J: "b1!8", K: "c#2!8", L: "d2@2 d2@2 d2@2 d2 ~ d2@2 d2@2 d2@2 d2@2", M: "e2!8", N: "f#2!8",
  O: "[g2@11 ~@8 d2@3 e2@5 g2@5, ~@11 g2@11 ~@10]/2",
  P: "[~ e2@5 d2@5 ~ c3@11 ~@8 g2@3 a2@5 c3@5 a2@4, ~@23 c3@11 ~@14]/3", Q: "[~@2 g2@5 b2@44 ~@13]/4",
})).s("gm_electric_bass_finger").gain(0.51)

// other · epiano2 · "Electric"
const epiano2 = note("<~ A ~@3 A ~@39 A ~@67 A ~@3 A ~@55 B@4>".pickRestart({
  A: "a3", B: "[~@7 b3@44 ~@13]/4",
})).s("gm_epiano2").gain(0.51)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@20 B@15 A B@4 A@20 B@15 A B@27 A B@4 A@16 B@15 A B@24 A C D E F G ~@3
>`.pickRestart({
  A: "x", B: "x ~@3 x!2 ~@2", C: "~@3 x ~@2 x ~@4 x ~@4", D: "~@3 x", E: "~@15 x", F: "~@2 x ~@4 x ~@8", G: "~@7 x ~@8",
})).gain(0.51)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@19 B C@15 D C@4 A@19 B C@15 D C@27 D C@4 A@15 B C@15 D C@24 E ~ F G H G ~@3
>`.pickRestart({
  A: "~ x", B: "~@4 x!4", C: "~ x ~ x", D: "~@4 x ~@3 x ~ x ~ x!4", E: "~@11 x ~@4", F: "~ x ~@14", G: "~@7 x ~@8",
  H: "~@3 x",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A B A B A B A B A B A B A B A B A B A C ~@20 A B A B A B A B A B A B A B A B A B A C ~@48 A B A B A B A B A B A B
  A B A C ~@49
>`.pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x!2 ~@2 x!2 ~@2", C: "x!2 ~@6",
})).gain(0.51)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@19 B C@20 A@19 B C@48 A@15 B C@40 D E F G H I ~@3>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x!4", D: "x ~@4 x ~@5 x ~@4", E: "x ~@5 x ~@4 x ~@4", F: "~ x ~@4 x ~@5 x ~@3",
  G: "~ x ~@5 x ~@4 x ~@3", H: "~@2 x ~@4 x ~@4 x ~@3", I: "~@2 x ~@4 x ~@8",
})).gain(0.51)

// drums · crash
const crash = s("cr").struct("<~@168 x ~ [~@3 x] ~@2 [~@7 x ~@8] ~@3>").gain(0.41)

stack(
  overdriven_guitar, electric_guitar_clean, electric_guitar_clean_2, bass, epiano2, kick, snare, hihat, open_hat, crash
)

More by No Doubt