Strudelify
Da Doo Ron Ron cover art

Da Doo Ron Ron

Crystals

KeyD majorTempo146 bpm
0:00/0:00
// Da Doo Ron Ron — Crystals
// 146 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 85 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(146/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · fretless bass · "FRETLESS"
const bass = note(`<
  A@5 B C A@2 B C A@2 B A C A B C A ~@2 A B C A@2 B C A@2 B A C A B C A ~@2 A B C A@2 B C A@2 B C A@2 B C A@2 B A C A B
  C A ~@2 A B C A@2 B C A@2 B C A@2 B C A@2 B D
>`.pickRestart({
  A: "d2@5 ~ d2@5 ~ d2@5 ~ d2@5 ~", B: "g1@5 ~ g1@5 ~ g1@5 ~ g1@5 ~", C: "a1@5 ~ a1@5 ~ a1@5 ~ a1@5 ~",
  D: "a1@5 ~ a1@5 ~ a1@5 ~@7",
})).s("gm_fretless_bass").gain(0.52)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A@5 B C A@2 B C A@2 B A C A B C A@4 B C A@2 B C A@2 B A C A B C A@4 B C A@2 B C A@2 B C A@2 B C A@2 B A C A B C A@4 B
  C A@2 B C A@2 B C A@2 B C A@2 B D
>`.pickRestart({
  A: "d5 [f#5,a5] d5 [f#5,a5] d5 [f#5,a5] d5 [f#5,a5] d5 [f#5,a5] d5 [f#5,a5]", // F#m
  B: "d5 [g5,b5] d5 [g5,b5] d5 [g5,b5] d5 [g5,b5] d5 [g5,b5] d5 [g5,b5]", // G
  C: "c#5 [e5,a5] c#5 [e5,a5] c#5 [e5,a5] c#5 [e5,a5] c#5 [e5,a5] c#5 [e5,a5]", // A5
  D: "c#5 [e5,a5] c#5 [e5,a5] c#5 [e5,a5] c#5 [e5,a5] ~@4", // A5
})).s("gm_piano").gain(0.2).pan(0.3)

// chords · baritone sax · "BARITONSAX"
const baritone_sax = note(`<
  A@4 B C D E B C D E B C B F B C D G@2 ~ B C D E B C D E B C B F B C D G@2 ~@9 B C D E B C D E B C B F B C D G@2 ~ B C
  D E B C D E B C D E B C D E B C D
>`.pickRestart({
  A: "[d2,a2]@3 ~", B: "[d2,a2]", C: "[g2,b2,d3]@3 ~", D: "[a2,c#3,e3]", E: "[d2,d3,f#3]@3 ~", F: "[a2,c#3,e3]@3 ~",
  G: "[d2,d3,f#3]/2", // D
})).s("gm_baritone_sax").gain(0.3).pan(0.7)

// other · alto sax
const alto_sax = note(`<
  A@4 B C D E F C G E B C F H I C G J@2 ~ B C D E F C G E B C F H I C G J@2 ~@9 B C D E F C G E B C F H I C G J@2 ~ B C
  D E B C D E B C D E B C D E B C D
>`.pickRestart({
  A: "a2@3 ~", B: "a3", C: "d4@3 ~", D: "e4", E: "[d4,f#4]@3 ~", F: "a3@11 ~", G: "e4@23 ~", H: "e4@3 ~", I: "a3@23 ~",
  J: "[d4,f#4]/2", // D
})).s("gm_alto_sax").gain(0.3).pan(0.7)

// other · tenor sax
const tenor_sax = note("<~@39 A B C D E F G H I ~@37>".pickRestart({
  A: "~@11 a2", B: "f#3@5 ~ a3@2 ~ a3@2 ~ f#3@3 ~ a3 ~ a3@3 ~ a#3 ~", C: "b3@3 ~ a3@2 g3@3 ~ g3@9 ~@3 g3@2",
  D: "a3@3 ~ a3 ~ a3@2 ~@2 a3@2 b3@5 g3@2 f#3@2 ~ e3@2", E: "d3@4 c#3@2 b2@3 ~ a2@7 ~@4 d3!2 ~",
  F: "f#3@3 ~ f#3@4 ~ d3!2 ~ f#3@3 ~ f#3@5 d3!2 ~", G: "g3@3 ~ g3@5 d3!2 ~ g3@3 ~ g3@5 g3!2 ~",
  H: "a3@3 ~ a3@4 ~ a3!2 ~ b3@4 a3@2 g3@2 f#3@2 e3@2", I: "d3@23 ~",
})).s("gm_tenor_sax").gain(0.58).pan(0.6)

// drums · kick
const kick = s("bd").struct("<[x!4]!4 [x!2]!81>").gain(0.42)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@7 C B C B C B@4 D E B@7 C B C B C B@4 D E B@7 F G B@6 C B C B C B@4 H E B@7 F B@11
>`.pickRestart({
  A: "~ x!11", B: "~ x ~ x", C: "~@6 x ~@9 x!3 ~@5", D: "~@11 x", E: "x!12", F: "~@3 x ~@3 x!5", G: "x!2 ~ x",
  H: "~@10 x!2",
})).gain(0.42)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@20 [x!11 ~] ~@17 [x!11 ~] ~@25 [x!10 ~@2] ~@20>").gain(0.23)

// drums · clap
const clap = s("cp").struct("<[x!4]!4 ~@81>").gain(0.42)

// drums · low tom
const low_tom = s("lt").struct("<~@67 A B A B A B C B A B A B A B C B A B>".pickRestart({
  A: "~@6 x!6", B: "x", C: "~@3 x!3",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct(`<
  A B C A B D B A E@2 B F G F H I G J D A ~@2 E B@2 D C J A I K L K F K D J C ~@2 A J A@2 B A B A B@3 A B@2 D I G F G F
  K D A D ~@2 B@2 C A@2 J C A M B A B D C B D A J N
>`.pickRestart({
  A: "x!4 ~ x!7", B: "x!12", C: "x!2 ~ x!9", D: "x!10 ~ x", E: "x!2 ~ x ~ x!7", F: "x!7 ~@5", G: "~@3 x!9",
  H: "~@3 x!7 ~ x", I: "x!4 ~ x!2 ~@5", J: "x!4 ~ x!5 ~ x", K: "~@3 x ~ x!7", L: "x!2 ~ x ~ x!2 ~@5",
  M: "x!2 ~ x!7 ~ x", N: "x!4 ~ x!5 ~@2",
})).gain(0.42)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A ~ B A ~ C ~ A D@2 ~@4 C A ~ E C A ~@2 D ~@2 C B E A@3 D A ~ A C E B ~@2 A E A@2 ~ A ~ A ~@3 A ~@2 C A ~@4 A C A C
  ~@4 B A@2 E B A F ~ A ~ C B ~ C A E A
>`.pickRestart({
  A: "~ x ~", B: "~ x ~@4", C: "~@5 x", D: "~ x!2 ~@3", E: "~@2 x ~@2 x", F: "~ x ~@3 x",
})).gain(0.28)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@12 A ~ A ~ A ~@4 B ~@8 A ~ A ~ A ~@4 B ~@16 A ~ A ~ A ~@4 B ~@3 C ~@3 D ~@3 C ~@3 D ~@3
>`.pickRestart({
  A: "x", B: "x!12", C: "x!6 ~@6", D: "x ~ x ~ x ~@6 x",
})).gain(0.37)

// drums · high tom
const high_tom = s("ht").struct("<~@11 A ~ A ~ A ~@13 A ~ A ~ A ~@21 A ~ A ~ A ~@25>".pickRestart({
  A: "~@11 x",
})).gain(0.42)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@4 A@7 B A B A B A@4 ~@2 A@7 B A B A B A@4 ~@2 A@15 B A B A B A@4 ~@2 A@19
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.37)

stack(
  bass, piano, baritone_sax, alto_sax, tenor_sax, kick, snare, snare_soft, clap, low_tom, hihat, hihat_soft, mid_tom,
  high_tom, tambourine
)

More by Crystals