daniel-c-harvey
5d9ba1c953
feat(audio): wire Mp3FormatDecoder and FlacFormatDecoder into AudioPlayer factory
2026-06-11 09:32:33 -04:00
daniel-c-harvey
86e1243eba
Merge branch 'p1.2-w2-t2-flac-decoder' into dev
2026-06-11 09:08:49 -04:00
daniel-c-harvey
879c30a5e5
fix(flac): add FLAC frame-sync scan to getAlignedSegmentSize; extend IFormatDecoder rawData param
...
StreamDecoder peeks candidate bytes; FlacFormatDecoder scans backward for 0xFF/0xF8 sync. Fixes mid-stream decode failure where segments started mid-frame.
2026-06-11 09:08:33 -04:00
daniel-c-harvey
a2771c71aa
fix(mp3): guard sub-frame tail in getAlignedSegmentSize to prevent over-read past availableBytes
2026-06-11 09:04:53 -04:00
daniel-c-harvey
c4930e80ba
feat(audio): add FLAC IFormatDecoder for chunked streaming + seek
2026-06-11 08:40:53 -04:00
daniel-c-harvey
b04081b960
feat(audio): add Mp3FormatDecoder streaming strategy
...
Implements IFormatDecoder for MP3: ID3v2 skip, MPEG Layer III frame-sync + header decode, Xing/Info/VBRI detection, CBR frame alignment, and VBR TOC seek interpolation. Wiring lands in Wave 3.
2026-06-11 08:40:52 -04:00
daniel-c-harvey
009f565b73
fix: remove dead CalculateByteOffset C# shim; guard AudioPlayer.calculateByteOffset on parsed format
2026-06-11 06:13:52 -04:00
daniel-c-harvey
0b0bcb3dee
refactor(audio): extract IFormatDecoder/WavFormatDecoder and wire Content-Type to JS format selection
...
StreamDecoder is now format-agnostic; WavFormatDecoder delegates to WavUtils; contentType flows C# to JS.
2026-06-11 06:08:09 -04:00
daniel-c-harvey
aaa9f732ae
feat: replace ?offset= seek with HTTP Range streaming across API, proxy, and client
...
- API: enableRangeProcessing true on no-offset FileStream path
- Proxy: transparent Range relay, forwards 206/416/Content-Range verbatim
- TrackMediaClient: Range: bytes=X- replaces ?offset=X; response disposed via TrackMediaResponse
- StreamDecoder: reinitializeForRangeContinuation retains wavHeader, counts raw PCM against 206 Content-Length
- AudioPlayer: seekBeyondBuffer adds headerSize for file-absolute offset; duration guard prevents continuation overwriting full-track duration
- StreamingAudioPlayerService: seek guard corrected to >= 0 (file-absolute offset contract)
2026-06-09 07:00:35 -04:00
daniel-c-harvey
58725c4646
feat: true RMS dBFS level measurement for LevelMeterFab via getFloatTimeDomainData
2026-06-08 14:40:11 -04:00
daniel-c-harvey
7cd85f0bb1
fix: convert absolute pause position to buffer-relative on resume after seek-beyond-buffer
2026-06-07 16:55:31 -04:00
daniel-c-harvey
858110306c
fix: preserve full-track duration after seek-beyond-buffer reinit
2026-06-07 15:09:48 -04:00
daniel-c-harvey
daa334a947
fix: seek lower-bound guard and pointer-down callback ordering
...
AudioPlayer.ts: route seeks below bufferStart to seekBeyondBuffer;
previous missing lower-bound caused clamped playback after first seek.
WaveformSeeker: fire OnSeekStart/OnSeekChange before capturePointer
await to prevent fast-click race that locked _isSeeking true.
Latent: WavOffsetService encodes remaining-only DataSize, overwriting
JS this.duration after seek — not fixed here, scope separately.
2026-06-07 15:02:34 -04:00
daniel-c-harvey
034e9d5633
chore: remove debug console.log calls from audio TS interop
2026-06-04 18:40:45 -04:00
daniel-c-harvey
7d49c64a5d
fix: enable player controls on load, clear track selection on stop and end-of-track
...
Add StateChanged multicast event to IPlayerService so AudioPlayerBar and TracksView
re-render themselves without relying on the IsFixed cascade re-render path. Clear
_selectedTrack in TracksView when IsLoaded drops (stop, unload, end-of-track). Set
IsLoaded=false in OnPlaybackEndCallback so end-of-track triggers the same clear path.
Add JS-module readiness probe in AudioInteropService; delete dead TS and buffered C#
path; consolidate GetPlayIcon/FormatTime helpers; fix misleading minimize dock icon.
2026-06-03 14:30:15 -04:00
Daniel Harvey
e5b4a79727
refactor(split): rename DeepDrftWeb -> DeepDrftPublic and DeepDrftWeb.Client -> DeepDrftPublic.Client (Phase 4)
2026-05-19 23:06:16 -04:00