본문으로 건너뛰기
cccskills
무료GitHub에 공개

ableton-link

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.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

설치 방법 보기

포함된 파일(2)

  • SKILL.md6.2 KB
  • agents/openai.yaml196 B

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Ableton Link

Use this skill for Pulp's desktop Ableton/link integration, its CMake opt-in, or the backend-neutral tempo-sync seam in core/playback.

Scope and licensing boundary

  • This is the desktop C++ Ableton/link SDK. It is not iOS LinkKit and not m4l-connection-kit. LinkKit needs a separate licensing decision, option, SDK path, and implementation.
  • Link is available under GPLv2+ or a proprietary arrangement with Ableton. Pulp's MIT license grants no Link rights. The developer enabling the adapter is responsible for having suitable rights.
  • Pulp never fetches, bundles, installs, exports, or redistributes Link. Keep the SDK outside the Pulp source tree. Do not add it to DEPENDENCIES.md or NOTICE.md because Pulp ships none of it.
  • The portable pulp::playback target owns only Pulp code. The optional pulp::ableton-link target exists only in a source build with the SDK enabled and must never enter cmake --install or Pulp's exported target closure. Its adapter declaration lives under core/playback/adapters/include, exposed only through that target's BUILD_INTERFACE; do not place it under the installed core/playback/include tree.

Obtain and enable the desktop SDK

Clone recursively to an absolute path outside the checkout; Link requires its ASIO submodule even on platforms that do not use an ASIO audio device:

git clone --recurse-submodules https://github.com/Ableton/link.git /absolute/path/to/link

cmake -S . -B build-link -DCMAKE_BUILD_TYPE=Release \
  -DPULP_ENABLE_ABLETON_LINK=ON \
  -DPULP_ABLETON_LINK_SDK_DIR=/absolute/path/to/link

PULP_ENABLE_ABLETON_LINK defaults to OFF. When enabled, a missing, partial, in-tree, or non-desktop SDK path is a configure error. The SDK path can also come from the PULP_ABLETON_LINK_SDK_DIR environment variable, but an explicit CMake cache value is easier to audit.

Runtime contract

  • TempoSyncSource is Pulp's backend-neutral, audio-thread interface. Keep Link types and Link-specific peer/enable/start-stop controls out of it.
  • AbletonLinkTempoSync owns those Link-specific controls. Call set_enabled and set_start_stop_sync_enabled from a control thread, never from the audio callback. output_host_time and capture_audio_block are realtime-safe.
  • Call output_host_time(output_latency_frames, sample_rate, time) in the audio callback, then pass its opaque TempoSyncHostTime to MasterTransport. The adapter reads Link's realtime clock and adds device/output latency so the timestamp names the first sample at the output boundary. A callback timestamp without compensation produces a stable audible offset.
  • TempoSyncHostTime is tagged with its producing source. A transport rejects a default token or one from another source before asking its backend to capture a block, preventing Link, device, and wall-clock epochs from mixing.
  • The public desktop adapter models APIs that report output latency from the callback. It does not accept an arbitrary device-host timestamp. A platform integration whose audio API exposes a calibrated future device timestamp needs an explicit Link-clock conversion boundary; do not forward that raw timestamp or a jittery wall-clock read as though it were Link time.
  • A configured TempoSyncSource must outlive MasterTransport. Use the host-time begin_block(frame_count, output_host_time, snapshot) overload. The ordinary overload returns TempoSyncHostTimeRequired.
  • The session mapping is authoritative. Disabled, failed, or invalid sources fail the block; they never fall back to the document tempo clock.
  • Joining does not send the config's initial tempo, position, or play state. Only explicit set_tempo_sync_tempo, seek, and set_playing calls publish session commands, which avoids hijacking an existing jam on attach.
  • A Link-projected block retains Pulp's fixed one-or-two-range transport contract and precise fractional host ticks. begin_scrub() rejects an active shared tempo source because scrubbing needs a private repositioning clock; use an unsynchronized transport for scrub playback.
  • Preserve SessionState::timeForIsPlaying() in TempoSyncBlockState::is_playing_at_host_time_micros. A TransportSnapshot has one playing state for its whole half-open block: a start/stop effective at or before the first sample applies immediately, while one inside or at/after the block end is deterministically deferred until a later block starts at or beyond that timestamp. Do not flatten the timestamp into SessionState::isPlaying() or claim sample-accurate start/stop splitting that the snapshot contract cannot represent.

Verification

The SDK-independent interface tests are the public-CI gate. They compile into the grouped pulp-test-group-timeline-playback executable, so build that target and select the suite by its file tag. The SDK-present test is always registered: a stock build exits 77 and CTest reports Skipped with the enablement flags, while an enabled local build executes the real adapter.

cmake --build build --target \
  pulp-test-group-timeline-playback \
  pulp-test-ableton-link-sdk \
  timeline-program-threadless-no-exceptions-check

build/test/pulp-test-group-timeline-playback -# "[#test_playback_tempo_sync]" \
  --reporter compact
ctest --test-dir build -V -R '^playback-ableton-link-sdk-present$'

cmake --build build-link --target \
  pulp-test-group-timeline-playback pulp-test-ableton-link-sdk
ctest --test-dir build-link -V -R '^playback-ableton-link-sdk-present$'

Check the interface assertion count; a filtered CTest command can match nothing. For substantive changes, prove negative controls for fail-closed source errors and precise beat projection, then restore the implementation.

When the portable interface or transport integration changes, also update the playback skill and keep tempo_sync.cpp in the native, threadless, WAM, and WebCLAP playback source closure. Keep the SDK adapter under core/playback/adapters/, outside the portable src/ closure.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

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월 19일 업데이트

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월 19일 업데이트

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월 19일 업데이트

ara

무료

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

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

Generous-Corp/pulp222026년 10월 19일 업데이트

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월 19일 업데이트

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월 19일 업데이트

Generous-Corp의 스킬 모두 보기

이 스킬의 문제 신고