Strudelify

Les Peanuts Charly Brown Snoopy

Vince Guaraldi

KeyA♭ majorTempo150 bpm
0:00/0:00
// Les Peanuts   Charly Brown   Snoopy — Vince Guaraldi
// 150 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 101 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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.

// other · piano · "Lead 2"
const piano = note(`<
  ~@4 A@6 B@4 C@6 D@2 E@2 F@2 G@3 H I J K L ~ M N M O@2 D@2 E@2 F@2 G@3 H I J K L ~ M N M N P Q R S@2 T@2 U V W@6 X Y Z
  AA AB AC AD AE AD AF X Y Z AA AB AC AD AE AD AG ~@3 AH AI AJ AK
>`.pickRestart({
  A: "[~@7 c4@8 ab3@5 ~ ab3@2 c4@8 ab3@4 ~@4 c4@2 eb4 ab4@2 ab4 eb4 c4@2]/6",
  B: "[eb4@3 c4@4 c4@2 eb4 ab4@2 ab4@8 ~@3 c4@2 eb4 ab4@2 ab4 eb4 c4@2]/4",
  C: "[eb4@3 c4@4 eb4@4 eb4 eb4@8 ~@3 c4@4 eb4 eb4@8 ~@3 c4@2 eb4 ab4@2 ab4 eb4 c4@2]/6",
  D: "[eb4@3 c4@4 c4@2 eb4 ab4@2 ab4@4]/2", E: "[~@7 c4@2 eb4 ab4@2 ab4 eb4 c4@2]/2",
  F: "[eb4@3 c4@4 eb4@4 eb4 eb4@4]/2", G: "[~@7 c4@4 eb4 eb4@8 ~ ab3 c4 eb4]/3",
  H: "f4@2 f4@2 f4@2 g4@2 ~@2 eb5@2 f5 ~ f5 ~", I: "eb5@2 f5 ~ f5 ~ eb5@2 f5 ~ f5 ~ eb5@2 f5 ~",
  J: "ab4!3 bb4 ~ eb4 ~@2", K: "~@10 eb3 f3 ab3 c4 eb4 f4", L: "f4!3 g4 ~@3 eb4", M: "~ eb3 ~@2 eb3@2 ~@2",
  N: "~@2 eb3 ~@3 eb3@6 ~@4", O: "[~@2 eb3 ~@3 eb3@8 c4@4 eb4@2 ab4@4 ab4@2 eb4@2 c4@4]/2", P: "~ gb3 ~@2 gb3@2 ~@2",
  Q: "~@2 gb3 ~@3 gb3@6 ~@4", R: "~ ab3 ~@2 ab3@2 ~@2", S: "[ab3 ~@2 bb3 ~@2 ab3@7 c5@2 eb5]/2",
  T: "[ab5@2 ab5 eb5 c5@2 eb5@3 c5@4 c5@2 eb5]/2", U: "ab5@2 ab5@4 ~ eb5", V: "~@5 c5@2 eb5",
  W: "[ab5@2 ab5 eb5 c5@2 eb5@3 c5@4 eb5@4 eb5 eb5@11 c5@4 eb5 eb5@8 ~ ab3 c4 eb4 f4!2]/6",
  X: "f4@2 g4@2 ~@2 eb5@2 f5 ~ f5 ~ eb5@2 f5 ~", Y: "f5 ~ eb5@2 f5 ~ f5 ~ eb5@2 f5 ~ f5@2 f5@2", Z: "f5 g5 ~ eb4 ~@4",
  AA: "~@6 eb3 f3 ab3 c4 eb4 f4 f4@2 f4@2", AB: "f4 g4 ~@3 eb5 ~@2", AC: "~@7 eb4", AD: "~@4 eb4@4 ~@6 eb4 ~",
  AE: "~ eb4@3 ~@3 eb4", AF: "~ eb4@3 ~@2 f4!2", AG: "~ eb4@3 ~@2 c4@2", AH: "~@5 c4@2 eb4",
  AI: "ab4@2 ab4 eb4 c4 eb4@2 f4", AJ: "ab4@2 ab4 f4 eb4@2 bb4 db5", AK: "eb5@2 eb5 db5 bb4 eb5@2 ~",
})).s("gm_piano").gain(0.41).pan(0.2)

// other · piano · "Piano 1"
const piano_2 = note(`<
  ~@4 A@2 B@2 C ~@13 D ~@3 E F ~ G ~ H ~ G ~@4 I@2 J@2 K@2 L@2 M@3 G ~ H ~ G ~@8 N@2 O@2 P Q R@6 S T U V S W X Y X Z S T
  U V S W X Y X AA ~@6 AB
>`.pickRestart({
  A: "[~@7 ab3@8 f3]/2", B: "[f3@4 ~ f3@2 ab3@8 f3]/2", C: "f3@3 ~@4 eb4", D: "~ ab5 f5 eb5 c5 ab4 f4 eb4",
  E: "~ gb5 eb5 bb4 ab4 gb4 eb4 db4", F: "c4 ~@7", G: "db4!3 eb4 ~@4", H: "f4!3 g4 ~@4",
  I: "[~@7 ab5@2 bb5 c6@2 c6 bb5 ab5@2]/2", J: "[bb5@3 ab5@4 ab5@2 bb5 c6@2 c6@4]/2",
  K: "[~ ab5 f5 eb5 c5 ab4 f4 ab5@2 bb5 c6@2 c6 bb5 ab5@2]/2", L: "[bb5@3 ab5@4 ab5@4 bb5 bb5@4]/2",
  M: "[~ gb5 eb5 bb4 ab4 gb4 eb4 ab5@4 bb5 bb5@8 ~@4]/3", N: "[~@6 eb3@7 ab5@2 bb5]/2",
  O: "[c6@2 c6 bb5 ab5@2 bb5@3 ab5@4 ab5@2 bb5]/2", P: "c6@2 c6@4 ~ ab5", Q: "f5 eb5 c5 ab4 f4 ab5@2 bb5",
  R: "[c6@2 c6 bb5 ab5@2 bb5@3 ab5@4 ab5@4 bb5 bb5@11 ab5@4 bb5 bb5@8 ~@4 db4!2]/6", S: "db4 eb4 ~@6", T: "~@6 db5!2",
  U: "db5 eb5 ~@6", V: "~@6 db4!2", W: "~@7 c4", X: "~@4 c4@4 ~@6 c4 ~", Y: "~ c4@3 ~@3 c4", Z: "~ c4@3 ~@2 db4!2",
  AA: "~ c4@3 ~@4", AB: "~@5 c5@2 ~",
})).s("gm_piano").gain(0.36).pan(0.9)

// other · piano · "Piano 2"
const piano_3 = note("<~@4 A@5 ~@20 B ~ C ~ B ~@15 B ~ C ~ B ~@19 D E F G D E ~@4 D E F G D E ~@11 H>".pickRestart({
  A: "[~@7 f3@8 eb3@5 ~ eb3@2 f3@8 eb3@4 ~@5]/5", B: "ab3!3 bb3 ~@4", C: "db4!3 eb4 ~@4", D: "~@6 ab3!2",
  E: "ab3 bb3 ~@6", F: "~@6 ab4!2", G: "ab4 bb4 ~@6", H: "~@5 ab4@2 ~",
})).s("gm_piano").gain(0.36).pan(0.8)

// other · piano · "Counter Low"
const piano_4 = note(`<
  ~@29 A ~ A ~ A ~ B C B D ~@10 A ~ A ~ A ~ B C B C E F G H@2 ~@9 I J I J I J ~@4 I J I J I J ~@8 K L M@2
>`.pickRestart({
  A: "db3!3 eb3 ~@4", B: "~ c3 ~@2 c3@2 ~@2", C: "~@2 c3 ~@3 c3@6 c3@2 ~@2", D: "~@2 c3 ~@3 c3@8 ~@2",
  E: "~ eb3 ~@2 eb3@2 ~@2", F: "~@2 eb3 ~@3 eb3@6 eb3@2 ~@2", G: "~ f3 ~@2 f3@2 ~@2", H: "[e3 ~@2 gb3 ~@2 ab2@7 ~@3]/2",
  I: "~@6 db3!2", J: "db3 eb3 ~@6", K: "~@5 ab2@3", L: "~@5 db3@3", M: "[~@5 eb3@7 eb3 ab2@2 ~]/2",
})).s("gm_piano").gain(0.46)

// bass · electric bass pick · "Bass Piano"
const bass = note(`<
  A@8 B@2 C@4 D@6 E@3 F G@3 H@2 I J I K I L M N M O@2 E@3 F G@3 H@2 I J I K I L M N M N P Q R S T U V W X U Y Z AA W AB
  AC AD AE AF AE AG AH AI AH AJ AC AD AE AF AE AG AH AI AH AK W V W AL AM AN@2
>`.pickRestart({
  A: "[~@7 ab1@2 eb2 ab2 ab1 eb2 ab2@2 ab1@2 eb2 f2 ab1 eb2 f2@2 ab1@2 eb2 ab2 ab1 eb2 ab2@2 ab1@2 eb2 f2 ab1 eb2 f2@2 ab1@2 eb2 ab2 ab1 eb2 ab2@2 ab1@2 eb2 f2 ab1 eb2 f2@2 ab1@2 eb2 ab2 ab1 eb2 ab2@2 ab1]/8",
  B: "[~ eb2 f2 ab1@4 ab1@2 eb2 ab2 ab1 eb2 ab2@2 eb2]/2",
  C: "[ab1 eb2 f2 ab1 eb2 f2@2 ab1@2 eb2 ab2 ab1 eb2 ab2@2 ab1@2 eb2 f2 ab1 eb2 f2@2 ab1@2 eb2 ab2 ab1 eb2 ab2@2 eb2]/4",
  D: "[ab1 eb2 f2 ab1 eb2 f2@2 b1@2 gb2 b2 b1 gb2 b2@2 b1@2 gb2 ab2 b1 gb2 ab2@2 ab1@2 eb2 ab2 ab1 eb2 ab2@2 ab1@2 eb2 f2 ab2 f2 eb2 c2 ab1@2 eb2 ab2 ab1 eb2 ab2@2 eb2]/6",
  E: "[ab1 eb2 f2 ab1 eb2 f2@2 ab1@2 eb2 ab2 ab1 eb2 ab2@2 ab1@2 eb2 f2 ab1 eb2 f2@2 eb2]/3",
  F: "ab1 eb2 ab2 ab1 eb2 ab2@2 eb2",
  G: "[ab1 eb2 f2 ab1 eb2 f2@2 b1@2 gb2 b2 b1 gb2 b2@2 b1@2 gb2 ab2 b1 gb2 ab2@2 gb2]/3",
  H: "[ab1 eb2 ab2 ab1 eb2 ab2@2 ab1@2 eb2 f2 ab1 eb2 f2@2 eb2]/2", I: "db2!3 eb2 ~@4", J: "~ ab3 f3 eb3 c3 ab2 f2 eb2",
  K: "~ eb2", L: "~@7 eb2", M: "ab1 eb2 ab2 eb2 ab1 eb2 ab2 eb2", N: "ab1 eb2 f2 eb2 ab1 eb2 f2 eb2",
  O: "[ab1 eb2 f2 eb2 ab1 eb2 f2 ab1@2 eb2 ab2 ab1 eb2 ab2@2 eb2]/2", P: "b1 gb2 b2 gb2 b1 gb2 b2 gb2",
  Q: "b1 gb2 ab2 gb2 b1 gb2 ab2 gb2", R: "db2 ab2 db3 ab2 db2 ab2 db3 db2", S: "e2 b2 e3 gb2 db3 gb3 ~@2",
  T: "~@5 ab1@2 eb2", U: "ab2 ab1 eb2 ab2@2 eb2 ab1 eb2", V: "f2 ab1 eb2 f2@2 ab1@2 eb2",
  W: "ab2 ab1 eb2 ab2@2 ab1@2 eb2", X: "f2 ab1 eb2 f2@2 eb2 ab1 eb2", Y: "f2 ab1 eb2 f2@2 b1@2 gb2",
  Z: "b2 b1 gb2 b2@2 b1@2 gb2", AA: "ab2 b1 gb2 ab2@2 ab1@2 eb2", AB: "f2 ab1 eb2 f2@2 ab2 db2!2",
  AC: "db2 eb2 ~@5 ab3", AD: "f3 eb3 c3 ab2 f2 eb2 db2!2", AE: "db2 eb2 ~@6", AF: "~@2 eb2@4 db2!2",
  AG: "~@5 eb2 ab1 eb2", AH: "ab2 eb2 ab1 eb2 ab2 eb2 ab1 eb2", AI: "f2 eb2 ab1 eb2 f2 eb2 ab1 eb2",
  AJ: "f2 eb2 ab1 eb2 f2 eb2 db2!2", AK: "f2 eb2 ab1 eb2 f2 ab1@2 eb2", AL: "f2 ab1 eb2 f2@2 ab1@3", AM: "~@5 db2@3",
  AN: "[~@6 eb2@6 eb2 ab1@2 ~]/2",
})).s("gm_electric_bass_pick").gain(0.51)

// other · piano · "Counter High"
const piano_5 = note("<~@49 [db5!3 eb5 ~@4] ~ [f5!3 g5 ~@4] ~ [db5!3 eb5 ~@4] ~@47>").s("gm_piano").gain(0.31).pan(0.8)

// other · piano · "Late Lead"
const piano_6 = note("<~@63 A B@2 C A D@6 ~@27>".pickRestart({
  A: "~@5 ab4@2 bb4", B: "[c5@2 c5 bb4 ab4@2 bb4@3 ab4@4 ab4@2 bb4]/2", C: "c5 c5@2 ~",
  D: "[c5@2 c5 bb4 ab4@2 bb4@3 ab4@4 ab4@4 bb4 bb4@11 ab4@4 bb4 bb4@8 ~@6]/6",
})).s("gm_piano").gain(0.26).pan(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B@20 C ~ C ~ C ~ B@14 C ~ C ~ C ~ B@7 D E F@10 G E G E G E F@4 G E G E H F@8 I J E J
>`.pickRestart({
  A: "~@7 x", B: "x!2", C: "x ~@2 x ~@4", D: "x ~ x!2", E: "~@3 x", F: "~ x ~ x", G: "~ x ~@6", H: "~ x ~@4 x ~",
  I: "~@2 x ~@2 x ~@2", J: "~@5 x ~@2",
})).gain(0.51)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B@20 C ~ C ~ C D B@14 C ~ C ~ C D B@7 E ~@3 F G H@5 I J F J F K L H@3 I J F J F K M H@8 N@3
>`.pickRestart({
  A: "~ x ~@2 x ~ x ~", B: "~ x ~ x", C: "~ x!2 ~@5", D: "~ x ~@2 x ~ x!2", E: "~ x ~@2", F: "~@7 x",
  G: "x ~@2 x ~ x ~@2", H: "x!2", I: "x ~@3 x ~@2 x", J: "x", K: "x ~@6 x", L: "~ x!2 ~ x!2 ~@2", M: "x ~@2 x!2 ~@3",
  N: "~ x",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@9 A B@19 ~ B ~ B ~ B A B@13 ~ B ~ B ~ B A B@6 C ~@5 D@5 E F E F E F E D@3 E F E F E F E D@7 E ~@3
>`.pickRestart({
  A: "~@3 x!2 ~@3", B: "x ~@2 x!2 ~@3", C: "x ~@2 x ~@4", D: "~ x!2 ~@3 x ~", E: "~ x!2 ~@5", F: "~@3 x",
})).gain(0.36)

// drums · open hat
const open_hat = s("oh").struct("<~@5 [~ x ~ x]!4 ~@92>").gain(0.36)

// drums · china
const china = s("cr").struct(`<
  ~@9 A ~@19 B ~ B ~ B ~ A ~@13 B ~ B ~ B ~ A ~@6 C ~@4 D ~@5 D E D E D E D ~@3 D E D E D E D ~@7 F@2 D G
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "~@2 x!2", D: "~@3 x", E: "~ x ~@6", F: "~@5 x ~@2", G: "~@4 x!2 ~@2",
})).gain(0.36)

stack(piano, piano_2, piano_3, piano_4, bass, piano_5, piano_6, kick, snare, hihat, open_hat, china)

More by Vince Guaraldi