Strudelify
Boys and Girls cover art

Boys And Girls

Boys and Girls

Charlie Makes The Cook

KeyA♭ majorTempo134 bpm
0:00/0:00
// Boys and Girls — Charlie Makes The Cook
// 134 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 134 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(134/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, A@4 for four bars: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@2 A B A B ~@9 A B A B C D C E C D C E F G@2 D H D C D I J C K@2 ~@9 A B A B C D C E C D C E F G@2 D H D C D I J C
  K@2 D H D C D I J C K@2 ~@6 L M L M L N O M P@6 L M L M L N O M P@2 L M L M L N O M P@2 L M L M L N O M P@2
>`.pickRestart({
  A: "db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~", B: "db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ gb2@2 ab2@2 db3 ~",
  C: "gb2 ~ gb2@2 bb2@2 gb2 ~ ab2 ~ ab2@2 c3@2 ab2 ~", D: "db3 ~ db3@2 bb2@2 ab2 ~ db3 ~ db3@2 bb2@2 ab2 ~",
  E: "f3 ~ db3@2 c3@2 bb2 ~ f3 ~ db3@2 c3 ~ bb2 ~", F: "bb2 ~ bb2@2 ab2 ~ gb2 ~ gb2 ~ gb2 ~ bb2 ~ gb2 ~",
  G: "~ ab2 f2 eb2 ~ ab2 f2 eb2", H: "gb2 ~ gb2@2 bb2 ~ gb2 ~ ab2 ~ ab2@2 c3@2 ab2 ~",
  I: "gb2 ~ gb2 ~ bb2@2 gb2 ~ ab2 ~ ab2@2 c3@2 bb2 ~", J: "db3@2 eb3@2 f3@2 bb3@2 bb2 ~ bb2 ~ bb2@2 ab2@2",
  K: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", L: "eb3 ~ eb3@2 c3@2 bb2 ~ eb3 ~ eb3@2 c3@2 bb2 ~",
  M: "ab2 ~ ab2@2 c3@2 ab2 ~ bb2 ~ bb2@2 d3@2 bb2 ~", N: "ab2 ~ ab2@2 c3@2 ab2@2 bb2 ~ bb2@2 d3@2 c3 ~",
  O: "eb3@2 f3@2 g3@2 c4 ~ c3 ~ c3 ~ c3@2 bb2@2", P: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~",
})).s("gm_acoustic_bass").gain(0.4)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@2 A@2 B C ~@9 D@2 C E F G F G F G F H I J@2 C K C F C F L M@3 ~@9 D@2 C E F G F G F G F H I J@2 C K C F C F L M@3 C
  K C F C F L M@3 ~@6 N O N O N O P Q@7 N O N O N O P R@3 N O N O N O P R@3 N O N O N O P R@3
>`.pickRestart({
  A: "[[ab3,f4]@11 ~ [bb3,gb4]@4 [ab3,f4]@15 ~, db4@31 ~]/2", B: "[ab3,db4,f4]@11 ~ [bb3,db4,gb4]@4", C: "[ab3,db4,f4]",
  D: "[[ab3,f4]@15 ~ [bb3,gb4]@3 ~ [c4,eb4,ab4]@4 [ab3,db4,f4]@7 ~, db4@19 ~@13]/2", // Db Ebm Ab Db
  E: "[bb3,db4,gb4]@4 [c4,eb4,ab4]@4 [ab3,db4,f4]@7 ~, ~@8 c4 ~@7", F: "[bb3,db4,gb4] [c4,eb4,ab4]",
  G: "[f4,ab4,db5] [db4,f4,bb4]", H: "[f4,db5] [db4,f4,bb4], ab4 ~@15", I: "[bb3,db4,f4,bb4] [bb3,db4,gb4,bb4]",
  J: "[c4,eb4,ab4,c5]/2", K: "[bb3,gb4] [c4,eb4,ab4]", L: "[db4,f4,bb4]", M: "[[db4,gb4,bb4] [eb4,ab4,c5]@5]/3",
  N: "[bb3,eb4,g4]", O: "[c4,eb4,ab4] [d4,f4,bb4]", P: "[eb4,g4,c5]", Q: "[[eb4,ab4,c5] [f4,bb4,d5]@13]/7",
  R: "[[eb4,ab4,c5] [f4,bb4,d5]@5]/3", // Ab Bb
})).s("gm_string_ensemble_2").gain(0.33)

// chords · clavinet
const clavinet = note(`<
  ~@26 A@2 B@2 C D C D C D E D F@2 ~@20 A@2 B@2 C D C D C D E D F@2 C D C D C D E D F@2 ~@6 G H G I G H J H ~@6 G H G H
  G H J H K@2 G H G H G H J H K@2 G H G H G H J H K@2
>`.pickRestart({
  A: "[~@8 [ab4,db5]@3 [gb4,bb4,db5,gb5]@4 ~, ~@15 f4@6 ~@11, ~@4 f5 ~@3]/2", B: "[[ab4,c5,eb5,ab5]@31 ~]/2",
  C: "~@4 [ab4,db5,f5] ~ [ab4,db5,f5] ~@5 [ab4,db5,f5] ~ [ab4,db5,f5] ~", // Db
  D: "~@4 [bb4,db5,gb5] ~ [bb4,db5,gb5] ~@5 [c5,eb5,ab5] ~ [c5,eb5,ab5] ~", // Gb Ab
  E: "~@4 [bb4,db5,f5] ~ [bb4,db5,f5] ~@5 [bb4,db5] ~ [bb4,db5,f5] ~, ~@6 f5 ~", // Bbm
  F: "~@4 [c5,eb5,ab5] ~ [c5,eb5,ab5] ~@5 [c5,eb5,ab5] ~ [c5,eb5,ab5] ~", // Ab
  G: "~@4 [bb4,eb5,g5] ~ [bb4,eb5,g5] ~@5 [bb4,eb5,g5] ~ [bb4,eb5,g5] ~", // Eb
  H: "~@4 [c5,eb5,ab5] ~ [c5,eb5,ab5] ~@5 [d5,f5,bb5] ~ [d5,f5,bb5] ~", // Ab Bb
  I: "~@4 [eb5,ab5,ab7] ~ [c5,eb5,ab5] ~@5 [d5,f5,bb5] ~ [d5,bb5]@2, ~@14 f5 ~", // Ab5 Ab Bb Gm
  J: "~@4 [c5,eb5,g5] ~ [c5,eb5,g5] ~@5 [c5,eb5,g5] ~ [c5,eb5,g5] ~", // Cm
  K: "~@4 [d5,f5,bb5] ~ [d5,f5,bb5] ~@5 [d5,f5,bb5] ~ [d5,f5] ~, ~@7 bb5", // Bb Dm
})).s("gm_clavinet").gain(0.37)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~@15 A B A C D E D E D E D F G H@2 I J I K I K L K M@2 ~@9 A B A C D E D E D E D F G H@2 I J I K I K L K M@2 I J I K I
  K L K M@2 ~@6 N O N O N O P O Q@6 N O N O N O P R Q@2 N S T U T V W X Y Z T U T U T V W X Y AA
>`.pickRestart({
  A: "[ab2,f3] ~ [ab2,f3] ~ [ab2,f3] ~ [ab2,f3] ~ [ab2,f3] ~ [ab2,f3] ~ [ab2,f3] ~ [ab2,f3] ~", // Db
  B: "[bb2,gb3] ~ [bb2,gb3] ~ [c3,ab3] ~ [c3,ab3] ~ [ab2,f3] ~ [ab2,f3] ~ [ab2,f3] ~ [ab2,f3] ~", // Ebm Fm Db
  C: "[bb2,gb3] ~ bb2 ~ [c3,ab3] ~ [c3,ab3] ~ [ab2,f3] ~ [ab2,f3] ~ [ab2,f3] ~ [ab2,f3] ~", // Ebm Fm Db
  D: "~@2 [db3,bb3] ~@5 [eb3,c4] ~@3 [eb3,c4] ~@3", E: "~@2 [f3,db4] ~@5 [ab3,db4] ~@3 [bb3,db4] ~@3",
  F: "~@2 [f3,db4] ~@5 [ab3,db4] ~@3 bb3 ~@3", G: "[db3,f3] ~@5 [db3,gb3] ~@9",
  H: "~@2 [c3,ab3] ~@5 [c3,ab3] ~@3 [c3,ab3] ~@3", // Fm
  I: "[db3,f3] ~ [db3,f3] ~ [db3,f3] ~@3 [db3,f3] ~ [db3,f3] ~ [db3,f3] ~@3", // Db
  J: "[db3,gb3] ~ [db3,gb3] ~ db3 ~@3 [eb3,ab3] ~ [eb3,ab3] ~ [eb3,ab3] ~@3", // Gb5 Ab5
  K: "[db3,gb3] ~ [db3,gb3] ~ [db3,gb3] ~@3 [eb3,ab3] ~ [eb3,ab3] ~ [eb3,ab3] ~@3", // Gb5 Ab5
  L: "[bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~@3 [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~@3", // Bb5
  M: "[ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~ [ab2,eb3] ~", // Ab5
  N: "[eb3,g3] ~ [eb3,g3] ~ [eb3,g3] ~@3 [eb3,g3] ~ [eb3,g3] ~ [eb3,g3] ~@3", // Eb
  O: "[eb3,ab3] ~ [eb3,ab3] ~ [eb3,ab3] ~@3 [f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~@3", // Ab5 Bb5
  P: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~@3 [c3,g3] ~ [c3,g3] ~ [c3,g3] ~@3", // C5
  Q: "[bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~", // Bb5
  R: "[eb3,ab3] ~ [eb3,ab3] ~ [eb3,ab3] ~@3 [f3,bb3] ~ bb3 ~ [f3,bb3] ~@3", // Ab5 Bb5
  S: "[eb3,ab3] ~ [eb3,ab3] ~ [eb3,ab3] ~@2 [f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~@3 [eb3,g3]", // Ab5 Bb5 Eb
  T: "~ [eb3,g3] ~ [eb3,g3] ~@3 [eb3,g3] ~ [eb3,g3] ~ [eb3,g3] ~@3 [eb3,ab3]", // Eb Ab5
  U: "~ [eb3,ab3] ~ [eb3,ab3] ~@3 [f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~@3 [eb3,g3]", // Ab5 Bb5 Eb
  V: "~ [eb3,ab3] ~ [eb3,ab3] ~@3 [f3,bb3] ~ [f3,bb3] ~ [f3,bb3] ~@3 [c3,g3]", // Ab5 Bb5 C5
  W: "~ [c3,g3] ~ [c3,g3] ~@3 [c3,g3] ~ [c3,g3] ~ [c3,g3] ~@3 [eb3,ab3]", // C5 Ab5
  X: "~ [eb3,ab3] ~ [eb3,ab3] ~@3 [f3,bb3] ~ bb3 ~ [f3,bb3] ~@3 [bb2,f3]", // Ab5 Bb5
  Y: "~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3]", // Bb5
  Z: "~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [eb3,g3]", // Bb5 Eb
  AA: "~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~ [bb2,f3] ~@2", // Bb5
})).s("gm_acoustic_guitar_nylon").gain(0.34)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~@74 A B A B A B C D E@2 ~@14 F@6 G H G H G H I J K@2 G H G H G H I J K@2 G H G H G H I J K@2
>`.pickRestart({
  A: "[ab4,db5] f4 [ab4,db5] f4 [ab4,db5] f4 [ab4,db5] f4", B: "[bb4,db5] gb4 [bb4,db5] gb4 [c5,eb5] ab4 [c5,eb5] ab4",
  C: "[db5,f5] bb4 [db5,f5] bb4 [bb4,db5] f4 [bb4,db5] f4", D: "[gb4,bb4] db4 [gb4,bb4] db4 [ab4,c5] eb4 [ab4,c5] eb4",
  E: "[c5,eb5] ab4 [c5,eb5] ab4 [c5,eb5] ab4 [c5,eb5] ab4", F: "[f5,bb5] d5 [f5,bb5] d5 [f5,bb5] d5 [f5,bb5] d5",
  G: "[bb4,eb5] g4 [bb4,eb5] g4 [bb4,eb5] g4 [bb4,eb5] g4", H: "[c5,eb5] ab4 [c5,eb5] ab4 [d5,f5] bb4 [d5,f5] bb4",
  I: "[eb5,g5] c5 [eb5,g5] c5 [c5,eb5] g4 [c5,eb5] g4", J: "[ab4,c5] eb4 [ab4,c5] eb4 [bb4,d5] f4 [bb4,d5] f4",
  K: "[d5,f5] bb4 [d5,f5] bb4 [d5,f5] bb4 [d5,f5] bb4", // Dm
})).s("gm_percussive_organ").gain(0.33)

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

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

// drums · clap
const clap = s("cp").struct("<A@6 B C B@3 C B@3 A@14 ~ A@10 B C B@3 C B@3 A@14 ~ A@20 B C B@3 C A@44>".pickRestart({
  A: "x!4", B: "x ~ x!3 ~ x ~", C: "x ~ x!3 ~@3",
})).gain(0.56)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@14 A ~@14 B ~@9 B ~@8 A ~@14 B ~@9 B ~@9 B ~@5 C ~@13 C ~@9 B ~@9 B ~@9 B
>`.pickRestart({
  A: "~@5 x!3", B: "~@2 x!2 ~@2 x!2", C: "~@4 x!4",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<A B@5 A B@22 ~ B@10 A B@22 ~ B@20 A B@49>".pickRestart({
  A: "~ x!7", B: "x!8",
})).gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@14 A ~@14 B ~@9 B ~@8 A ~@14 B ~@9 B ~@9 B ~ C ~ C ~@15 D ~@9 B ~@9 B ~@9 B
>`.pickRestart({
  A: "~ x ~ x!2 ~@3", B: "~ x ~@3 x ~@2", C: "~ x ~@2", D: "~ x!7",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<~@103 [~ x!3 ~@4] ~@30>").gain(0.56)

// drums · crash
const crash = s("cr").struct("<A ~@5 A ~@7 B A C ~ C ~@21 A ~@7 B A C ~ C ~@31 A ~@5 A ~@7 A ~@35>".pickRestart({
  A: "x", B: "~ x ~@2", C: "~@3 x",
})).gain(0.56)

// drums · ride
const ride = s("rd").struct("<~@7 A ~ B ~ A ~ B C ~@26 A ~ B ~ A ~ B C ~@36 A ~ B ~@11 B ~ A ~ D ~@30>".pickRestart({
  A: "~@3 x", B: "~@5 x ~@2", C: "~ x ~@6", D: "~ x ~ x ~@2 x ~",
})).gain(0.56)

// drums · congas
const congas = s("conga:13").struct("<~@6 A@9 ~@25 A@9 ~@35 A@4 ~@16 A@8 B ~ A@8 B ~ A@8 B ~>".pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~ x",
})).gain(1.79)

stack(
  bass, string_ensemble_2, clavinet, acoustic_guitar_nylon, percussive_organ, kick, snare, clap, low_tom, hihat,
  mid_tom, high_tom, crash, ride, congas
)