Strudelify

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: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@2 A B A B ~@9 A B A C D E F G D E F G H I J K L K M N O P D Q@2 ~@9 A C A B R E F G D E F G H I J K L K M N O P D
  Q@2 K L K M N O P D Q@2 ~@6 S T U T V W X T Y@6 Z T U T V W X T Y@2 S T U T V W X T Y@2 Z T U T V W X T Y@2
>`.pickRestart({
  A: "db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ db3 ~", B: "db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ gb2@2 ab2@2 db3 ~",
  C: "db3 ~ db3 ~ db3 ~ db3 ~ db3 ~ gb2 ~ ab2@2 db3 ~", D: "gb2 ~ gb2@2 bb2@2 gb2 ~ ab2 ~ ab2@2 c3@2 ab2 ~",
  E: "db3 ~ db3@2 bb2 ~ ab2 ~ db3 ~ db3@2 bb2@2 ab2 ~", F: "gb2 ~ gb2@2 bb2 ~ gb2 ~ ab2 ~ ab2@2 c3@2 ab2@2",
  G: "f3 ~ db3@2 c3@2 bb2 ~ f3 ~ db3@2 c3 ~ bb2 ~", H: "bb2 ~ bb2@2 ab2 ~ gb2 ~ gb2 ~ gb2 ~ bb2 ~ gb2 ~",
  I: "~ ab2 f2 eb2 ~ ab2 f2 eb2", J: "~@2 ab2@2 f2@2 eb2@2 ~@2 ab2@2 f2@2 eb2 ~",
  K: "db3 ~ db3@2 bb2@2 ab2 ~ db3 ~ db3@2 bb2@2 ab2 ~", L: "gb2 ~ gb2@2 bb2 ~ gb2 ~ ab2 ~ ab2@2 c3@2 ab2 ~",
  M: "gb2 ~ gb2 ~ bb2@2 gb2 ~ ab2 ~ ab2@2 c3@2 ab2 ~", N: "db3 ~ db3@2 bb2@2 ab2 ~ db3 ~ db3 ~ bb2@2 ab2 ~",
  O: "gb2 ~ gb2 ~ bb2@2 gb2 ~ ab2 ~ ab2@2 c3@2 bb2 ~", P: "db3@2 eb3@2 f3@2 bb3@2 bb2 ~ bb2 ~ bb2@2 ab2@2",
  Q: "ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~ ab2 ~", R: "gb2 ~ gb2@2 bb2@2 gb2 ~ ab2 ~ ab2@2 c3 ~ ab2 ~",
  S: "eb3 ~ eb3@2 c3@2 bb2@2 eb3 ~ eb3@2 c3@2 bb2 ~", T: "ab2 ~ ab2@2 c3@2 ab2 ~ bb2 ~ bb2@2 d3@2 bb2 ~",
  U: "eb3 ~ eb3@2 c3@2 bb2 ~ eb3 ~ eb3@2 c3@2 bb2 ~", V: "eb3 ~ eb3 ~ c3@2 bb2 ~ eb3 ~ eb3@2 c3@2 bb2 ~",
  W: "ab2 ~ ab2@2 c3@2 ab2@2 bb2 ~ bb2@2 d3@2 c3 ~", X: "eb3@2 f3@2 g3@2 c4 ~ c3 ~ c3 ~ c3@2 bb2@2",
  Y: "bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~ bb2 ~", Z: "eb3@2 eb3@2 c3@2 bb2@2 eb3 ~ eb3@2 c3@2 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 E F G H G H G H G I J K@2 C L C G C G M N@3 ~@9 D@2 E F G H G H G H G I J K@2 C L C G C G M N@3 C
  L C G C G M N@3 ~@6 O P Q P O R S T@7 O P O R O R S U@3 O P O P O R S U@3 O P Q R O R S U@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", E: "[ab3,db4,f4]@15 ~",
  F: "[bb3,db4,gb4]@4 [c4,eb4,ab4]@4 [ab3,db4,f4]@7 ~, ~@8 c4 ~@7", G: "[bb3,db4,gb4] [c4,eb4,ab4]",
  H: "[f4,ab4,db5] [db4,f4,bb4]", I: "[f4,db5] [db4,f4,bb4], ab4 ~@15", J: "[bb3,db4,f4,bb4] [bb3,db4,gb4,bb4]",
  K: "[c4,eb4,ab4,c5]/2", L: "[bb3,gb4] [c4,eb4,ab4]", M: "[db4,f4,bb4]", N: "[[db4,gb4,bb4] [eb4,ab4,c5]@5]/3",
  O: "[bb3,eb4,g4]", P: "[c4,eb4,ab4] [d4,f4,bb4]", Q: "[bb3,eb4,g4]@15 ~", R: "[c4,eb4,ab4]@7 ~ [d4,f4,bb4]@8",
  S: "[eb4,g4,c5]", T: "[[eb4,ab4,c5] [f4,bb4,d5]@13]/7", U: "[[eb4,ab4,c5] [f4,bb4,d5]@5]/3",
})).s("gm_string_ensemble_2").gain(0.33)

// chords · clavinet
const clavinet = note(`<
  ~@26 A@2 B@2 C D E D E D F G H@2 ~@20 I@2 B@2 C D E D E D F G H@2 C D E D E D F G H@2 ~@6 J K J L J M N M ~@6 J O J M
  J K N P Q R J O J M J K N M Q R J O J M J K N P Q R
>`.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] ~ [ab4,db5,f5] ~, ~@6 f5 ~", // Db Db5 Db
  D: "~@4 [bb4,db5,gb5] ~ [bb4,db5,gb5] ~@5 [c5,eb5,ab5] ~ [c5,eb5,ab5] ~", // Gb Ab
  E: "~@4 [ab4,db5,f5] ~ [ab4,db5,f5] ~@5 [ab4,db5,f5] ~ [ab4,db5,f5] ~", // Db
  F: "~@4 [bb4,db5,f5] ~ [bb4,db5,f5] ~@5 [bb4,db5] ~ [bb4,db5,f5] ~, ~@6 f5 ~", // Bbm
  G: "~@4 [bb4,db5] ~ [bb4,db5,gb5] ~@5 [c5,eb5,ab5] ~ [c5,eb5,ab5] ~, ~@2 gb5 ~@5", // Bbm Gb Ab
  H: "~@4 [c5,eb5,ab5] ~ [c5,eb5,ab5] ~@5 [c5,eb5,ab5] ~ [c5,eb5,ab5] ~", // Ab
  I: "[~@16 [ab4,db5,f5]@5 ~ [gb4,bb4,db5,gb5]@8 ~@2, ~@15 f4@6 ~@11]/2", // Db Gb
  J: "~@4 [bb4,eb5,g5] ~ [bb4,eb5,g5] ~@5 [bb4,eb5,g5] ~ [bb4,eb5,g5] ~", // Eb
  K: "~@4 [c5,eb5,ab5] ~ [c5,eb5,ab5] ~@5 [d5,f5,bb5] ~ [f5,bb5] ~, ~@7 d5", // Ab Bb Bb5
  L: "~@4 [eb5,ab5,ab7] ~ [c5,eb5,ab5] ~@5 [d5,f5,bb5] ~ [d5,bb5]@2, ~@14 f5 ~", // Ab5 Ab Bb Gm
  M: "~@4 [c5,eb5,ab5] ~ [c5,eb5,ab5] ~@5 [d5,f5,bb5] ~ [d5,f5,bb5] ~", // Ab Bb
  N: "~@4 [c5,eb5,g5] ~ [c5,eb5,g5] ~@5 [c5,eb5,g5] ~ [c5,eb5,g5] ~", // Cm
  O: "~@4 [c5,eb5,ab5] ~ [c5,eb5,ab5] ~@5 [d5,bb5] ~ [d5,f5,bb5] ~, ~@6 f5 ~", // Ab Gm Bb
  P: "~@4 [c5,eb5] ~ [c5,eb5,ab5] ~@5 [d5,f5,bb5] ~ [d5,f5,bb5] ~, ~@2 ab5 ~@5", // Cm Ab Bb
  Q: "~@4 [d5,f5,bb5] ~ [d5,f5,bb5] ~@5 [d5,f5,bb5] ~ [d5,f5] ~, ~@7 bb5", // Bb Dm
  R: "~@4 [d5,f5,bb5] ~ [d5,f5,bb5] ~@5 [d5,f5,bb5] ~ [d5,f5,bb5] ~", // Bb
})).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
)