Changes
The highlights of each release. The full revision history, including test
and documentation changes, is in the Changes file that ships
with the distribution.
0.002.4 — 3 November 2026
DynVariancerecords are no longer emitted as hairpin wedges. Crescendo and diminuendo records of that kind are the written words cresc. and dim.; hairpins come fromOpts:CrescendoandOpts:Diminuendoon individual notes, and still do.crescOffnow emits nothing, which is what stopping a text marking means.- A text direction with a
Posfield but noPlacementused to be written below the staff whatever its vertical position. Placement is now inferred from the sign ofPos, so a marking such as Slightly faster atPos:7appears above the staff where it belongs. - A staff's
EndingBarof Section Close was stored with its space but compared without one, so the ending barline was silently dropped. Values are now normalised on ingestion, and a secondStaffPropertiesrecord — the one carrying channel and volume and noEndingBar— no longer overwrites the first.
0.002.3 — 2 November 2026
- A tempo record with optional text, such as With Expression, was discarded entirely. The text is now kept and emitted in the same direction as the metronome mark, with parentheses around the mark so it reads With Expression (crotchet = 92).
TempoVariancestyle Ritenuto is abbreviated to rit., joining the other standard abbreviations.- The permission-check test skips on Cygwin, where
chmod 0000does not prevent a file being read.
0.002.2 — 30 October 2026
- Some NWC versions spell the hairpin dynamic record
DynamicVariancerather thanDynVariance. The longer spelling is now an alias in the dispatch table, so crescendos and diminuendos parse from either.
0.002.1 — 12 October 2026
- A
TempoVariance:Fermatawas written as the word Fermata in a direction. It is now a<fermata/>notation on the note or rest that follows the record, which is the note it decorates.
0.002.0 — 9 October 2026
- A single-note slur produced a zero-length arc, with start and stop on the same note: the stop was placed on the last note carrying the
Slurtoken instead of on the landing note after it. Slurs are now drawn from the first marked note to the first unmarked one. - The decoder's
opensuppressesautodielocally so the "cannot read file"croakfires on Cygwin, where achmod 0000file still reports as readable. --validatenow checks each staff: empty staves, measure durations against the active time signature, ties that are opened and never closed, and slurs left open.
0.001.1 — 19 September 2026
- Corrected the test dashboard URL and raised the minimum version of
Params::Validate::Strict.
0.001.0 — 18 September 2026
- First CPAN release: a working NWC-to-MusicXML pipeline, from the binary container decoder through the NWCTXT parser and the score model to the MusicXML 4.0 generator, with the
nwc2musicxmlcommand in front of it. - Notes, chords and rests in every NWC duration; grace notes; slurs numbered up to six at once; ties; articulations and ornaments; clef, key and time changes both initial and mid-staff; transposing instruments.
- Tempo and tempo-variance directions; dynamics with the staff's
DynVelvelocities; hairpin wedges; text directions; repeat marks and other barline styles. - Staff visibility, staff groups, MIDI channel and program, asymmetric page margins from
PgMargins, word and lyric fonts fromFontrecords, and the score's own metadata. - Command line: single-file and batch conversion, recursive scanning, a selectable output directory, an overwrite guard, a warnings file and the extended consistency check.
Reading the whole history
The distribution's Changes file is on
MetaCPAN,
and the commit history is in the
repository.