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:
@@ -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.
|
||||
Reference in New Issue
Block a user