Strudelify
Chirpy Chirpy Cheep Cheep cover art

Rock Masters: Chirpy Chirpy Cheep Cheep

Chirpy Chirpy Cheep Cheep

Middle of the Road

KeyB majorTempo130 bpm
0:00/0:00
// Chirpy Chirpy Cheep Cheep — Middle of the Road
// 130 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · acoustic guitar nylon · "Gitarre"
const acoustic_guitar_nylon = note(`<
  ~@10 A B A C A C D E D F E G H I J K H L@2 M G A B A C A C D E ~@4 N O P Q D F E G H I J K H L@2 M R S T U V W T X@2 Y
  S@2 T U V W T X@2 Y S@2 T U V W T X@2 Y S@2 T U V W T X@2 Y Z
>`.pickRestart({
  A: "[b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,d#5,f#5] ~ [b4,d#5,f#5] ~", // E B
  B: "[b4,e5,f#5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~", // E
  C: "[b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~", // E
  D: "[c#5,e5,a5] ~ [c#5,e5,a5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~", // A E
  E: "[b4,d#5,f#5] ~ [b4,d#5,f#5] ~ [b4,d#5,f#5] ~ [b4,d#5,f#5] ~", // B
  F: "[a4,d5,f#5] ~ [a4,d5,f#5] ~ [a4,c#5,f#5] ~ [a4,c#5,f#5] ~", // D F#m
  G: "[g#4,b4,e5]@2 ~@2 [g#4,b4,e5]@2 ~@2 [g#4,b4,e5]@2 ~@2 [g#4,b4,e5] ~@3", // E
  H: "[a4,c#5,e5] ~@3 [a4,c#5,e5] ~@3 [g#4,b4,e5]@2 ~@2 [g#4,b4,e5]@2 ~@2", // A E
  I: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~", // A B
  J: "[e4,a4,c#5] ~ [e4,a4,c#5] ~ [f#4,b4,d#5] ~ [f#4,b4,d#5] ~", // A B
  K: "[g#4,b4,e5]@2 ~@2 [g#4,b4,e5]@2 ~@2 [g#4,b4,e5] ~@3 [g#4,b4,e5] ~@3", // E
  L: "[e4,a4,c#5]@2 ~@2 [e4,a4,c#5] ~@3 [f#4,b4,d#5]@2 ~@2 [f#4,b4,d#5] ~@3", // A B
  M: "[e4,a4,c#5]@2 ~@2 [e4,a4,c#5] ~@3 [f#4,b4,d#5]@2 ~@2 [f#4,b4,d#5]@2 ~@2", // A B
  N: "~@4 [g#4,b4,e5]@3 ~@5 [f#4,b4,d#5]@2 ~@2", O: "~@2 [g#4,b4,e5] ~@3 [g#4,b4,e5] ~",
  P: "[e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~", // A E
  Q: "[d#4,f#4,b4]@2 ~@2 [d#4,f#4,b4]@3 ~ [d#4,f#4,b4]@2 ~@2 [d#4,f#4,b4]@2 ~@2", // B
  R: "[g#4,b4,e5]@2 ~@2 [g#4,b4,e5]@2 ~@2 [a4,c5,f5]@2 ~@2 [a4,c5,f5] ~@3", // E F
  S: "[a#4,c#5,f#5]@2 ~@2 [a#4,c#5,f#5]@2 ~@2 [a#4,c#5,f#5]@2 ~@2 [a#4,c#5,f#5] ~@3", // F#
  T: "[b4,d#5,f#5] ~@3 [b4,d#5,f#5] ~@3 [a#4,c#5,f#5]@2 ~@2 [a#4,c#5,f#5]@2 ~@2", // B F#
  U: "[b4,d#5,f#5] ~ [b4,d#5,f#5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~", // B C#
  V: "[f#4,b4,d#5] ~ [f#4,b4,d#5] ~ [g#4,c#5,f5] ~ [g#4,c#5,f5] ~", // B C#
  W: "[a#4,c#5,f#5]@2 ~@2 [a#4,c#5,f#5]@2 ~@2 [a#4,c#5,f#5] ~@3 [a#4,c#5,f#5] ~@3", // F#
  X: "[f#4,b4,d#5]@2 ~@2 [f#4,b4,d#5] ~@3 [g#4,c#5,f5]@2 ~@2 [g#4,c#5,f5] ~@3", // B C#
  Y: "[f#4,b4,d#5]@2 ~@2 [f#4,b4,d#5] ~@3 [g#4,c#5,f5]@2 ~@2 [g#4,c#5,f5]@2 ~@2", Z: "[a#4,c#5,f#5] ~@7",
})).s("gm_acoustic_guitar_nylon").gain(0.33).pan(0.4)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@9 A B C D C E C F G H I J K L M@2 N O M@2 P Q B C D C E C F G ~@4 R S T U H I J K L M@2 N O M@2 P V W X Y@2 Z AA Y@2
  AB AC W X Y@2 Z AA Y@2 AB AC W X Y@2 Z AA Y@2 AB AC W X Y@2 Z AA Y@2 AD AE
>`.pickRestart({
  A: "~@3 b1", B: "e2@5 ~ e2@2 b1@7 ~", C: "e2@4 ~ b1 c#2 b1", D: "e2@3 e2 b1@4", E: "e2@6 ~@2 b1@7 ~",
  F: "a2@2 ~@2 a2@3 ~ g#2@2 ~@2 g#2@3 ~", G: "b1@2 ~@2 b1@2 ~@2 b1 ~ b1@2 c#2@2 b1@2",
  H: "a2@2 ~@2 a2@3 ~ g#2@2 ~@2 g#2@4", I: "d2@2 ~@2 d2@3 ~ c#2@2 ~@2 c#2@4",
  J: "b1@2 ~@2 b1@2 ~@2 b1 ~ b1@2 c#2@2 d#2@2", K: "e2 ~ e2@2 g#2@2 b2 ~ b2@2 g#2@2 e2@2 b1 ~",
  L: "a1@4 c#2@2 e2 ~ e2@4 g#2@2 b2@2", M: "a1@2 c#2 e2 b1@2 d#2 f#2", N: "e2 g#2 b2 g#2 e2 b1 e2 b1",
  O: "a1@2 c#2 e2 e2@2 g#2 b2", P: "a1@2 c#2 e2 b1@2 d#2 b1", Q: "e2 ~ e2 ~ e2 ~ e2 ~ e2@2 b1@2 c#2@2 d#2@2",
  R: "e2@3 b2 b1@3 b2", S: "e2@2 ~@2 e2@2 ~@2 e2@2 ~@2 e2@3 ~", T: "a2@3 ~ a2@3 ~ g#2@2 ~@2 g#2@3 ~",
  U: "b1@2 ~@2 b1@3 ~ b1@3 ~ b1@3 ~", V: "e2 ~ e2 ~ e2 ~ e2 ~ f2@3 ~ f2@3 ~",
  W: "f#2 ~ f#2@2 a#2@2 c#3 ~ c#3@2 a#2@2 f#2@2 c#2 ~", X: "b1@4 d#2@2 f#2 ~ f#2@4 a#2@2 c#3@2",
  Y: "b1@2 d#2 f#2 c#2@2 f2 g#2", Z: "f#2 a#2 c#3 a#2 f#2 c#2 f#2 c#2", AA: "b1@2 d#2 f#2 f#2@2 a#2 c#3",
  AB: "b1@2 d#2 f#2 c#2@2 f2 c#2", AC: "f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2@2 c#2@2 d#2@2 f2@2",
  AD: "b1 ~ b1 ~ b1 ~ b1 ~ c#2@2 ~@2 c#2 ~ f#2 ~", AE: "f#1 ~@15",
})).s("gm_acoustic_bass").gain(0.56).pan(0.4)

// chords · synth strings 2 · "Streiche"
const synth_strings_2 = note("<~@80 A@3 B C@2 D E F G H@3 I J@3 E F K>".pickRestart({
  A: "[[c#4,a#4]@15 ~ [d#4,b4]@7 ~ [c#4,a#4]@8 [d#4,b4]@7 ~ [f4,g#4,c#5]@6 ~@2, f#4@13 ~@3]/3", // F# G#m F# G#m C#
  B: "[d#4,f#4,b4]@7 ~ [f4,g#4,c#5]@8", C: "[[c#4,a#4]@15 ~ [d#4,b4]@8 [c#4,a#4]@8, f#4@31 ~]/2",
  D: "[d#4,f#4,b4]@7 ~ [f4,g#4,c#5]@6 ~@2", E: "[d#4,f#4,b4]@7 ~ [f4,g#4,c#5]@5 ~@3",
  F: "[d#4,f#4,b4]@6 ~@2 [f4,g#4,c#5]@5 ~@3", G: "[c#4,f#4,a#4]@15 ~",
  H: "[[c#4,a#4]@16 [d#4,b4]@8 [c#4,a#4]@7 ~ [d#4,b4]@7 ~ [f4,g#4,c#5]@7 ~, f#4@13 ~@3]/3", // F# G#m F# G#m C#
  I: "[d#4,f#4,b4]@7 ~ [f4,g#4,c#5]@7 ~", // B C#
  J: "[[c#4,a#4]@16 [d#4,b4]@7 ~ a#4@8 [d#4,b4]@7 ~ [f4,g#4,c#5]@5 ~@3, f#4@23 ~ f#4@15 ~@9, ~@4 c#4 ~@3]/3", // F# G#m C#
  K: "[c#4,f#4,a#4]@3 ~@13", // F#
})).s("gm_synth_strings_2").gain(0.31)

// drums · kick
const kick = s("bd").struct("<[x!2 ~@2 x!2 ~@2]!10 [x!2]!29 [x!2 ~@2 x!2 ~@2]!6 [x!2]!54 x>").gain(0.5)

// drums · clap
const clap = s("cp").struct("<~@2 A@8 B@8 ~@3 C@9 ~ B@8 A@6 ~@5 D@49 E>".pickRestart({
  A: "~ x ~ x", B: "~@5 x!3", C: "~ x!3 ~ x!3", D: "x!4", E: "x",
})).gain(0.5)

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

// drums · low tom
const low_tom = s("lt").struct("<[~@7 x]!10 ~@29 [~@7 x]!6 ~@34 [~@6 x!2] ~@9 [~@4 x!4 ~@4 x!4] ~@10>").gain(0.5)

// drums · hihat
const hihat = s("hh").struct("<~@10 A@11 B C@8 A@9 ~@6 A@5 B C@8 A B C@8 A B C@8 A B C@8 A B C@8 D>".pickRestart({
  A: "x!4", B: "x!8", C: "x!3 ~ x!3 ~", D: "x",
})).gain(0.5)

// drums · high tom
const high_tom = s("ht").struct(`<
  [~@12 x!2 ~@2]!10
  ~@29
  [~@12 x!2 ~@2]!6
  ~@34
  [x ~ x ~ x ~ x ~ x ~@2 x ~@4]
  ~@9
  [x!4 ~@4 x!4 ~@4]
  ~@10
>`).gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@21 A@3 B A B A B A ~@20 A@3 B A B A B A B A@3 B A B A B A B A@3 B A B A B A B A@3 B A B A B A B A@3 B A B A B A C
>`.pickRestart({
  A: "x!8", B: "~ x!7", C: "x",
})).gain(0.57)

stack(acoustic_guitar_nylon, bass, synth_strings_2, kick, clap, snare, low_tom, hihat, high_tom, tambourine)

More by Middle of the Road