From d3c6bbc7f3d35cfa6a2aab0a8343dfb18d73e7b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Michelle?= Date: Thu, 19 Mar 2026 13:04:31 +0100 Subject: [PATCH] updates plan --- plans/apparat.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plans/apparat.md b/plans/apparat.md index 2a1fa6c3..c7b1d35e 100644 --- a/plans/apparat.md +++ b/plans/apparat.md @@ -17,6 +17,7 @@ Adds `@sample` declarations for loading audio files into the worklet, enabling s - **Reset**: On transport stop/discontinuity, the host sends `noteOff` for all active notes, then calls `reset()`. The user MUST kill all voices in `reset()` — no tails, no release phases. This must be clearly documented in the manual and AI prompt. - **Samples**: `// @sample name` declarations. File picker (drag-and-drop + click-to-browse) on the device panel. Data available as `this.samples.name` in the processor. Returns `null` until loaded. - **Name**: Apparat (German for "apparatus"). Continues the naming: Werkstatt, Spielwerk, Apparat. +- **Icon**: `IconSymbol.Code` — same as Werkstatt and Spielwerk. --- @@ -153,6 +154,11 @@ export const WerkstattSampleBox = { Reuses `WerkstattParameterBox` for parameters (same as Werkstatt/Spielwerk). +**WerkstattDeviceBox extension**: Add `samples` field at key **12** (preserving existing keys 10=code, 11=parameters). Same field added to `SpielwerkDeviceBox` and `ApparatDeviceBox`: +```typescript +12: {type: "field", name: "samples", pointerRules: {accepts: [Pointers.Sample], mandatory: false}} +``` + ### Adapter `ApparatDeviceBoxAdapter` implements `InstrumentDeviceBoxAdapter`: