Strudelify

cooking with abigail

Jack Stauber

KeyG majorTempo120 bpm
0:00/0:00
// cooking with abigail — Jack Stauber
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/6074254; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 50 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · pad new age · "New Age Synthesizer"
const pad_new_age = note("<A B C D E F G@2 ~@26 A B C D E F H@2 I J K L M N H@2>".pickRestart({
  A: "c5!2 d5 e5 ~ d5 c5@2, [c3,e3,g3]", B: "b4!2 c5 b4 ~@4, [b2,d3,g3]@3 ~", C: "a4!2 b4 c5 ~ b4 a4@2, [c3,e3,a3]",
  D: "e4!2 f4 e4 ~@4, [b2,e3,g3]@3 ~", E: "f4!2 g4 a4 ~ g4 f4@2, [c3,f3,a3]",
  F: "c5!2 d5 d#5 ~ d5 c5@2, [c3,d#3,g3]@3 ~", G: "[b2,d3,g3,b4]/2", H: "[[b2,d3,g3], b4 ~]/2",
  I: "c5!2 d5 e5 ~ d5 c5@2, [c3,e3,g3]@3 ~", J: "b4!2 c5 b4 ~@4, [b2,d3,g3]", K: "a4!2 b4 c5 ~ b4 a4@2, [c3,e3,a3]@3 ~",
  L: "e4!2 f4 e4 ~@4, [b2,e3,g3]", M: "f4!2 g4 a4 ~ g4 f4@2, [c3,f3,a3]@3 ~", N: "c5!2 d5 d#5 ~ d5 c5@2, [c3,d#3,g3]",
})).s("gm_pad_new_age").gain(0.25)

// chords · synth strings 1 · "String Synthesizer"
const synth_strings_1 = note(`<
  A B C D E F G@2 ~@10 A H C I E J G@2 A H C I E J K@2 A B C D E F G@2 L M N O P Q R@2
>`.pickRestart({
  A: "[c3,e3,g3]", B: "[b2,d3,g3]@3 ~", C: "[c3,e3,a3]", D: "[b2,e3,g3]@3 ~", E: "[c3,f3,a3]", F: "[c3,d#3,g3]@3 ~",
  G: "[b2,d3,g3]/2", H: "[b2,d3,g3]", I: "[b2,e3,g3]", J: "[c3,d#3,g3]", K: "[[b2,d3,g3]@7 ~]/2",
  L: "c5!2 d5 e5 ~ d5 c5@2, [c3,e3,g3]@3 ~", M: "b4!2 c5 b4 ~@4, [b2,d3,g3]", N: "a4!2 b4 c5 ~ b4 a4@2, [c3,e3,a3]@3 ~",
  O: "e4!2 f4 e4 ~@4, [b2,e3,g3]", P: "f4!2 g4 a4 ~ g4 f4@2, [c3,f3,a3]@3 ~", Q: "c5!2 d5 d#5 ~ d5 c5@2, [c3,d#3,g3]",
  R: "[[b2,d3,g3], b4 ~]/2", // G
})).s("gm_synth_strings_1").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@8 x ~@41>").gain(0.5)

// drums · clap
const clap = s("cp").struct("<A B A B A B A B ~@25 C A B A B A B A@2 B A B A B A@2 D>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@8 x ~@3 x ~ x!2", D: "~@4 x ~@7 x ~ x!2",
})).gain(0.3)

// drums · claves
const claves = s("clave:2").struct("<[x!2 ~@2 x!2 ~@2]!7 [x!2 ~@2 x!2 ~ x] ~@25 [~@5 x ~@2] [x!2 ~@2 x!2 ~@2]!16>")
  .gain(1.46)

stack(pad_new_age, synth_strings_1, kick, clap, claves)

More by Jack Stauber