Skip to content
cccskills
FreePublished on GitHub

ara

Optional ARA support for Pulp, including developer-supplied ARA SDK setup, CMake enablement, adapter companion APIs, validation, and ARA-aware plugin implementation guidance.

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md6.6 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

ARA Skill

Use this when working on Pulp's optional ARA (Audio Random Access) support or when guiding users who want to build and validate ARA-enabled plugins.

Scope

  • Companion APIs: VST3 on macOS + Windows, AU on macOS, CLAP on macOS + Windows
  • Primary hosts: Logic (AU), Cubase + Studio One (VST3), Reaper (VST3 or CLAP with ARA extension), Bitwig (CLAP when its ARA extension ships)
  • Target ARA version: 2.x (enum value kARAAPIGeneration_2_3_Final = 6)
  • Out of scope: ARA 1.x (obsolete), hosting arbitrary ARA plugins (that's a separate host workstream), audio-file chunk authoring tools

Licensing

  • ARA SDK is Apache 2.0 — compatible with Pulp's MIT, but we still treat it like AAX / AudioUnitSDK / VST3 SDK: developer-supplied, opt-in, out-of-tree, never committed. tools/deps/audit.py --strict must stay green.
  • DEPENDENCIES.md lists ARA SDK under Optional Developer-Supplied Vendor SDKs exactly because of the companion-API carve-out in CLAUDE.md.
  • Celemony notes: "Any public release of ARA-enabled software should be based on a tagged public release of the ARA API." Use a tag, not main.

What Users Should Download

The SDK is public on GitHub. Clone with submodules so ARA_API + ARA_Library + ARA_Examples all resolve:

git clone --recurse-submodules --depth 1 \
    https://github.com/Celemony/ARA_SDK.git \
    external/ara-sdk

After cloning, verify:

ls external/ara-sdk/ARA_API/ARAInterface.h     # core C API
ls external/ara-sdk/ARA_Library/PlugIn/ARAPlug.h  # C++11 helpers

Never commit external/ara-sdk/. The external/ prefix keeps it out of cmake --install exports and the repo audit.

Enabling ARA in a Pulp build

Two CMake knobs:

cmake -S . -B build \
    -DPULP_ENABLE_ARA=ON \
    -DPULP_ARA_SDK_DIR=/absolute/path/to/external/ara-sdk

PULP_ENABLE_ARA=ON without PULP_ARA_SDK_DIR fails fast with a clear error. A missing / wrong path fails on ARAInterface.h existence check before any compilation starts.

When enabled, pulp-format is built with PULP_HAS_ARA=1 and the ARA SDK include directory added to its PUBLIC include path. Plugin TUs that want to implement ARA include <ARA_API/ARAInterface.h> directly.

Verifying the integration

Quick smoke:

cmake --build build --target pulp-test-ara
./build/test/pulp-test-ara
# Expect: ara_sdk_compiled_in() → true, ara_sdk_generation() >= 6

A build with PULP_ENABLE_ARA=OFF (the default) must still pass the same tests — ara_sdk_compiled_in() returns false and ara_sdk_generation() returns 0 without failing.

Writing an ARA-aware plugin

  1. Override Processor::create_ara_document_controller() to return a concrete AraDocumentController subclass.
  2. Use the Pulp-side types from <pulp/format/ara/types.hpp> (AraAudioSource, AraPlaybackRegion, etc.). These are SDK-independent so the plugin TU never pulls the SDK unless it wants to implement a content reader that inspects ARA's C structs directly.
  3. Format-adapter companion factories translate between Pulp types and the SDK's C structs.

Using ARA with each adapter

A real ARA::ARAFactory is surfaced out of core/format/src/ara_factory.cpp whenever PULP_HAS_ARA is defined. Hosts reach it via the adapter-specific hook listed below — the integration code is done on the adapter side, so plugin authors only subclass AraDocumentController.

CLAP

Already end-to-end wired: clap_plugin::get_extension(kClapAraFactoryExtension) returns the live factory. Example: core/format/src/clap_adapter.cpp (search for kClapAraFactoryExtension). Validate with ./build/tools/scan-worker/pulp-scan-worker path/to/MyPlug.clap once ARA is initialised.

VST3 (Cubase, Studio One)

The VST3 adapter wires PulpVst3Processor::initialize(FUnknown*) to query IPluginFactory3::setHostContext for the attribute key kVst3AraFactoryContextKey. The plug-in side does nothing beyond subclassing AraDocumentController; the adapter binding is in core/format/src/vst3_adapter.cpp.

AU (Logic Pro)

The AU adapter exposes kAuAraFactoryPropertyKey as the KVO property audioUnitARAFactory on PulpAudioUnit. Logic reads it on scan, caches the factory, and binds a document controller per loaded plug-in instance.

Verifying live (not a stub)

# Build with the SDK on:
cmake -S . -B build -DPULP_ENABLE_ARA=ON -DPULP_ARA_SDK_DIR=$PWD/external/ara-sdk
cmake --build build --target pulp-test-ara

# Run the live-factory tests (guarded on PULP_HAS_ARA):
./build/test/pulp-test-ara '[factory]'

The ABI-conformance test asserts that the factory's highestSupportedApiGeneration is kARAAPIGeneration_2_3_Final, that createDocumentControllerWithDocument returns a non-null ARADocumentControllerInstance, and that getFactory() round-trips back to the same factory pointer.

Known gotchas

  • All time fields are seconds (double), not samples. Pulp's AraPlaybackRegion matches ARAPlaybackRegionProperties; adapters convert to samples only at explicit sample-domain APIs.
  • Threading contract: ARA's render thread, document-editing thread, and main thread map to Pulp's audio / UI / main threads. Do not block across them; consult docs/reference/host-thread-rules.md.
  • Host quirks are real. Logic's ARA integration differs from Cubase's. Budget time for host-specific workarounds.
  • host_supports_ara() currently returns false even with the SDK compiled in until the format-adapter companion factories are wired.
  • Factory is valid but controller interface is stubs. When PULP_HAS_ARA is on, ara_companion_factory_for() returns a real ARA::ARAFactory. Its createDocumentControllerWithDocument returns a valid ARADocumentControllerInstance, but every call on the controller interface is a no-op until plug-ins override them. Hosts see a working factory; they just cannot edit audio yet.

Planning & issue tracking

  • Spec: planning/production-readiness/06-ara.md
  • Status: planning/production-readiness/STATUS.md (ARA / workstream 06 section)
  • Tracking: #219

Skill maintenance

Path map: tools/scripts/skill_path_map.json. Add entries for core/format/src/ara*, core/format/include/pulp/format/ara*, external/ara-sdk (so non-committed work still triggers skill sync checks on related source changes).

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

aax

Free

Optional AAX support for Pulp, including developer-supplied Avid SDK setup, CMake enablement, DigiShell/AAX Validator workflows, and local AAX builds on macOS or Windows.

The English summary is being prepared. Showing the original description.

Generous-Corp/pulp22Updated Oct 19, 2026

Configure, implement, and test Pulp's optional desktop Ableton Link tempo-sync adapter while preserving the developer-supplied SDK, licensing, realtime, latency-compensation, and no-install boundaries.

The English summary is being prepared. Showing the original description.

Generous-Corp/pulp22Updated Oct 19, 2026

Maintain Pulp's installed design-time agent capability manifest and public-surface ledger. Use when adding, removing, renaming, or materially changing public audio, MIDI, signal, timebase, or sequence APIs; registering a new algorithm for generators; changing capability support or deprecation state; or repairing agent-capabilities freshness, schema, fingerprint, tombstone, or installed-SDK tests.

The English summary is being prepared. Showing the original description.

Generous-Corp/pulp22Updated Oct 19, 2026

Android platform development for Pulp — NDK cross-compilation, Oboe audio, Dawn/Skia GPU rendering, JNI bridge, touch interaction, emulator workflows, and end-to-end smoke validation. Covers build, deploy, debug, and the gotchas discovered during bringup.

The English summary is being prepared. Showing the original description.

Generous-Corp/pulp22Updated Oct 19, 2026

The measurement surface for ALL Pulp DSP and audio-pipeline work — read it BEFORE writing or gating DSP, not only when something already sounds wrong. Covers the C++ harness (signal generators, metrics, assertions, RenderScenario, contracts), the offline Audio Doctor (magnitude/frequency response, THD/THD+N, phase/group delay), and their Python sibling the Audio Quality Lab (tools/audio/quality-lab — null residual + alignment, LTAS log-spectral distance, spectral flux/centroid, HNR, Theil-Sen drift slope, Kaiser-sinc resampling, license-guarded corpus, regression-net ratchet). TRIGGER on AUTHORING work — "build/design an oscillator/filter/synth/effect", "add a DSP module", "what should the acceptance gate be", "how do I measure aliasing / anti-aliasing / alias floor", "null against a reference", "is this DSP correct", "choose a tolerance", "golden/regression corpus for audio", "measure drift or jitter", "A/B two renders" — AND on DEBUGGING work — "is there sound / no audio / I hear nothing", "does this filter/compressor/synth/delay produce the right signal", "prove the DSP / prove the contract", "measure the frequency response", "what's the THD / is it distorting", "what's the group delay / phase response / measured latency", "magnitude response curve", "render a test tone and assert", "audio regression", "64-frame works but 128 is silent", "sample-rate change pitch-shifted it", "describe what's in this buffer", "audio doctor", "compare before/after a DSP refactor". Reach for this BEFORE hand-rolling any FFT, null test, alias measurement, pitch tracker, or golden-render script — most of it already exists in one of the two lanes. Test/tool layer over HeadlessHost — deterministic, no audio device, no speakers. Off the realtime thread entirely.

The English summary is being prepared. Showing the original description.

Generous-Corp/pulp22Updated Oct 19, 2026

Reproduce and debug "only happens in a DAW" audio plugin bugs (cutouts, glitches, parameter-change failures) entirely offline — headless Processor scenes for DSP bugs and a standalone AudioUnit host probe for adapter/host-interaction bugs. Use when a plugin misbehaves in Logic/Live/etc. but unit tests are green.

The English summary is being prepared. Showing the original description.

Generous-Corp/pulp22Updated Oct 19, 2026

See all skills by Generous-Corp

Report a problem with this skill