Strudelify

cantaloupe island

Bradley Herrin

KeyF majorTempo114 bpm
0:00/0:00
// cantaloupe island — Bradley Herrin
// 114 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/3895911; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 88 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(114/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.

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@3 A ~@3 A ~@3 B C@2 D@2 ~@3 A ~@3 A E@2 ~ B C@2 D@2 ~@3 A ~@2 F@2 ~@2 G@2 H@3 I ~ J K@2 ~@15 L M@8 N@3 B C@2 D@2 ~
  O@2 P
>`.pickRestart({
  A: "~@12 f4@2 f4 ~", B: "~@8 c5@2 eb5 ~ c5@2 eb5 ~", C: "[g4@6 g4@14 ~@4 c5@2 eb5 ~ c5@2 eb5 ~]/2",
  D: "[g4@3 g4@11 ~@2]/2", E: "[~@8 ab4@2 bb4 ~ bb4@10 ab4 ~ bb4@2 b4 ~ eb4@2 f4 ~]/2",
  F: "[~@4 eb4@2 f4 ~ f4@4 ~@2 ab4@4 bb4 ~ f4@2 eb4@6 f4@2 f4 ~]/2",
  G: "[~@4 ab4@2 bb4@2 bb4@2 ab4 ~@3 b4@4 bb4@2 ab4@2 f4@6 ~@4]/2", H: "c4@3 c4@5", I: "c4@3 c4@3 ~@2", J: "~@14 eb5 ~",
  K: "[~ c5@11 ~@2 d5 c5]/2", L: "~@5 f4 ab4 bb4", M: "~@2 eb4 ~@5 f4@3 ~@5", N: "f4/3",
  O: "~@2 c4@2 d4@2 ~@2 eb4@4 d4@2 c4 ~", P: "~ c4 d4 ~ eb4@2 f4 eb4",
})).s("gm_alto_sax").gain(0.3)

// bass · clarinet · "Bass Clarinet"
const bass = note(`<
  ~@3 A B@3 A C@4 D@4 ~@3 A B@3 A C@4 D@4 ~@3 A B@3 A E@4 D@3 F ~ G H@2 ~@16 I@8 C@4 D@3 F ~@2 B J
>`.pickRestart({
  A: "~@12 f3@2 f3 ~", B: "f3@6 c3@6 eb3@2 f3 ~", C: "db3@6 ab2@6 b2@2 db3 ~", D: "d3@3 d3@5",
  E: "db3@6 ab3@6 b3@2 db4 ~", F: "d3@3 d3@3 ~@2", G: "~@14 eb3 ~", H: "[~ c3@11 ~@2 f3!2]/2",
  I: "~@2 ab2 ~@5 bb2@3 ~@5", J: "f3@3 c3@3 eb3 f3",
})).s("gm_electric_bass_finger").gain(0.25)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@3 A B@2 ~ A ~@3 C D@2 E@2 ~@3 A ~@3 A ~@3 C D@2 E@2 ~@3 A B@2 ~ A F@2 ~ C G@2 E@2 ~ H I@2 ~@15 J K J L M K J N@2 O P
  O C D@2 E@2 ~@2 Q R
>`.pickRestart({
  A: "~@12 f4@2 f4 ~", B: "[~@8 ab4@2 bb4 ~ bb4@10 ab4 ~ bb4@2 c5 ~ eb4@2 f4 ~]/2", C: "~@8 c5@2 eb5 ~ c5@2 eb5 ~",
  D: "[f4@6 f4@14 ~@4 c5@2 eb5 ~ c5@2 eb5 ~]/2", E: "[f4@3 f4@11 ~@2]/2",
  F: "[~@8 ab4@2 bb4 ~ bb4@10 ab4 ~ bb4@2 b4 ~ eb4@2 f4 ~]/2", G: "[f4@6 f4@14 ~@4 c5 [c5,d5] eb5 ~ c5@2 eb5 ~]/2",
  H: "~@14 eb5 ~", I: "[~ c5@11 ~@2 f5!2]/2", J: "~@10 f4 ~ ab4@2 bb4 ~", K: "bb4@2 ab4 ~@13",
  L: "c5 c5@3 c5@2 ~@2 b4@2 bb4 ~ ab4@2 f4 ~, ~ d5 ~@14", M: "bb4@2 ~@2 eb4@2 f4 ~@3 f4 ~ ab4@2 bb4 ~",
  N: "[b4@2 ~@4 b4 ~@7 b4@4 bb4@2 ab4@2 eb4@2 f4@2 eb4@2 f4@2 ~@2]/2", O: "c5@6 c5 ~@9", P: "~@6 db5 ~@3 db5@6",
  Q: "~@2 c5@2 d5@2 ~@2 eb5@4 d5@2 c5 ~", R: "~ c5 d5 ~ eb5@2 f5!2",
})).s("gm_trumpet").gain(0.4)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note(`<
  ~@3 A ~@3 A B@2 ~ C D@2 E@2 ~@3 A ~@3 A ~@3 C D@2 E@2 ~@3 A F@2 ~ A B@2 ~ G H@2 I@2 ~ J K@2 ~@15 L M L N O M L P@2 Q R
  Q C D@2 E@2 ~@2 S T
>`.pickRestart({
  A: "~@12 f4@2 f4 ~", B: "[~@8 ab4@2 bb4 ~ bb4@10 ab4 ~ bb4@2 b4 ~ eb4@2 f4 ~]/2", C: "~@8 c5@2 eb5 ~ c5@2 eb5 ~",
  D: "[f4@6 f4@14 ~@4 c5@2 eb5 ~ c5@2 eb5 ~]/2", E: "[f4@3 f4@11 ~@2]/2",
  F: "[~@8 ab4@2 bb4 ~ bb4@10 ab4 ~ bb4@2 c5 ~ eb4@2 f4 ~]/2", G: "~@8 c4@2 eb4 ~ c4@2 eb4 ~",
  H: "[c4@6 c4@14 ~@4 c4 [c4,d4] eb4 ~ c4@2 eb4 ~]/2", I: "[c4@3 c4@11 ~@2]/2", J: "~@14 eb4 ~",
  K: "[~ c4@11 ~@2 bb4 ab4]/2", L: "~@10 f4 ~ ab4@2 bb4 ~", M: "bb4@2 ab4 ~@13",
  N: "c5 c5@3 c5@2 ~@2 b4@2 bb4 ~ ab4@2 f4 ~, ~ d5 ~@14", O: "bb4@2 ~@2 eb4@2 f4 ~@3 f4@2 ab4@2 bb4@2",
  P: "[b4@2 ~@4 b4 ~@7 b4@4 bb4@2 ab4@2 eb4@2 f4@2 eb4@2 f4@2 ~@2]/2", Q: "c5@6 c5 ~@9", R: "~@6 ab4 ~@3 ab4@6",
  S: "~@2 ab4@2 bb4@2 ~@2 c5@4 bb4@2 ab4 ~", T: "~ ab4 bb4 ~ c5@2 d5 c5",
})).s("gm_trumpet").gain(0.4)

// chords · piano
const piano = note(`<
  A@3 ~ A@4 B@4 C@4 A@3 ~ A@4 B@4 C@4 A@3 ~ A@4 B@4 C@3 D A@8 B@4 C@4 ~@4 E F G E@5 B@4 C@3 D A@3 H
>`.pickRestart({
  A: "~@2 [ab3,c4]@2 [bb3,d4]@2 ~@2 [c4,eb4]@4 [eb3,bb3,d4]@2 [f3,ab3,c4] ~, f2@3 c3@3 ~@2", // Ab Bb Cm Ebmaj7 Fm
  B: "~@2 [ab3,b3]@2 [bb3,db4]@2 ~@2 [b3,eb4]@4 [bb3,b3,db4]@2 [ab3,b3,db4] ~, db3@3 ab3@3 ~@2", // Abm Bbm B Bbm Db7
  C: "[d2,d3,g3,c4,f4]@3 d3 d3@4, ~@6 [d2,g3,c4,f4]@9 ~", D: "[d2,d3,g3,c4,f4]@3 d3 d3@2 ~@2, ~@3 [d2,g3,c4,f4]@3 ~@2",
  E: "~@2 [c3,f3,f4,ab4,eb5] ~@5 [f2,bb2,d3,bb3,f4,d5]@3 ~@5", // Fm7 Bb
  F: "~@2 [c3,f3,f4,ab4,eb5] ~@5 [f2,bb2,d3,bb3,f4,d5]@4 ~@4", // Fm7 Bb
  G: "~@2 [f4,ab4,eb5]@2 ~@4 [f2,bb2,d3,bb3,f4,d5]@3 ~@5, ~@2 [c3,f3] ~@13", // Fm7 Bb F5
  H: "~ [ab3,c4] [bb3,d4] ~ [c4,eb4]@2 [eb3,bb3,d4] [f3,ab3,c4], f2@3 c3@3 ~@2", // Ab Bb Cm Ebmaj7 Fm
})).s("gm_piano").gain(0.3)

// bass · electric bass pick · "Bass Guitar"
const bass_2 = note(`<
  A@3 ~ A@4 B@4 C@4 A@3 ~ A@4 B@4 C@4 A@3 ~ A@4 B@4 C@3 D A@8 B@4 C@4 ~@4 E@8 B@4 C@3 D A@3 F
>`.pickRestart({
  A: "f1@6 c2@6 eb2@2 f2 ~", B: "db2@6 ab2@6 b2@2 db3 ~", C: "d2@3 d2@5", D: "d2@3 d2@3 ~@2",
  E: "~@2 ab1 ~@5 bb1@3 ~@5", F: "f1@3 c2@3 eb2 f2",
})).s("gm_electric_bass_pick").gain(0.25)

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

// drums · snare
const snare = s("sd").struct("<~@4 A@8 B@4 ~@4 A@8 B@4 ~@4 A@8 B@4 ~@4 A@8 B@4 C@4 A@12 B@4 A@4>".pickRestart({
  A: "~@3 x ~@2 x!2", B: "x ~@2 x ~@2 x ~", C: "~@3 x ~@4",
})).gain(0.3)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@64 [x!3 ~]!4 ~@20>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@64 [~@6 x!2]!3 ~@21>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@4 A@8 B@4 ~@4 A@8 B@4 ~@4 A@8 B@4 ~@4 A@8 B@4 ~@4 A@12 B@4 A@4>".pickRestart({
  A: "x!8", B: "x ~@2 x ~@2 x ~",
})).gain(0.3)

stack(alto_sax, bass, trumpet, trumpet_2, piano, bass_2, kick, snare, pedal_hat, high_tom, ride)

More by Bradley Herrin