Skip to content

PsyMP3 2.0-RC3

Choose a tag to compare

@segin segin released this 04 Sep 16:50
· 660 commits to master since this release

The Full Precision Release

The third release candidate, and the one where the audio path stops throwing away bits. A 32-bit sample pipeline end to end, two new formats, AAC rebuilt on a better decoder, and seeking that lands where you asked.

The pipeline is 32-bit now

  • 24-bit files were being truncated to 16-bit. ALAC's decoder carried the comment "The audio pipeline is int16; downconvert wider depths", and FLAC's reconstructor had a convertTo16Bit() — both discarded exactly the resolution a lossless format exists to preserve. Samples are now carried as full-scale 32-bit from decoder to output device.
  • Every codec, the equalizer, the FFT tap, the volume stage and the SDL device were widened together. Vorbis gains accuracy too: it decodes from float and now converts straight to 32-bit instead of rounding through 16.

Dolby TrueHD and MLP

  • .thd, .truehd and .mlp play, through a decoder bundled in the binary — no external dependency. Access unit parsing, restart headers, the three Huffman residual tables, the cascaded FIR/IIR recorrelator, lossless matrixing and channel remapping.
  • Verified bit-exact against ffmpeg: 308,454 access units, 24,676,310 samples, zero differences.
  • Derived from truehdd © 2025 Rainbaby, used under Apache-2.0 and credited in the About box. It is the one part of the tree that is not ISC, and it says so.

AAC, rebuilt

  • The whole AAC family now runs on FDK-AAC: AAC-LC, HE-AACv1, HE-AACv2 and xHE-AAC (MPEG-D USAC), through one decoder. faad2 is gone.
  • faad2 stopped at object type 27 and could not decode USAC at all, so a second decoder had to be carried beside it. FDK also decodes SBR and — especially — Parametric Stereo far more accurately, and is continuously fuzzed as part of Android.
  • Windows gets AAC for the first time. The cross-build sysroots never had faad2.
  • Media Information names the profile actually decoded — AAC-LC, HE-AACv1, HE-AACv2, xHE-AAC — read from the decoder rather than the file header, because SBR and Parametric Stereo are usually signalled implicitly.

Gapless and seeking

  • AAC tracks start on their first real sample. Encoder priming and trailing padding are read from the MP4 edit list or the iTunSMPB atom and trimmed away — roughly 46 ms of warm-up at the head of every track, and the reason gapless AAC albums clicked at each boundary. Verified sample-exact against ffmpeg on tone and chirp signals.
  • Ogg seeks land where you asked. They were resuming up to a full page — about a second — early. Ogg now tracks FLAC and AAC to within measurement noise.

Also in this release

  • Discord Rich Presence stopped being able to kill the player: a vanished Discord no longer raises SIGPIPE, IPC reads are bounded, updates respect the rate limit, and the saved on/off setting is honoured at startup. Cover art is more careful about what counts as a match.
  • Media Information reports a bitrate for ALAC, Vorbis and Opus; codec names are spelled rather than shouted (Vorbis, Opus, Speex, xHE-AAC, Dolby TrueHD); the Position label no longer clips the total time.
  • HTTP transfers set CURLOPT_NOSIGNAL, fixing crashes under concurrent transfers.
  • The About box credits SDL3, TagLib (under the MPL), and Xiph's libogg and libopus alongside the vendored decoders.

Downloads: Windows binaries for x86_64, i686 (32-bit) and ARM64, built with llvm-mingw — fully static, no runtime dependencies. Debug-symbol variants included.