Document DigiRadioFinale DSP revision, archive SigmaStudio source

Adds the new SigmaStudio project export (Sigmastudio.zip, source
screenshot) alongside the existing project archives in Sigmastudio/,
rewrites docs/adau1701-sigmastudio-analysis.md for the 224-parameter
program (exclusive source mux replacing the old mixer, Bass Boost1/
SPhat1 dedicated blocks, unimplemented VU-meter readback), adds the
DigiRadioFinale figure/table to the manual, and adds a brief for the
iOS app side (active_source API shape, enhancement semantics change)
to hand to Cursor.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-25 21:52:17 +02:00
co-authored by Claude Sonnet 5
parent 75cb147f09
commit b55f2dac9d
6 changed files with 317 additions and 143 deletions
@@ -0,0 +1,118 @@
# Brief per Cursor — allineamento app iOS al nuovo firmware DSP (DigiRadioFinale)
Il firmware ADAU1701 è stato sostituito con un programma DSP molto più ricco
(224 parametri contro 74 prima). Questo documento descrive **cosa è cambiato
lato API HTTP** e **quali controlli nuovi puoi costruire in app**, più qualche
indicazione di UX. I dettagli implementativi Swift (struttura file, ViewModels
esistenti, tab bar) restano una tua scelta — qui do solo il contratto dati e
gli obiettivi funzionali.
Dispositivo di test: `http://192.168.1.62` (mDNS `digiradio-CC4DB4.local`).
---
## 1. Breaking change: `mixer` → `active_source`
**Prima**: `GET/PUT /api/audio/profile` aveva un oggetto `"mixer"` con guadagni
indipendenti per Si4684, ESP32 e i due leg del mixer — permetteva di
"mescolare" radio e Bluetooth insieme.
**Ora**: il firmware non ha più un mixer. C'è un **selettore di sorgente
esclusivo** — si ascolta una sorgente alla volta, come su un vero stereo.
```json
{
"active_source": "radio",
"master": {"left_db": 0, "right_db": 0},
"eq": [ ... 6 bande, invariato ... ],
"enhancements": {"stereo_level": 0, "bass_level": 0}
}
```
`active_source` accetta esattamente `"radio"`, `"bluetooth"`, `"beep"`.
`"beep"` è il tono di test interno (usato per diagnostica firmware, probabilmente
da nascondere in UI di produzione o mettere in una sezione "Diagnostica").
**Azione richiesta**: sostituire ogni UI che oggi mostra due slider indipendenti
(volume radio / volume BT) con un **selettore a scelta singola** (segmented
control o lista) tra Radio e Bluetooth. Non esiste più un modo per sentirli
mescolati.
---
## 2. `enhancements` ora pilota algoritmi DSP reali, non più un trucco EQ
**Prima**: `bass_level`/`stereo_level` sovrascrivevano silenziosamente alcune
bande dell'equalizzatore manuale (da cui il campo `"locked"` per banda, per
segnalarlo).
**Ora**: pilotano due blocchi DSP dedicati e indipendenti dall'EQ:
- `bass_level` (0-100) → **Bass Boost1**, un vero algoritmo ADI di "Dynamic
Bass Boost" (filtro crossover + compander dinamico). Effetto udibile solo su
contenuto reale con dinamica (radio, streaming) — su un tono fisso costante
non si sente quasi nulla, è normale (l'algoritmo reagisce a variazioni di
livello nel tempo).
- `stereo_level` (0-100) → **SPhat1** ("SuperPhat" Spatializer/stereo widener),
un secondo algoritmo ADI dedicato.
Il campo `"locked"` per banda EQ **ora è sempre `false`** tranne la banda 0
(passa-alto fisso, sempre `true`, invariato da prima). Puoi quindi rimuovere
qualunque logica "banda grigia perché l'enhancement l'ha sovrascritta" —
l'EQ manuale ora è sempre indipendente dagli enhancement.
**Azione richiesta**: nessun cambio di forma dati per `enhancements` (stessi
due slider 0-100 di prima), ma puoi rimuovere la UI "banda bloccata" per le
bande 1-5 (resta solo per la banda 0, che era già così).
---
## 3. Non ancora disponibile lato firmware (in arrivo)
- **VU-meter / readback dei livelli** (in ingresso e in uscita) — il firmware
ha 6 sensori di livello nel DSP ma il meccanismo di lettura (un registro
indiretto dell'ADAU1701) non è ancora implementato. Non costruire ancora una
UI che dipende da dati di livello in tempo reale dal firmware — se vuoi una
sezione "grafica" ora, usa un placeholder o un'animazione generica non
agganciata a dati reali, finché non arriva l'endpoint.
- **Voice Clarifier** — la cella DSP dedicata (`Gen Filter1`) esiste nella
catena del segnale ma non è ancora tarata (passa tutto invariato). Nessuna
API la pilota ancora. Non esporre ancora questo controllo in UI, o mettilo
disabilitato/"prossimamente".
- **Mute in uscita** (pre-Output1/Output2) — non presente in questo export del
firmware. Se serve, va aggiunto lato SigmaStudio prima di poter esporlo via API.
Ti avviso appena questi sono pronti lato firmware con l'endpoint esatto.
---
## 4. Riepilogo controlli disponibili ORA (tutti testati dal vivo sul dispositivo)
| Controllo | Endpoint | Corpo |
|---|---|---|
| Sorgente attiva | `PUT /api/audio/profile` (campo `active_source`) | `"radio"` \| `"bluetooth"` \| `"beep"` |
| Master volume | `PUT /api/audio/profile` (campo `master`) | `{"left_db":..,"right_db":..}`, range tipico -96..+12 dB |
| Equalizzatore (6 bande) | `PUT /api/audio/profile` (campo `eq`) | invariato: `gain_db`, `center_hz`, `q` per banda; banda 0 sempre inerte |
| Bass Boost | `POST /api/audio/bass-enhance` | `{"level":0-100}` |
| Stereo Spread | `POST /api/audio/stereo-enhance` | `{"level":0-100}` |
| Tono di test (diagnostica) | `POST /api/audio/beep` | `{"enabled":true/false}` — richiede anche `active_source:"beep"` per essere udibile |
| Lettura stato completo | `GET /api/audio/profile` | risposta con tutti i campi sopra |
---
## 5. Indicazioni di stile (dalla richiesta dell'utente)
- Stile Apple/HIG nativo: niente slider/bottoni "grezzi" o accozzaglia in
un'unica schermata. Raggruppa per tab/sezione logica (es. "Ascolto" per
sorgente+volume, "Suono" per EQ+Bass Boost+Stereo Spread, "Bluetooth" per
pairing, "Diagnostica" per tono di test/dettagli tecnici).
- Preferisci componenti nativi SwiftUI (`Picker` segmented per la sorgente,
`Slider` con `.tint()` per i livelli, liste con `Form`/`List` in stile
Impostazioni) piuttosto che controlli custom pesanti.
- La sezione "grafica" (visualizzazione carina) può oggi mostrare solo dati
già disponibili (EQ come curva, o un'animazione leggera legata allo stato
sorgente/tono) — non agganciarla a VU-meter reali finché non sono pronti
(punto 3).
- Dato che non esiste più il mix simultaneo radio+BT, il cambio sorgente è
un'azione "netta" (come cambiare stazione) — vale la pena un feedback visivo
chiaro (es. breve transizione/fade nell'interfaccia, non nell'audio: il
cambio DSP è istantaneo) quando l'utente lo seleziona.