本文へ移動
cccskills
無料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.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md6.6 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

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).

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

aax

無料

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.

日本語の概要は準備中です。原文の説明を表示しています。

Generous-Corp/pulp222026年10月10日 更新

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.

日本語の概要は準備中です。原文の説明を表示しています。

Generous-Corp/pulp222026年10月10日 更新

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.

日本語の概要は準備中です。原文の説明を表示しています。

Generous-Corp/pulp222026年10月10日 更新

android

無料

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.

日本語の概要は準備中です。原文の説明を表示しています。

Generous-Corp/pulp222026年10月10日 更新

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.

日本語の概要は準備中です。原文の説明を表示しています。

Generous-Corp/pulp222026年10月10日 更新

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.

日本語の概要は準備中です。原文の説明を表示しています。

Generous-Corp/pulp222026年10月10日 更新

Generous-Corp のスキルをすべて見る

このスキルの問題を報告する