Paste a channel-data .s file (the kind included from soundChannelData.s) to get its assembled byte count — for the "Bytes" column on the Custom_Music wiki table. Everything runs in your browser; nothing is uploaded.
include/musicMacros.s's macro definitions (note, beat, rest, sust/rest2/release, vol, env, cmdf0, cmdf2-cmdf5, duty, pitchSlide, vibrato, pitchOffset, goto, cmdff, octave/octaved/octaveu/inline ou/od, tempo) — it does not run a real assembler, so a typo'd or unsupported macro is skipped and flagged in the parse log rather than silently guessed..macro NAME ... .endm is understood, including \1-\9 WLA-DX argument placeholders (mml2wla's own repeat-block/pattern-macro output, this project's own hand-written convention, e.g. horseRace.s's m_HorseRaceBanjoBeat1, and any other macro defined directly in the file): a macro's body costs nothing on its own — it's stored as-is, then re-evaluated fresh for every call, substituting that call's own arguments into \1-\9 first. This means a .rept \N count or a note/beat pitch-vs-r distinction driven by an argument comes out right per call, even when two calls to the same macro pass different arguments. .rept N ... .endr is understood the same way, nestable, whether at file scope or inside a macro body; its body is counted once and multiplied by its count. An unclosed block at end of file is flagged rather than silently dropped..if/.ifdef/.ifndef/.else/.endif/.fail are not evaluated — everything inside is counted as if the condition were true (matching that .fail itself never emits bytes). If a file has real conditional variation, check the log./* ... */ block comments are stripped before parsing (in addition to ; line comments), including ones spanning multiple lines.NOTE_END_WAIT is tracked starting at 0 and updated on any .redefine NOTE_END_WAIT n line encountered, matching the beat macro's own behavior of shortening notes and inserting a rest once it's nonzero. Any other .define/.redefine (e.g. a noise/wave alias's own .redefine NAME $XX) costs 0 bytes, matching that it's assemble-time-only..db/.dw/.dsb/.dsw lines are counted directly (1, 2, N, or N×2 bytes respectively) for files that write bytes by hand instead of via macros.ChannelN — other labels (loop targets, local @-labels, etc.) don't start a new section.