Fixes
RDS Station Name (PS) Now Decodes Correctly
The pilot-locked NCO mixer was using cos(3φ) but the RDS subcarrier is sin(3φ) per IEC 62106. The 90° phase error routed the entire BPSK signal into the discarded Q channel, producing zero PS output on the coherent path. Changed to sin(3φ) — station names now appear reliably.
Server/Client State Synchronization
- Server-side
defaultBandwidthForMode()prevents over-wide IQ filtering on first tune and profile switch handleModealways applies bandwidth (explicit or mode default) — no more silent over-wide filtercreateClientPipelineuses stored client bandwidth if availableSwitchProfileatomically updates ws.Client state, resets tune offset, and updates all pipelines- Client resets tune offset on profile change, re-sends NB state on reconnect
- Reconnect sends mode+bandwidth atomically (eliminates race condition)
Audio Quality — Clock Drift Correction
- Continuous proportional controller replaces the dead-zone threshold that caused periodic micro-glitches every 10-30 seconds from silent drift accumulation
- Linear interpolation resampling for rate adjustment (was nearest-neighbor)
- Transferable ArrayBuffers for zero-copy postMessage to AudioWorklet (reduces GC pauses)
- 64-sample fade-in ramp on playback resume after underrun (eliminates pop)
- minBuffer increased to 200ms (3+ Opus frames of jitter tolerance)