Strudelify

Free Mason

Seth Fuller

KeyB♭ majorTempo112 bpm
0:00/0:00
// Free Mason — Seth Fuller
// 112 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/33711; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 41 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · flute
const flute = note("<~@5 A B C@2 D@2 E F A B C@2 ~@4 A B C@2 D@2 E F A B C@2 ~@2 E F A B G@2>".pickRestart({
  A: "g5 d5", B: "a5@8 bb5@6 f5 a5", C: "[bb5@10 a5@2 ~@2 g5@14 f5 g5 a5 bb5]/2", D: "~ g4 d5@2 ~ g4 d5@2",
  E: "~ bb4 f5@2 ~ bb4 f5@2", F: "~ c5 g5@2 ~ c5 g5@2", G: "[bb5@5 a5 ~ g5@7 ~@2]/2",
})).s("gm_flute").gain(0.3)

// other · clarinet · "Bass Clarinet"
const clarinet = note("<~@9 A@2 B@2 C D E@2 ~@8 A@2 B@2 C D E@2 F@2 G H C I J@2>".pickRestart({
  A: "[g3@4 ~ bb3 ~ eb3@9]/2", B: "[bb3@4 ~ g3 ~ c4@9]/2", C: "eb4@3 eb4@2 eb4@3 bb3@3 bb3@2 bb3@3",
  D: "f4@3 f4@2 f4@3 bb3@8", E: "[bb3@8 ~@2 a3@2 ~@2 bb3@14 bb3 a3 g3 f3]/2",
  F: "[g2@4 g2 a2 bb2@2 ~@2 f2@2 ~@2 eb2@16 eb3 d3]/2", G: "bb3@4 ~ g3 ~ c4", H: "c4", I: "f4@3 f4@2 f4@3 bb4@8",
  J: "[bb3@4 ~ a3 ~ bb3@7 ~@2]/2",
})).s("gm_clarinet").gain(0.3)

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<~@5 A B C D E@2 F@2 A G C D ~@4 A B C D E@2 F@2 A G C D ~@2 H I A G J@2>".pickRestart({
  A: "~@3 eb4@2 eb4@3 ~@3 bb3@2 bb3@3", B: "~@3 f4@2 f4@3 d4@6 ~@2", C: "~@2 g4@3 f4 ~ g4",
  D: "d4@4 f4@4 g4@4 bb4 a4 g4 f4", E: "[g4@2 ~ bb4 ~ f4 ~ eb4@3 ~@5 eb4]/2", F: "[bb4@2 ~@3 g4 ~ c5@3 ~@6]/2",
  G: "~@3 f4@2 f4@3 bb4@6 ~@2", H: "bb4@2 ~@3 g4 ~ c5", I: "c4@4 ~@10 c4 d4", J: "[~@2 g4@3 f4 ~ g4@7 ~@2]/2",
})).s("gm_alto_sax").gain(0.3)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note("<~@8 A B@2 C@2 D E F@2 ~@7 A B@2 C@2 D E F@2 B@2 G@2 D E H@2>".pickRestart({
  A: "~@12 c3 d3 eb3 f3", B: "[g2@4 g2 a2 bb2@2 ~@2 f2@2 ~@2 eb2@16 eb3 d3]/2",
  C: "[bb2@8 bb2@2 g2@2 bb2@2 c3@16 c3 d3]/2", D: "eb3 bb2", E: "f3@8 d3@6 d3 f2",
  F: "[g2@8 g2@2 f2@2 ~@2 g2@14 c3 d3 eb3 f3]/2", G: "[bb2@10 g2@2 bb2@2 c3@16 c3 d3]/2", H: "[g2@5 f2 ~ g2@7 ~@2]/2",
})).s("gm_baritone_sax").gain(0.3)

// other · trumpet · "Bb Trumpet"
const trumpet = note("<~@8 A B@2 C@2 D E F@2 ~@7 A B@2 C@2 D E F@2 ~@2 C@2 D G H@2>".pickRestart({
  A: "~@12 bb4 a4 g4 f4", B: "[g4@2 ~ bb4 ~ f4 ~ eb4@3 ~@5 eb4]/2", C: "[bb4@2 ~@3 g4 ~ c5@3 ~@6]/2",
  D: "eb5@3 eb5@2 eb5@3 ~@3 bb4@2 bb4@3", E: "f5@3 f5@2 f5@3 ~@3 bb4@2 bb4@3",
  F: "[bb4@3 bb4@2 bb4@3 ~@2 a4@2 ~@2 bb4@14 d5 c5 bb4 a4]/2", G: "f5@3 f5@2 f5@3 ~@3 [bb4,bb5]@2 [bb4,bb5]@3",
  H: "[[bb4,bb5]@3 [bb4,bb5]@2 [bb4,bb5]@3 ~@2 a5@2 ~@2 [bb4,g5]@14 ~@4]/2", // Bb Eb
})).s("gm_trumpet").gain(0.3)

// other · french horn · "F Mellophone"
const french_horn = note("<~@8 A B@2 C@2 D E F A ~@7 A B@2 C@2 D E F A ~@2 C@2 D G H@2>".pickRestart({
  A: "d4@4 f4@4 g4@4 c4 d4 eb4 f4", B: "[g3@4 g3 a3 bb3@2 ~@2 f3@2 ~@2 eb3@16 eb4 d4]/2",
  C: "[bb3@10 g3@2 bb3@2 c4@16 c4 d4]/2", D: "eb4 bb3", E: "f4@8 d4@6 d4 f4", F: "g4@5 f4 ~ g4", G: "f4@8 d4@6 d4 f3",
  H: "[g3@5 f3 ~ g3@7 ~@2]/2",
})).s("gm_french_horn").gain(0.3)

// other · trombone
const trombone = note("<~@9 A@2 B@2 C D E@2 ~@8 A@2 B@2 C D E@2 F@2 G@2 H I J@2>".pickRestart({
  A: "[g2@4 g2 a2 bb2@2 ~@2 f2@2 ~@2 eb2@16 eb3 d3]/2", B: "[bb2@10 g2@2 ~@2 c3@16 c3 d3]/2", C: "eb3 bb2",
  D: "f3@8 g3@6 d3 f3", E: "[~@4 g3@6 f3@2 ~@2 g3@14 bb3 a3 g3 f3]/2",
  F: "[g2@4 g2 a2 bb2@2 ~@2 f3@2 ~@2 eb3@16 eb3 d3]/2", G: "[bb3@8 ~@2 f3@2 ~@2 c3@16 c3 d3]/2",
  H: "~@3 eb3@5 ~@3 bb2@5", I: "~@3 f3@5 d3@6 d3 f3", J: "[g3@5 c4 ~ g3@7 ~@2]/2",
})).s("gm_trombone").gain(0.3)

// bass · tuba · "F Tuba"
const bass = note("<A B@2 C@2 D E F@2 B@2 C@2 D E F@2 B@2 C@2 D E F@2 B@2 C@2 D E F@2 B@2 C@2 D E G@2>".pickRestart({
  A: "~@14 d2 f2", B: "[g2@4 g2 a2 bb2@2 ~@2 f2@2 ~@2 eb2@16 eb3 d3]/2", C: "[bb2@10 g2@2 bb2@2 c3@16 c3 d3]/2",
  D: "eb2 bb2", E: "f2@8 d3@6 d3 f2", F: "[g2@10 f2@2 ~@2 g2@14 bb2 a2 g2 f2]/2", G: "[g2@5 f2 ~ g2@7 ~@2]/2",
})).s("gm_tuba").gain(0.45)

// drums · snare
const snare = s("sd").struct("<~@9 [~ x ~ x]!8 ~@8 [~ x ~ x]!8 ~@2 [~ x ~ x]!5 ~>").gain(0.3)

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@9 [x!4 ~ x!7 ~ x!3]!8 ~@8 [x!4 ~ x!7 ~ x!3]!8 ~@2 [x!4 ~ x!7 ~ x!3]!5 ~>")
  .gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@9 A ~ B ~ C@2 B ~@9 A ~ B ~ C@2 B ~@3 B ~ C@2 B D>".pickRestart({
  A: "x ~@2 x ~@3 x", B: "x ~@4 x ~ x", C: "x ~@10 x ~@4", D: "x ~@2 x ~ x ~ x ~@8",
})).gain(0.3)

stack(flute, clarinet, alto_sax, baritone_sax, trumpet, french_horn, trombone, bass, snare, low_tom, pedal_hat, crash)