52197aa25c
Replaces full-file MP3 decode with a progressive WAV engine that fetches stems in 10-second chunks and chains AudioBufferSourceNodes back-to-back. - First audio after ~7 MB download (one chunk for 4 stems) vs. waiting for the complete file - Peak RAM ~28 MB vs. ~420 MB for a 5-minute 4-stem track - No track-length cap (removes the 7-14 min OOM limit) - Same glitch-free behavior on Safari/WKWebView: AudioBufferSourceNode, no streaming elements, no HTTP/1.1 connection-cap underruns - Backend needs no changes: Starlette FileResponse handles Range requests Closes #236