Strudelify

Anna Begins

Counting Crows

KeyG majorTempo83 bpm
0:00/0:00
// Anna Begins — Counting Crows
// 83 bpm, 4/4, key G 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 95 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): A Guitar.
setcpm(83/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 · electric bass finger · "Bass"
const bass = note(`<
  ~@3 A B C D E B C D F B C D E B C D F G H G H G H G I B C D E B C D F G H G H J K J L J K J M B C D E B C D F B C D E
  B C D F G H G H J K J L J K J M J K J L J K J M J K J L J N ~@5
>`.pickRestart({
  A: "~@4 e2 e1@2 e1", B: "a1@5 a1@3", C: "a1@8 a1 ~ a1@6", D: "g1@5 g1@3", E: "g1@8 g1 ~ g1@6",
  F: "g1@8 g1 ~ e1@4 e1@2", G: "[e1,e2]@3 g1@3 [e1,e2]@10", H: "[c1,c2]@3 c1 d2@2 a1@2, ~@6 c2 ~ d1@8",
  I: "[c1,c2]@3 c1 [d1,d2]@4, ~@6 c2 ~@9", J: "g1@3 g1 c2@4", K: "a1@3 a1 d2@2 d2@2", L: "[e1,e2]@5 d2 e2@2 [d1,d2]@8",
  M: "[e1,e2] [d1,d2]", N: "a1@3 a1 d2@4",
})).s("gm_electric_bass_finger").gain(0.5).pan(0.6)

// chords · piano
const piano = note(`<
  ~@12 A@2 ~@2 A@2 ~@2 B C B C B C B D ~@8 B C B C E F E F E F E F ~@8 A@2 G@2 A@2 G@2 B C B C E F E F E F E F E F E F E
  F E F E F E F E H I@5
>`.pickRestart({
  A: "[~@3 [b3,a4,c5,e5]@29, [a2,a3]]/2", B: "e4@3 g4@3 [b3,e4]@10, [e3,g3], b3@3 ~@5",
  C: "e4@3 g4@3 e4@2 f#4@3 d4@3 a3@2, [g3,c4] d3, ~@4 a3@3 ~", D: "e4@3 g4@3 e4@2 [d3,a3,f#4]@8, [g3,c4] ~",
  E: "~@3 g4@3 d4@2 ~@3 g4@3 d4@2, [d3,g3,b3] [e3,g3,c4]", // G C
  F: "~@3 g4@3 d4@2 ~@3 d4@3 a3@2, [e3,a3,c4] [d3,f#3], ~@4 a3@3 ~", G: "[~@3 [g4,b4,d5]@29, [g2,g3]]/2",
  H: "~@3 g4@3 d4@2 [d3,f#3,a3]@8, [e3,a3,c4] ~", // D Am
  I: "[~@3 g4@3 ~ d4@2 ~@3 g4@3 d4@2 ~@4 g4@3 d4@2 ~@4 d4@3 a3@2 ~@3 [d4,g4]@33 ~@9, [d3,g3,b3]@9 [e3,g3,c4]@9 [e3,a3,c4]@9 [d3,f#3]@9 b2@35 ~@9, ~@27 a3@6 ~@2 g2@35 ~@10, ~@37 [d3,g3]@34 ~@9]/5", // G5 G C Am D G5
})).s("gm_piano").gain(0.4)

// chords · acoustic guitar steel · "A Guitar"
const acoustic_guitar_steel = note("<~ A@2 B@2 ~@90>".pickRestart({
  A: "[~@11 [e3,a3,c4]@3 ~ g3 g3 a3@15, ~@5 a2@11, ~@7 [a3,c4] [e3,c4]@8]/2", B: "[~ [c4,e4], ~@13 e3@19, ~@7 a3@9]/2",
})).s("gm_acoustic_guitar_steel").gain(0.28).pan(0)

// chords · distortion guitar · "E Guitar"
const distortion_guitar = note(`<
  ~ A B@2 ~@8 C@8 D E D E D E D F ~@8 D E D E G H G H G H G H I@2 J@2 I@2 J@2 ~@4 K@2 L@2 D E D E G H G H G H G H G H G
  H G H G H G H G H G M N@3 ~@2
>`.pickRestart({
  A: "~@7 e3", B: "[a3@29 ~@3]/2", C: "[~@3 [a3,b3,e4]@61, a2]/4", D: "e3@3 g3@3 e3@10",
  E: "e3@3 g3@3 e3@2 f#3@3 d3@3 a2@2", F: "e3@3 g3@3 e3@2 f#3@8", G: "~@3 d4 ~@3 d4, g2 c3, ~@3 g4@5 ~@3 g4@5",
  H: "~@3 d4 ~@3 a3, a2 d3, ~@3 g4@5 ~@3 d4@5", I: "~@3 [b3,e4,a4,b4]@13, a2", J: "~@3 [a3,d4,g4,a4]@13, g2",
  K: "[~@3 [a3,b3,e4]@29, a2]/2", L: "[~@3 [g3,a3,d4]@29, g2]/2", M: "~@3 d4 d3@4, a2 ~, ~@3 g4@5 ~@8",
  N: "[~@7 d4@2 ~@6 d4@3 ~@6 d4@3 ~@6 a3@2 ~@13, g2@3 c3@3 a2@3 d3@3 ~@4, ~ g4@2 ~ g4@2 ~ g4@2 ~ d4@2 ~@4]/3",
})).s("gm_distortion_guitar").gain(0.24).pan(1)

// chords · string ensemble 2 · "Strings"
const string_ensemble_2 = note("<~@4 A@8 B@8 C D C D C D C D E@8 C D C D F@8 E@16 C D C D F@16 G@6 ~@5>".pickRestart({
  A: "a3/8", B: "[a3,a4]/8", C: "[b3,e4,g4]", D: "[g3,c4,e4] [d3,a3,d4,f#4]", E: "[a4 g5 a5 g5, a3]/8",
  F: "[d4 ~@3 d4 ~@3 d4 ~@3 d4 ~@2 d5, g4 a4 g4 a4 g4 a4 g4 a4, ~ c5@2 d5@2 c5@2 d5@2 c5@2 d5@2 c5@2 ~]/8",
  G: "[d4 ~@3 d4 ~@3 d4 ~ a4 ~, g4 a4 g4 a4 g4 ~, ~ c5@2 d5@2 c5@2 d5@2 c5@2 ~]/6",
})).s("gm_string_ensemble_2").gain(0.15).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  A B A B C D A D C D A D C D A D C D A D E F E F E F E@2 C D A D C D A D E F E F@9 C D A D C D A D C D A D C D A D E F
  E F@23 ~@5
>`.pickRestart({
  A: "x ~@9 x ~@4 x", B: "x ~@6 x!2 ~ x ~@5", C: "x ~@4 x ~@2", D: "x ~@3 x!2 ~@2", E: "x ~@2 x ~@4",
  F: "x ~@2 x!2 ~@3",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct("<A@11 B A@15 C A@7 B A@3 D A@15 B A@7 B A@3 D A@21 E ~@5>".pickRestart({
  A: "~@3 x ~@8 x ~@3", B: "~@3 x ~@8 x!2 ~@2", C: "~@3 x ~@4 x ~@7", D: "~@3 x ~@6 x ~ x ~@3", E: "~@3 x ~@12",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@3 A B@3 A B@3 A B@3 A B@3 A B A B A B A C A B@3 A B@3 A B A B ~@8 A B@3 A B@3 A B@3 A B@3 A B A B ~@27
>`.pickRestart({
  A: "~@3 x ~@3 x", B: "~ x ~ x ~@3 x", C: "~ x ~ x ~@2 x ~",
})).gain(0.72)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@4 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~ A ~@9 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~@28
>`.pickRestart({
  A: "~ x ~@6",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 [~@7 x] ~@35 [~@7 x] ~@27 [~@7 x] ~@27>").gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<[~@5 x ~@2]!27 [~@2 x!2] [~@5 x ~@2]!12 ~@8 [~@5 x ~@2]!20 ~@27>").gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<~@3 [~@13 x ~@2] ~@35 [~@13 x ~@2] ~@27 [~@13 x ~@2] ~@27>").gain(0.56)

// drums · crash
const crash = s("cr").struct("<A ~@19 A ~@15 A ~@27 A ~@24 B ~@5>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.72)

// drums · ride bell
const ride_bell = s("rd").struct("<~@40 [~ x ~ x ~ x ~ x]!8 ~@20 [~ x ~ x ~ x ~ x]!21 [~ x ~ x ~@4] ~@5>").gain(0.56)

stack(
  bass, piano, acoustic_guitar_steel, distortion_guitar, string_ensemble_2, kick, snare, hihat, hihat_soft, mid_tom,
  open_hat, high_tom, crash, ride_bell
)

More by Counting Crows