Strudelify

bob-omb battlefield

Addison Tung

KeyA majorTempo115 bpm
0:00/0:00
// bob-omb battlefield — Addison Tung
// 115 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/4821130; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 35 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// 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("<A B C D E F G H I J C D E F G H I K L M L N O P O Q R S R T R S R U V>".pickRestart({
  A: "c5 ~ a4 ~ c5@2 d5 c5 ~@2 e4@2 f4 ~ f#4@2", B: "g4@2 ~@2 g4 g4@2 g4 ~@6 d4 d#4",
  C: "e4 d#4 e4 g4 ~ a4 g4@2 c4@4 ~@2 g3 g#3", D: "a3 g#3 a3 c4 ~ d4 c4@2 a3@4 ~@2 g#3@2",
  E: "g3 e3 f3 g4@3 g3 e3 f3 g4@3 g3 e3 f3 g4", F: "f4 ~ g4 ~ a4 g4@2 d4 ~@6 d4 d#4",
  G: "e4 d#4 e4 g4 ~ a4 g4@2 a#4@4 ~@2 g4 g#4", H: "a4 g#4 a4 c5 ~ d5 c5@2 a4@4 ~@2 g#4@2",
  I: "g4 f#4 g4 g3@3 g4 f#4 g4 g3@2 g3 e4@2 e4@2", J: "c4@8 ~@6 d4 d#4", K: "c4@8 ~@4 e4 f4 g4 g#4",
  L: "f4@6 f4 ~ e4@6 d#4 ~", M: "d4 ~@2 e4 ~@2 c4@6 e4 f4 g4 g#4", N: "d4 ~@2 c4 ~@2 a3@8 ~@2",
  O: "f4 ~ f4 ~ f4 ~ f4 ~ e4 ~ e4 ~ d#4 ~ d#4 ~", P: "d4 ~@2 e4 ~@2 c4@8 ~@2", Q: "d4 ~@2 c4 ~@2 g3@8 ~@2",
  R: "c5 c4 ~ a#4 ~@4 c5 c4 ~ a#4 ~@4", S: "a4 c4 ~ d#4 ~@4 a4 c4 ~ d#4 ~@4", T: "a4 ~ a4 ~ a4 ~ a4 ~ g#4@2 ~@2 g4@4",
  U: "a4 ~ a4 ~ a4 ~ c5 ~ d#5@2 ~@2 e5@4", V: "e5 ~",
})).s("gm_alto_sax").gain(0.45)

// other · trumpet · "B♭ Trumpet"
const trumpet = note("<A B ~@7 C D E F G H I J K L M L N O P O N Q R Q S Q R Q T U>".pickRestart({
  A: "c5 ~ a4 ~ c5@2 d5 c5 ~@2 e4@2 f4 ~ f#4@2", B: "d5@2 ~@2 d5 d5@2 d5 ~@8", C: "~@4 g4 a4 ~ c5 ~@8", D: "~@3 g5",
  E: "~@3 f5", F: "~ g4", G: "a4@3 c5 ~@2 d5@4 ~@6", H: "~@10 c5 ~ d5 e5@2 c5", I: "~@10 c5 ~ d#5 d5@2 c5",
  J: "~@8 g4 ~@2 g4 ~@2 g4 ~", K: "~@2 c5@2 a#4 b4@2 c5@2 ~@3 e4 f4 g4 g#4", L: "f5@3 f5 e5@3 d#5",
  M: "d5@3 e5@3 c5@6 e4 f4 g4 g#4", N: "d5 ~@2 c5 ~@2 c5@8 ~@2", O: "f5 ~ f5 ~ f5 ~ f5 ~ e5 ~ e5 ~ d#5 ~ d#5 ~",
  P: "d5 ~@2 e5 ~@2 c5@8 ~@2", Q: "c5 e4 ~ a#4 ~@4 c5 e4 ~ a#4 ~@4", R: "a4 c4 ~ d#4 ~@4 a4 c4 ~ d#4 ~@4",
  S: "a4 ~ a4 ~ a4 ~ a4 ~ g#4@2 ~@2 g4@4", T: "a4 ~ a4 ~ a4 ~ c5 ~ d#5@2 ~@2 e5@4", U: "e5 ~",
})).s("gm_trumpet").gain(0.4)

// bass · electric bass finger · "Electric Bass"
const bass = note("<~ A B C D E F G H I B C D J F G H K L M N O P O P O ~@3 Q ~@3 R S>".pickRestart({
  A: "~@4 g2 g1@2 b1", B: "c2@6 c2!2 ~@6 e2@2", C: "f2@6 f2!2 ~@6 f2@2", D: "e2@6 e2 d#2@6 ~ d#2@2",
  E: "d2@4 d2@3 g2 ~@2 g1@4 b1@2", F: "c2@6 c2 e2 ~@6 e2@2", G: "f2@6 f2 f#2 ~@6 f#2@2",
  H: "g2@3 g1@3 g2@3 g1@3 b1@2 b1@2", I: "~@2 c2@2 a#1 b1@2 c2@2 ~ g1@4 b1@2", J: "d2@4 d2@3 g2 ~@6 b1@2",
  K: "~@2 c2@2 a#1 b1@2 c2@2 ~@3 c2@4", L: "f2@6 f2@2 e2@6 d#2 ~", M: "d2 ~@2 d2 ~@2 c2@10", N: "f2@6 f2 ~ e2@6 d#2 ~",
  O: "d2 ~@2 d2 ~@2 c2@8 ~@2", P: "f2 ~ f2 ~ f2 ~ f2 ~ e2 ~ e2 ~ e2 ~ e2 ~", Q: "~@6 f2!2 ~@2 f2@2 g2@4",
  R: "~@4 f1 ~ f#1 ~ g1@2 ~@2 g1@4", S: "c2 ~",
})).s("gm_electric_bass_finger").gain(0.45)

// bass · electric bass finger · "Electric Bass" · soft notes
const bass_soft = note("<~@26 A B A C A B A D ~>".pickRestart({
  A: "c2@6 c2!2 ~@2 c2@2 c2 c2@3", B: "f2@6 f2!2 ~@2 f2@2 f2 f2@3", C: "f2@3 ~@5", D: "f1 ~ f1 ~@13",
})).s("gm_electric_bass_finger").gain(0.25)

stack(alto_sax, trumpet, bass, bass_soft)