No description
  • C++ 63.9%
  • Swift 19.2%
  • Python 9.1%
  • C 4.9%
  • Shell 2.1%
  • Other 0.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-23 21:44:56 +00:00
clap o1nk: eight parts, each a whole o1nk, and a MIDI page mapping them 2026-10-17 10:52:53 -07:00
Imported/LittleGPTracker Add AUv3 parameter tree, DSP kernel, and sectioned UI 2026-04-25 18:31:59 -07:00
o1nk o1nk: eight parts, each a whole o1nk, and a MIDI page mapping them 2026-10-17 10:52:53 -07:00
o1nk.xcodeproj au: HEXAWE voices as factory presets; fix crashes on load and restore 2026-10-14 16:08:16 -07:00
opsl feat(hexawe): HEXAWE oscillator patches with a bit-exact LGPT voice 2026-10-13 20:24:29 -07:00
presets/hexawe feat(hexawe): HEXAWE oscillator patches with a bit-exact LGPT voice 2026-10-13 20:24:29 -07:00
scripts o1nk: eight parts, each a whole o1nk, and a MIDI page mapping them 2026-10-17 10:52:53 -07:00
tests/lgpt o1nk: eight parts, each a whole o1nk, and a MIDI page mapping them 2026-10-17 10:52:53 -07:00
.gitignore clap: o1nk as a CLAP instrument for sndstation handhelds 2026-10-13 17:04:36 -07:00
LICENSE license: relicense o1nk under GPLv3 2026-10-13 20:24:29 -07:00
README.md license: relicense o1nk under GPLv3 2026-10-13 20:24:29 -07:00

o1nk

o1nk is an AUv3 sampler project built around tracker tables.

Current shape

  • iOS standalone wrapper app
  • AUv3 instrument extension
  • Minimal table-driven audio unit shell
  • Imported LittleGPTracker instrument sources kept under Imported/LittleGPTracker/ for reference and future porting

License

o1nk is licensed under the GNU General Public License v3.0 (see LICENSE). It includes LittleGPTracker sources (Imported/LittleGPTracker/, GPLv3) and a LittleGPTracker instrument engine ported to Swift (o1nk/AudioUnitExtension/LGPTVoice.swift). The HEXAWE patches and samples under presets/hexawe/ are CC BY 3.0 works of their artists; see presets/hexawe/CREDITS.md.

Next steps

  • Port the imported sample and SoundFont logic into the AUv3 engine layer
  • Replace the placeholder oscillator with sample playback
  • Add Piggy .ins and SF2 import flows

OPSL parity

o1nk/AudioUnitExtension/O1NKParameters.swift declares the O1NKParam tree (identifier, default value, range/enum, and section grouping per parameter) to mirror the OPSL device schema for o1nk, so hosts and MoveMap controllers can address parameters by the same semantic names and defaults the AU exposes. The OPSL documents for o1nk are vendored under opsl/:

  • opsl/toilville-o1nk.sampler.device.json — the role: init device (factory defaults and parameter domains)
  • opsl/toilville-o1nk-punchy-drums.device.json — a role: patch device (same params, a non-default state)
  • opsl/toilville-o1nk-default.movemap.layout.json — the MoveMap controller layout (section/page/slot assignments)
  • opsl/toilville-o1nk-demo.movemap.bundle.json — a demo bundle tying the device, layout, and patch together
  • opsl/VERSION — the opsl-public tag + commit these were vendored from

Running the parity check

python3 scripts/opsl_parity.py

This parses O1NKParameters.swift (via regex over its very regular case .x: return y switch statements — see the docstring in scripts/opsl_parity.py for why a regex parse was chosen over a Swift script or a Swift unit test) and compares every O1NKParam case against opsl/toilville-o1nk.sampler.device.json and opsl/toilville-o1nk-default.movemap.layout.json for:

  • identifier membership (both directions)
  • numeric range / step, or enum value count, vs the device param's domain
  • defaultValue vs the init device's state.param_values[identifier].value (enum params: the Swift side stores an index, OPSL stores a string/bool — mapped positionally through domain.values)
  • section grouping (O1NKParam.Section) vs the device param's section_hint, cross-checked against where the movemap layout actually places that param

The script exits non-zero if it finds a mismatch that isn't listed in scripts/opsl_parity_allowlist.json. Known, undecided mismatches (where the AU and the OPSL doc disagree and it isn't obvious which one is wrong) are recorded there with a note explaining the open question, so the check stays green while the disagreement stays visible — add a new mismatch to the allowlist only once someone has actually looked at it, not as a way to silence the check.

Updating the vendored OPSL documents

  1. In opsl-public, find the tag/commit you want (the examples live under examples/toilville-o1nk*.json).
  2. Re-export the four files, e.g.:
    git -C /path/to/opsl-public show <tag>:examples/toilville-o1nk.sampler.device.json \
      > opsl/toilville-o1nk.sampler.device.json
    
    (repeat for toilville-o1nk-punchy-drums.device.json, toilville-o1nk-default.movemap.layout.json, and toilville-o1nk-demo.movemap.bundle.json)
  3. Update opsl/VERSION to <tag> <short-sha>.
  4. Run python3 scripts/opsl_parity.py and resolve or allowlist whatever it reports.