Skip to content

Parse every EZ CD Audio Converter log format - #25

Merged
arg274 merged 2 commits into
mainfrom
ezcd-full-format
Oct 12, 2026
Merged

arg274 merged 2 commits into
mainfrom
ezcd-full-format

Conversation

@arg274

@arg274 arg274 commented Oct 12, 2026

Copy link
Copy Markdown
Collaborator

The EZ CD parser was written against one 10.3.0 log and patched for 6.0.0. It now follows a static analysis of how 2.8, 6.0, 7.1, 8.2, 11.5 and 12.4 write their rip logs, and reads every layout they produce in both the Normal/Range and Single File/Disc Image profiles.

What changes

  • Tracks come from the Details blocks instead of the summary table. Cancelled and failed tracks are aborted, including a 12.4 track whose encoder fails to close and which logs no closing line. Both CRC label schemes are read (CRC / CRC verify up to 6.0, CRC (test) / CRC (copy) from 7.1).
  • Per-sector errors are read in both formats (one line per flag up to 7.1, one combined line from 8.2), with positions merged into spans of adjacent sectors:
    • read → read
    • data (C2) → damaged sectors
    • synchronization → jitter
    • CRC (copy and test reads disagree) → inconsistency in error sectors
  • TOC is built from sectors, covering all three table layouts and the reduced image log with no MSF columns. Pre-emphasis used to be read from the HDCD column on 12.4, and De-emphasized never matched.
  • Settings newly mapped: AccurateCDDA → accurate stream, "Drive read cache" (2.8–7.1, inverted) → defeat audio cache, digital silence deletion, and 12.4's Loudness/Peak/Gain normalization, which used to leave normalization unknown. An album line without an artist keeps its title.
  • Judgement calls, open to overruling:
    • Read mode is Burst for every mode, since none re-reads a sector.
    • "Detect pre-gaps: Enabled" means Append (except HTOA) and Disabled means Append (gaps undetected). Versions without the line give Unknown instead of Inapplicable, which triggered an incorrect gap handling deduction.
    • Null samples used is True. The analysis confirms this for 12.4 only.
    • The encoder is now the output extension (flac), as EAC and XLD report it, instead of the plugin text (FLAC 1.4.2).
    • The Range profile marks its tracks as ranges.
  • A second commit renames new_xld's arguments and XLD's extract_errors locals from r_c, jg_c, m_s… to the field names, matching new_eac and new_ezcd.

Verification

  • The real 10.3.0 log and two real 6.0.0 logs parse with matching CRCs. All three are clean rips.
  • Error, cancel and failure handling was checked only against a 12.4 mock and synthetic 2.8, 7.1 (Range), 8.2 (image), 11.5 and 12.4 (reduced image; loudness plus silent encoder failure) logs built from the analysis. These parse the same with LF line ends and trailing spaces stripped.
  • All 608 XLD sample logs give the same output as main, ignoring array order. Byte-level differences come from the HashSet-ordered encoder list, which varies between runs of the same binary.
  • Clippy is clean on both commits.

🤖 Generated with Claude Code

arg274 and others added 2 commits October 11, 2026 19:33
The parser was written against one 10.3.0 log and patched for 6.0.0.
A static analysis of how 2.8, 6.0, 7.1, 8.2, 11.5 and 12.4 write their
logs now covers every layout they produce, in both the Normal/Range and
the Single File/Disc Image profiles.

Tracks come from the Details blocks rather than the summary table, so
cancelled and failed tracks are aborted, including the 12.4 track whose
encoder fails to close and which logs no closing line at all. Both CRC
label schemes are read: "CRC" and "CRC verify" up to 6.0, "CRC (test)"
and "CRC (copy)" from 7.1.

Per-sector errors are read in both forms, one line per flag up to 7.1
and one combined line from 8.2. Data errors are C2 hits and become
damaged sectors, synchronization errors become jitter, and CRC errors,
sectors whose copy and test reads differ, become inconsistencies. Counts
include both passes, as EZ CD counts them, and positions are merged
into spans of adjacent sectors.

The TOC is built from sectors, which also covers the reduced image log
that prints no MSF columns. Pre-emphasis was read from the end of the
row, which on 12.4 is the HDCD column, and "De-emphasized" never
matched.

Settings with an equivalent are now mapped: AccurateCDDA to accurate
stream, "Drive read cache" (2.8 to 7.1) inverted to defeat audio cache,
the silence deletion lines, and 12.4's Loudness, Peak and Gain
normalization, which used to leave normalization unknown. An album line
without an artist keeps its title.

No read mode re-reads a sector, they differ only in how errors are
flagged, so all of them are burst. Tracks run from one index 01 to the
next and nothing before the first is read, so detected pre-gaps mean
appended except HTOA and undetected ones appended undetected. Versions
without the setting are unknown rather than inapplicable, which drew an
incorrect gap handling deduction. The 12.4 track CRC covers every
sample, silence included, so null samples are used.

The encoder is the output format's extension, as EAC and XLD report it,
rather than the plugin's description.

Checked against the 10.3.0 and 6.0.0 logs, a 12.4 mock, and synthetic
2.8, 7.1, 8.2, 11.5 and 12.4 logs built from the analysis, which parse
the same with LF line ends and trailing spaces stripped.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
new_xld took abbreviations such as r_c, jg_c and m_s, and XLD's
extract_errors kept the same names for its locals. new_eac and new_ezcd
take the field names, so new_xld and its caller now do as well.

Output is unchanged on all 608 XLD sample logs, ignoring array order.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@arg274
arg274 merged commit 6cf7958 into main Oct 12, 2026
8 checks passed
@arg274
arg274 deleted the ezcd-full-format branch October 12, 2026 02:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant