<feed xmlns='http://www.w3.org/2005/Atom'>
<title>atracdenc/test, branch fix_input_file_path</title>
<subtitle>OpenSource ATRAC1 ATRAC3 Encoder</subtitle>
<id>https://code.mastervirt.ru/atracdenc/atom?h=fix_input_file_path</id>
<link rel='self' href='https://code.mastervirt.ru/atracdenc/atom?h=fix_input_file_path'/>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/atracdenc/'/>
<updated>2026-05-03T18:37:20Z</updated>
<entry>
<title>Clean up UTF-8 path handling</title>
<updated>2026-05-03T18:37:20Z</updated>
<author>
<name>Daniil Cherednik</name>
<email>dan.cherednik@gmail.com</email>
</author>
<published>2026-05-03T18:37:20Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/atracdenc/commit/?id=84c58f18c908defb95494e86d0c7c36750dac01b'/>
<id>urn:sha1:84c58f18c908defb95494e86d0c7c36750dac01b</id>
<content type='text'>
Reuse the shared UTF-8 path helper in Media Foundation, normalize compressed output open errors, cover AEA encode/decode paths, and expand integration tests for ATRAC1 and decode filenames.
</content>
</entry>
<entry>
<title>Fix UTF-8 input and output paths</title>
<updated>2026-05-03T18:20:31Z</updated>
<author>
<name>Daniil Cherednik</name>
<email>dan.cherednik@gmail.com</email>
</author>
<published>2026-05-03T18:20:31Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/atracdenc/commit/?id=2f96a97c070ecd6475900ffbe4bf9ee52f6b27e4'/>
<id>urn:sha1:2f96a97c070ecd6475900ffbe4bf9ee52f6b27e4</id>
<content type='text'>
Report libsndfile open failures before sample-rate validation, use UTF-16 Windows opens for PCM and compressed containers, and add integration tests for missing input plus UTF-8 input/output filenames.
</content>
</entry>
<entry>
<title>Add MSYS2 build support (#70)</title>
<updated>2026-05-03T12:41:21Z</updated>
<author>
<name>Daniil Cherednik</name>
<email>dan.cherednik@gmail.com</email>
</author>
<published>2026-05-03T12:41:21Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/atracdenc/commit/?id=3e04903c35c61a0f0be0c2db409f5fd5f58d6e12'/>
<id>urn:sha1:3e04903c35c61a0f0be0c2db409f5fd5f58d6e12</id>
<content type='text'>
* Add MSYS2 build support

Add a selectable PCM I/O backend so MSVC builds can keep Media Foundation while MSYS2/MinGW builds use libsndfile.

Teach the libsndfile finder about MINGW_PREFIX and add a Windows MSYS2 CI job that builds the libsndfile backend.

Fix and enable tests for MSYS2 builds</content>
</entry>
<entry>
<title>atrac3: reimplement tonal encoding. Use flatness-based tonal extraction</title>
<updated>2026-04-19T22:27:45Z</updated>
<author>
<name>Daniil Cherednik</name>
<email>dan.cherednik@gmail.com</email>
</author>
<published>2026-04-18T14:51:23Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/atracdenc/commit/?id=e784b79cfef682059cf5cc8cf9bed635e714c439'/>
<id>urn:sha1:e784b79cfef682059cf5cc8cf9bed635e714c439</id>
<content type='text'>
- Add shared CalcSpectralFlatnessPerBfu helper in atrac_psy_common
  with BFU-table mapping.
- Implement ATRAC3 tonal extraction: compute MDCT energy, estimate
  per-BFU flatness, extract up to 5-bin strongest tonal run in
  low-flatness BFUs, and zero extracted bins in residual.
- Map extracted tonal bins into TTonalBlocks and integrate them into
  bitstream coding.
- Update ATRAC3 bit allocation - reduce residual bits for BFUs with tonal
  blocks, and increase tonal quantizer selection.
- Restore --notonal CLI option in main.cpp for A/B comparison.
</content>
</entry>
<entry>
<title>Add CalcCurve and TSpectralUpsampler for transient detection</title>
<updated>2026-03-05T22:44:12Z</updated>
<author>
<name>Daniil Cherednik</name>
<email>dan.cherednik@gmail.com</email>
</author>
<published>2026-03-05T22:44:12Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/atracdenc/commit/?id=7607e6c47490e3d5c74949e7f7d90ef6f9c0b5f0'/>
<id>urn:sha1:7607e6c47490e3d5c74949e7f7d90ef6f9c0b5f0</id>
<content type='text'>
CalcCurve (transient_detector.cpp/h):
- Recursive divide-and-conquer FindTransients scans the gain vector for
  monotonic 3-subframe windows (rising or falling); kMinScore=2.0 filters
  out oscillations smaller than a factor of 2 (no-op at Level 4).
- RelationToIdx maps an amplitude ratio to an ATRAC3 gain Level index.
- TCurveBuilderCtx carries LastLevel across frames; CalcCurve prepends it
  as a virtual boundary element to detect Location=0 attacks.
- budget=8 matches ATRAC3 SubbandInfo::MaxGainPointsNum.

TSpectralUpsampler (transient_spectral_upsampler.cpp/h):
- Applies a Planck-taper window (ε=0.15) to a 512-sample context window,
  forward-FFTs, applies a 3-bin raised-cosine HPF, zero-pads to 4096 bins,
  and inverse-FFTs to give an 8× upsampled output.
- Returns highFreqRatio = Σ|X[k]·H[k]|²/Σ|X[k]|²; callers skip CalcCurve
  when this is below kHighFreqThreshold=0.05, preventing false transients
  from Planck noise-floor variation in sub-cutoff frames.

Tests:
- gain_processor_ut: upsampled-path blocks added to all FreqDomain tests;
  CalcCurve negative tests (NegativeTests suite).
- transient_spectral_upsampler_ut: OutputSize, DCIsRemovedByLowCutFilter,
  HighFreqSinePreservesRMS (parametrised), ChirpNoTransient (0→5510 Hz
  sweep at 689 Hz low-cut, Len1024/16384/262144).

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add TGainProcessor and frequency-domain gain modulation unit tests</title>
<updated>2026-02-23T21:15:20Z</updated>
<author>
<name>Daniil Cherednik</name>
<email>dan.cherednik@gmail.com</email>
</author>
<published>2026-02-23T21:08:26Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/atracdenc/commit/?id=836ce334b101182ec8ceea35e9349f1d507e27c5'/>
<id>urn:sha1:836ce334b101182ec8ceea35e9349f1d507e27c5</id>
<content type='text'>
gain_processor_ut.cpp covers three test suites:

TGainProcessor_Modulate (5 tests):
  - Empty gain returns null op
  - Single-point constant/transition/remainder regions
  - Two-point and three-point envelopes

TGainProcessor_Demodulate (5 tests):
  - Empty gain returns null op
  - Single-point constant/transition/remainder regions
  - Two-point envelope

TGainProcessor_Mirror (6 tests):
  - Round-trip Modulate-&gt;Demodulate algebraic identity
  - Constant, transition, remainder, and asymmetric-scale cases

TGainProcessor_FreqDomain (6 tests):
  Each test builds a 3-frame signal, runs MDCT with Modulate, checks
  HF energy reduction vs unmodulated, and verifies perfect signal
  reconstruction via MDCT(Modulate)-&gt;MIDCT(Demodulate) with 1e-5 tolerance.

  Test signals and gain envelopes (mirroring atrac3denc_ut.cpp reference tests):

  | Test name                                             | Frame 1 gain          | Frame 2 comp gain |
  |-------------------------------------------------------|-----------------------|-------------------|
  | GainModulation_ReducesSpectralEnergy                  | {{7,0}}               | none              |
  | GainModulation_ReducesSpectralEnergy_TransientInFrame | {{4,8},{7,31}}        | {{1,1}}           |
  | GainModulation_ReducesSpectralEnergy_AttackAndRelease | {{7,4},{4,12},{7,31}} | {{1,1}}           |
  | GainModulation_ReducesSpectralEnergy_DcSignal         | {{7,1}}               | {{1,1}}           |
  | GainModulation_ReducesSpectralEnergy_DcSignal2        | {{7,1}}               | {{1,0}}           |
  | GainModulation_ReducesSpectralEnergy_2PointsWithoutScaleDc2 | {{4,0},{1,31}} | none              |

  Round-trip Demodulate mapping (siCur -&gt; siNext at frame 2 MIDCT):

  | Test name                                             | siCur                 | siNext  |
  |-------------------------------------------------------|-----------------------|---------|
  | GainModulation_ReducesSpectralEnergy                  | {{7,0}}               | empty   |
  | GainModulation_ReducesSpectralEnergy_TransientInFrame | {{4,8},{7,31}}        | {{1,1}} |
  | GainModulation_ReducesSpectralEnergy_AttackAndRelease | {{7,4},{4,12},{7,31}} | {{1,1}} |
  | GainModulation_ReducesSpectralEnergy_DcSignal         | {{7,1}}               | {{1,1}} |
  | GainModulation_ReducesSpectralEnergy_DcSignal2        | {{7,1}}               | {{1,0}} |
  | GainModulation_ReducesSpectralEnergy_2PointsWithoutScaleDc2 | {{4,0},{1,31}} | empty   |

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Disable asan for stable branch. Remove ghasendtool.</title>
<updated>2025-07-20T12:01:08Z</updated>
<author>
<name>Daniil Cherednik</name>
<email>dan.cherednik@gmail.com</email>
</author>
<published>2025-06-22T21:22:13Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/atracdenc/commit/?id=6e54220180ec563658d808f15a99069bde426588'/>
<id>urn:sha1:6e54220180ec563658d808f15a99069bde426588</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Bump c++ version to c++17</title>
<updated>2025-06-22T12:37:24Z</updated>
<author>
<name>Daniil Cherednik</name>
<email>dan.cherednik@gmail.com</email>
</author>
<published>2025-06-21T19:53:19Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/atracdenc/commit/?id=45b630c6901d36d06a9fb251c0bf8a91848fd740'/>
<id>urn:sha1:45b630c6901d36d06a9fb251c0bf8a91848fd740</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Merge branch 'at3plus-dev'</title>
<updated>2025-05-31T20:39:38Z</updated>
<author>
<name>Daniil Cherednik</name>
<email>dan.cherednik@gmail.com</email>
</author>
<published>2025-05-31T20:39:38Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/atracdenc/commit/?id=1c7f2f821fb965af468cdf2a14df3ff75cc1c352'/>
<id>urn:sha1:1c7f2f821fb965af468cdf2a14df3ff75cc1c352</id>
<content type='text'>
It looks like we are able to encode ATRAC3PLUS compatible bitstream so we can merge at3p development branch in to the main branch.
Current limitation for AT3P mode:
- Only 352 Kbps (proper bit allocation and some psychoacoustic must be implemented)
- GHA sometime works with error (but huge bitrate hide it)
- No VLC, VQ, delta encoding
- No noise substitution
- No gain control
- No window shape switching
</content>
</entry>
<entry>
<title>Compatibility with modern cmake</title>
<updated>2025-04-26T14:57:15Z</updated>
<author>
<name>Daniil Cherednik</name>
<email>dan.cherednik@gmail.com</email>
</author>
<published>2025-04-26T14:57:15Z</published>
<link rel='alternate' type='text/html' href='https://code.mastervirt.ru/atracdenc/commit/?id=272af27a3d148bd13e8f15640e53ca70c64ccb9b'/>
<id>urn:sha1:272af27a3d148bd13e8f15640e53ca70c64ccb9b</id>
<content type='text'>
</content>
</entry>
</feed>
