Skip to content

Releases

libpo 2.0.0

Choose a tag to compare

@ericlewis ericlewis released this 05 Nov 14:28

libpo 2.0.0 focuses the repository on the freestanding C library and native tools, improves PO-32 capture compatibility, and documents the current evidence for all supported families.

Breaking change

The in-tree Go module, generated C bundle, Go-specific scripts and CI jobs have been removed. Existing Go consumers must pin an earlier revision. The last main-branch revision containing the module is 2eb1e77. This release does not publish a replacement Go binding.

Fixes and documentation

  • PO-32 capture decoding accepts PCM and float WAVEFORMATEXTENSIBLE input with strict subtype validation.
  • PO-32 parsing recognizes the one-byte 0x496F pattern-slot record found in Flat Beat and legacy backups, while retaining checksum and length validation.
  • Expanded format documentation distinguishes verified field behavior from candidate meanings, including sample-pool references, parameter-only pattern rows, effect footers and retained state.
  • README, contribution and release instructions now describe the C library and native tools.

Compatibility and limits

The C API is unchanged. Canonical LibPO::po and pkg-config po interfaces remain available alongside LibPO32::po32, pkg-config po32 and libpo32.a.

Package metadata now reports 2.0.0. The existing 1.0.0 tag retained 0.3.0 in its VERSION file; that historical tag has not been modified.

Selected PO-33 rebuilds and sample replacements have hardware acceptance evidence. This does not validate every edit, allocation size or related device. PO-35/137 speech analysis and synthesis remain approximate, and unknown metadata is preserved rather than assigned guessed meanings.

Validation

  • Release CTest: 40/40 passed, including freestanding and installed-package checks.
  • ASan/UBSan CTest: 38/38 passed.
  • Version synchronization, clang-format 18, cppcheck, Clang static analysis and diff checks passed.

Full changelog

1.0.0

Choose a tag to compare

@ericlewis ericlewis released this 05 Nov 00:13

What's Changed

  • docs(readme): add downstream projects section by @ericlewis in #19
  • docs(changelog): scope 0.3.0 Fixed to user-visible fixes by @ericlewis in #21
  • fix(synth): correct parameter maps and stabilize pitch modulation by @ericlewis in #22
  • feat: add support for PO-33, PO-35, PO-133, PO-137 by @ericlewis in #23
  • feat: expose all libpo model families in one go module by @ericlewis in #24
  • docs: cover PO-32, PO-33/133 and PO-35/137 workflows by @ericlewis in #25

Full Changelog: 0.3.0...1.0.0

0.3.0

Choose a tag to compare

@ericlewis ericlewis released this 30 Aug 19:23
b5311ac

What's Changed

  • chore: move core implementation into core/ directory by @ericlewis in #5
  • fix: extreme-exponent handling in strtof import by @ericlewis in #4
  • feat(go): add Go bindings for the full public API by @ericlewis in #6
  • fix(core): improve allocation checks and float limit by @ericlewis in #9
  • feat(core): expose streaming audio APIs by @ericlewis in #8
  • fix(core): decode frames with no trailing silence by @ericlewis in #13
  • fix(synth): guard zero sample rate and invalid durations by @ericlewis in #16
  • fix(dpsk): hold carrier at unit magnitude by @ericlewis in #15
  • ci(format): fail on clang-format version mismatch by @ericlewis in #14
  • fix(go): support large decoded frames and signal early-stop parse by @ericlewis in #12
  • perf(synth): remove per-sample powf, fdiv, and LUT range reduction from the render loop by @ericlewis in #10
  • feat(build): add fuzzing, sanitizer CI, and package config by @ericlewis in #11
  • chore(release): cut 0.3.0 by @ericlewis in #18

Full Changelog: 0.2.1...0.3.0

0.2.1

Choose a tag to compare

@ericlewis ericlewis released this 29 Mar 03:33

Fixed

  • ARCHITECTURE.md now lists po32_patch_import.c as a core module.
  • C_API.md now documents PO32_ERR_PARSE, the streaming modulator API,
    and po32_patch_parse_mtdrum_text(...).
  • README.md now lists the po32_example command in the examples table.

Changed

  • Expanded test coverage across all src/ and examples/ files, covering
    error paths, edge cases, and previously untested branches in the import
    parser, synth renderer, frame builder, and example programs.
  • Add license scan report and status by @fossabot in #2
  • fix(import): bound exponent parsing and add helper coverage by @ericlewis in #3

New Contributors

Full Changelog: 0.2.0...0.2.1

0.2.0

Choose a tag to compare

@ericlewis ericlewis released this 28 Mar 20:46

This release focuses on correctness and usability for real PO-32 pattern transfers.

Fixed

  • Corrected pattern packet encode/decode to match the verified on-device wire layout: 16 trigger bytes, then 16 morph pairs, repeated four times.
  • Fixed pattern trigger handling to follow verified wire semantics: a zero low nibble means an empty step, and active triggers require a non-zero fill-rate nibble.
  • Resolved cases where patterns decoded correctly locally but landed on the wrong steps or instruments on real PO-32 hardware.

Added

  • High-level pattern builder helpers:
    • po32_pattern_init(...)
    • po32_pattern_clear(...)
    • po32_pattern_set_trigger(...)
    • po32_pattern_clear_trigger(...)
    • po32_pattern_clear_step(...)
    • po32_pattern_set_accent(...)
  • po32_pattern_step_t and decoded po32_pattern_packet_t.steps[] as the primary pattern editing surface.
  • po32_decode_capture example for decoding transfer WAVs into normalized frame dumps, per-packet payloads, and compact pattern summaries.
  • Starter presets in po32_pattern_editor for quick hardware-safe pattern export.

Changed

  • po32_pattern_packet_t no longer exposes raw trigger_lanes[]; pattern data is edited through decoded step entries and builder helpers.
  • The core is fully freestanding C99, with self-contained replacements for libc-dependent helpers.
  • Release docs were revised for clearer protocol, API, and usage documentation.

Verification

  • ./scripts/check-version-sync.sh
  • ./scripts/ci-verify.sh core

Tag: 0.2.0