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>
119 lines
5.8 KiB
Markdown
119 lines
5.8 KiB
Markdown
# 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.
|