Skip to content

Adapter-Pluggable daw-editor

Choose a tag to compare

@naomiaro naomiaro released this 25 Apr 23:37
· 14 commits to main since this release

Summary

<daw-editor> is now adapter-agnostic — consumers provide their own PlayoutAdapter (NativePlayoutAdapter or TonePlayoutAdapter). No default adapter or AudioContext created internally.

Published Packages

Package Version Change
@waveform-playlist/engine 13.0.0 Breaking: ppqn required on PlayoutAdapter, adapter is source of truth
@waveform-playlist/playout 12.1.0 TonePlayoutAdapter gains tempo/meter, cross-context worklet bridge
@waveform-playlist/worklets 12.1.0 addRecordingWorkletModule / addMeterWorkletModule (SAC pattern)
@waveform-playlist/recording 12.0.1 Internal: uses new worklet helpers
@dawcore/components 0.0.12 Breaking: adapter required, transport getter removed, sample-rate attribute removed
@dawcore/transport 0.0.9 Exposes audioContext and ppqn getters

Highlights

  • Adapter pluggability — choose between Native Web Audio (multi-tempo, multi-meter, metronome) and Tone.js (effects, MIDI synths)
  • PPQN driven by adapter — adapter is the source of truth for tick resolution; setPpqn?() lets the editor request, adapter decides
  • Cross-context worklet support (SAC pattern) — recording works with both adapters via callback injection for addModule and optional createAudioWorkletNode/createMediaStreamSource on the adapter
  • Examples restructuredexamples/dawcore-native/ and examples/dawcore-tone/ with basic, multiclip, beats-grid, and recording pages
  • Independent versioning — packages now follow their own semver based on actual changes

Breaking Changes (dawcore 0.0.x)

  • editor.adapter = new NativePlayoutAdapter(new AudioContext()) required before use
  • editor.transport removed — use adapter.transport directly
  • editor.audioContext setter removed — context comes from adapter
  • sample-rate attribute removed — rate determined by adapter's AudioContext

Migration

// Before
import '@dawcore/components';
// editor auto-created AudioContext + NativePlayoutAdapter

// After
import '@dawcore/components';
import { NativePlayoutAdapter } from '@dawcore/transport';

const editor = document.querySelector('daw-editor');
editor.adapter = new NativePlayoutAdapter(new AudioContext());

Closes #378