|
|
Inspired by edge264's YAML logging approach (FOSDEM 2026): emit every
gain control decision as a self-contained YAML stream so any frame can
be grep'd, analyzed with Python, or used to craft custom test curves.
./atracdenc -e atrac3 -i in.wav -o out.oma --yaml-log gain.yaml
Each YAML document covers one frame (frame:/time: header) with channels
and bands nested below. Per-band fields emitted in pipeline order:
high_freq_ratio, overlap_ratio, dynamic_min_score, gain[], next_level
pcm_qmf (256 raw QMF samples, non-modulated, non-windowed)
curve_raw, rms_cur, rms_next_mod, point0_level, crossover
curve_final, max_gain, ratio, level_boost, scale_boost, total_boost
gain_boost (or skip: <reason> at each early-exit point)
New files / changes:
src/yaml_log.h - TYamlFmtGuard (stream format RAII),
YamlWriteFloatSeq (vector + ptr/len overloads)
src/atrac/at3/atrac3.h - YamlLog field in TAtrac3EncoderSettings
src/atrac3denc.h - FrameNum counter + YamlLog pointer on TAtrac3Encoder
src/atrac3denc.cpp - frame header in GetLambda, incremental YAML in
CreateSubbandInfo at every decision point
src/main.cpp - --yaml-log <file> CLI flag
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
|