HEXAWE oscillator patches with a bit-exact LGPT voice; relicense GPLv3 #5

Merged
peterswimm merged 3 commits from feat/hexawe-osc-patches into main 2026-10-14 22:16:39 +00:00
Owner

Summary

Adds 212 o1nk patches made from the oscillator-mode instruments in the HEXAWE piggy-tracker releases. It also adds a Swift port of LittleGPTracker's instrument engine, which renders the same output as LGPT sample for sample. Because that engine is ported from LGPT's code, o1nk is relicensed under GPLv3.

Commits

  • license: relicense o1nk under GPLv3. Adds the canonical LICENSE text and rewrites the README licence section. The HEXAWE patches and samples stay CC BY 3.0, with credits in presets/hexawe/CREDITS.md.
  • feat(hexawe): HEXAWE oscillator patches with a bit-exact LGPT voice.
    • scripts/hexawe_osc_import.py produces presets/hexawe/. That covers the 212 patches, 63 deduped and normalised samples, and one .lgpt.json file per patch holding the instrument settings, entry table, grooves and clock.
    • HEXAWE_256.WAV is a 256-frame wavetable of the deduped single cycles in scan order, with extra frames interpolated between them. The interpolated frames are concentrated where neighbouring waves sound most different. sampleIndex now runs 0...255.
    • LGPTVoice.swift ports LGPT's sample instrument, tables, grooves and modulation ramps, using the same fixed-point arithmetic as LGPT. O1NKDSPKernel plays a loaded voice in place of the wavetable path.
    • tests/lgpt/run.sh holds the tests listed below.

Testing

  • Wavetable regression: the existing wavetable path renders byte-identical to main.
  • Kernel check: a voice played through the kernel matches the same voice played directly, and note-off silences it.
  • Reference comparison: LGPT is built unmodified from pinned upstream commit c7258ff and its output compared with o1nk's.
    • All 418 renders that LGPT can produce match o1nk's bit for bit.
    • 6 renders have nothing to compare against. In 4, LGPT itself crashes on 64-bit; in the other 2, playback reads past the end of the sample, which LGPT leaves undefined.
  • Controls: each test has a deliberately broken control that must fail, and they all fail as they should.
  • Other checks:
    • xcodebuild (iOS Simulator) succeeds.
    • opsl-public validate and scripts/opsl_parity.py both pass.

Known gaps

  • The AU doesn't load a patch's .lgpt.json at runtime yet, because nothing calls loadLGPTVoice.
  • AU parameters don't affect the LGPT voice.
  • The comparison only plays single notes. Behaviour across several notes (automation mode, LEGA 00, a KILL carried from one note to the next) is untested.
  • The C++ CLAP port doesn't have the LGPT voice yet.

Licensing note

GPLv3 is generally considered incompatible with App Store distribution. The copyright holder can still ship their own builds, but outside contributions would need a CLA or similar agreement to keep that possible.

## Summary Adds 212 o1nk patches made from the oscillator-mode instruments in the HEXAWE piggy-tracker releases. It also adds a Swift port of LittleGPTracker's instrument engine, which renders the same output as LGPT sample for sample. Because that engine is ported from LGPT's code, o1nk is relicensed under GPLv3. ### Commits - **license: relicense o1nk under GPLv3.** Adds the canonical `LICENSE` text and rewrites the README licence section. The HEXAWE patches and samples stay CC BY 3.0, with credits in `presets/hexawe/CREDITS.md`. - **feat(hexawe): HEXAWE oscillator patches with a bit-exact LGPT voice.** - `scripts/hexawe_osc_import.py` produces `presets/hexawe/`. That covers the 212 patches, 63 deduped and normalised samples, and one `.lgpt.json` file per patch holding the instrument settings, entry table, grooves and clock. - `HEXAWE_256.WAV` is a 256-frame wavetable of the deduped single cycles in scan order, with extra frames interpolated between them. The interpolated frames are concentrated where neighbouring waves sound most different. `sampleIndex` now runs 0...255. - `LGPTVoice.swift` ports LGPT's sample instrument, tables, grooves and modulation ramps, using the same fixed-point arithmetic as LGPT. `O1NKDSPKernel` plays a loaded voice in place of the wavetable path. - `tests/lgpt/run.sh` holds the tests listed below. ## Testing - **Wavetable regression:** the existing wavetable path renders byte-identical to `main`. - **Kernel check:** a voice played through the kernel matches the same voice played directly, and note-off silences it. - **Reference comparison:** LGPT is built unmodified from pinned upstream commit `c7258ff` and its output compared with o1nk's. - All 418 renders that LGPT can produce match o1nk's bit for bit. - 6 renders have nothing to compare against. In 4, LGPT itself crashes on 64-bit; in the other 2, playback reads past the end of the sample, which LGPT leaves undefined. - **Controls:** each test has a deliberately broken control that must fail, and they all fail as they should. - **Other checks:** - `xcodebuild` (iOS Simulator) succeeds. - `opsl-public` validate and `scripts/opsl_parity.py` both pass. ## Known gaps - The AU doesn't load a patch's `.lgpt.json` at runtime yet, because nothing calls `loadLGPTVoice`. - AU parameters don't affect the LGPT voice. - The comparison only plays single notes. Behaviour across several notes (automation mode, LEGA 00, a KILL carried from one note to the next) is untested. - The C++ CLAP port doesn't have the LGPT voice yet. ## Licensing note GPLv3 is generally considered incompatible with App Store distribution. The copyright holder can still ship their own builds, but outside contributions would need a CLA or similar agreement to keep that possible.
Add the canonical GPLv3 text and replace the README licence note. o1nk
now ships LittleGPTracker-derived code, so the whole project is GPLv3;
the HEXAWE presets and samples stay CC BY 3.0 per their CREDITS.md.

Co-Authored-By: Claude <noreply@anthropic.com>
- scripts/hexawe_osc_import.py imports oscillator-mode instruments from
  the HEXAWE piggy releases into 212 patches under presets/hexawe/, with
  deduped, normalised samples, per-patch .lgpt.json voice sidecars
  (instrument, entry table, grooves, clock) and full CC BY 3.0 credits.
- HEXAWE_256.WAV: deduped single cycles in scan order, with interpolated
  frames biased toward dramatic differences; sampleIndex is now 0...255.
- LGPTVoice.swift ports LittleGPTracker's sample instrument, tables,
  grooves and updaters at LGPT's 17.15 fixed point; the DSP kernel plays
  a loaded voice in place of the wavetable path.
- tests/lgpt: wavetable regression against main, kernel check, and a
  sample-for-sample comparison against LGPT built from a pinned upstream
  commit (418/418 comparable renders bit-exact), each with a control
  that must fail.

Co-Authored-By: Claude <noreply@anthropic.com>
Resolve the bank-list conflict with the CLAP work: keep main's kBanks
order (the bank is a saved CLAP parameter) and append HEXAWE to both the
AU list and kBanks. Widen the CLAP's sample.index to 0...255 to match the
AU and OPSL, and compile LGPTVoice.swift into clap/tests/parity.sh, which
builds the Swift kernel that now references it.

Co-Authored-By: Claude <noreply@anthropic.com>
peterswimm deleted branch feat/hexawe-osc-patches 2026-10-14 22:16:39 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
peterswimm/01nk!5
No description provided.