Skip to content

Releases: YadeWira/packMP3

packMP3 v2.0 (LTS)

Choose a tag to compare

@YadeWira YadeWira released this 12 Jul 14:41

First LTS release. Full MP3 (MPEG audio Layer III) family support and a
faster, format-safe entropy coder.

Highlights

  • Full MPEG audio family for Layer III: MPEG-1, MPEG-2 and MPEG-2.5,
    all channel modes (mono/stereo/joint/dual), CBR and VBR — all lossless.
  • New .pm3 archive extension (format detection is by content, not
    extension, so old .pmp archives from this build still work).
  • -k<N>: intra-file parallel chunking — split a single file into N
    independent streams for multi-core encode/decode. Default -k1 keeps
    the maximum compression ratio; higher N trades a little ratio for speed.
  • Retuned entropy models, link-time optimization, and an optional
    profile-guided build (make pgo) — all format-safe (no change to
    compression ratio), only faster.
  • Verified bit-exact across Linux x64, Windows 7 SP1 x86 and Windows 10
    x64, including -th batch and -k intra-file multithreading.

Library / DLL API

Embeddable C-linkage library (pmplib_* prefix, real extern "C"
symbols), same lossless .pm3 format as the CLI. Download the bundle for
your platform:

  • packMP3-2.0-linux-x64-lib.tar.gzlibpackMP3.so + packMP3lib.a (static) + header
  • packMP3-2.0-win64-lib.zippackMP3.dll + import lib + .def (MSVC) + headers
  • packMP3-2.0-win32-lib.zip — same, 32-bit

All three verified with a real C consumer (lossless round-trip, clean
unmangled export names); both Windows DLLs additionally verified on live
VMs (Windows 10 x64 and Windows 7 SP1 x86 — no crash, correct output).
See the README
for the function list and a known gap (no thread/batch control in the
library yet).

Known limitations

  • Layer I/II (.mp1/.mp2) support exists in the codebase but is disabled
    for this release — those files are rejected cleanly (never damaged).
  • Free-format bitrate and mixed-block-type frames are rejected cleanly
    rather than compressed (rare in practice).

Cross-project standard

This release follows a common CLI/README/release-naming standard agreed
with the sibling packJPG and packPNG projects: identical
subcommands (a/x/list) and switches (-od/-r/-fs/-dry/-ver/
-np/-o/-module/-th<n>/-p/-d/-v<n>) across all three tools.

Verify downloads

sha256sum -c SHA256SUMS.txt

packMP3 v2.0a (library build fix)

Choose a tag to compare

@YadeWira YadeWira released this 12 Jul 19:06

Patch release on top of v2.0 — fixes a real library-build bug, no changes
to the CLI binaries' behavior or the .pm3 format (same appversion 20,
fully compatible with v2.0 archives).

Fixes

  • Library build was broken in v2.0. packmp3.cpp used
    std::atomic/std::thread for the -k/-th intra-file chunking
    feature, but <atomic>/<thread> were only conditionally included
    (CLI-only guard) — make lib/make so/make dll, or any manual
    -DBUILD_LIB build, failed to compile entirely. Reported independently
    by a downstream consumer (ytool) building from the v2.0 tag; reproduced
    and confirmed before fixing.
  • Library headers were missing extern "C". packmp3lib.h/
    packmp3dll.h declared pmplib_* without C linkage, so the "C-linkage
    API" actually had C++ name mangling — a plain C consumer, a .def file,
    or GetProcAddress-by-name needed the compiler-mangled name. Fixed;
    exported symbols are now clean (pmplib_convert_file2file, etc.).
  • Added a 32-bit Windows DLL target (make dll-x86) — packMP3 only
    shipped a 64-bit DLL before.
  • Cleaned up leftover "PMP" wording in CLI help/error text that should
    have said .pm3 (a few strings were missed in the v1.0→v2.0 rename).

Verified before publishing

  • Reproduced the v2.0 library-build bug from scratch against the tagged
    commit, then verified v2.0a builds clean with the exact reported
    recipe (g++ -O3 -std=c++17 -DBUILD_LIB -fPIC -shared ...).
  • Full corpus lossless round-trip (11 files × -k1/2/4, 33/33
    bit-exact) with the actual release binary before upload.
  • Static lib, shared lib, and both Windows DLLs (32/64-bit) built and
    exercised with a real C++ consumer — lossless round-trip confirmed;
    both DLLs additionally verified on live Windows 7 SP1 x86 / Windows 10
    x64 VMs.

Downloads

Same layout as v2.0: packMP3_linux_x64, packMP3_win_x64.exe,
packMP3_win_x86.exe (CLI), plus packMP3-2.0a-linux-x64-lib.tar.gz /
packMP3-2.0a-win64-lib.zip / packMP3-2.0a-win32-lib.zip (library
bundles: lib + headers + .def + README per platform).

sha256sum -c SHA256SUMS.txt

See v2.0 for the
full feature changelog (MPEG-1/2/2.5 support, .pm3 format, -k
chunking, etc.) — this release only fixes the library build.