daniel-c-harvey
ff37efea89
Phase 10 W1: de-noise Mix visualizer, clip to live player-bar height, redraw lava-lamp icon
2026-06-16 11:12:20 -04:00
daniel-c-harvey
c1ed2a9ba3
fix(visualizer): vivid HSL field, time-driven bubbling, surface-born bubbles, visible color-shift (P10 W3 rework)
2026-06-16 00:16:37 -04:00
daniel-c-harvey
5011fb43f0
perf(shader): hoist playhead texture tap; clamp neighbour sdRoundBox corner radius
2026-06-15 23:55:16 -04:00
daniel-c-harvey
a9d6445881
feat(visualizer): four in-shader Mix effects — morphing navy-moss field, bubblyness, lava-lamp detach, glass (P10 W3)
2026-06-15 23:42:44 -04:00
daniel-c-harvey
bf00b7f22f
feat(visualizer): controls row + unified MixVisualizerControlState; 3 inert uniforms wired (P10 W2)
2026-06-15 23:15:44 -04:00
daniel-c-harvey
44a15bf67d
fix(review): const→static readonly Debug silences CS0162; update stale rAF comment to renderedPlayhead()
2026-06-15 22:44:20 -04:00
daniel-c-harvey
65e5e09245
fix(visualizer): ease playhead re-anchor to kill startup jitter; gate diagnostics off (P10 W1)
2026-06-15 22:32:02 -04:00
daniel-c-harvey
df4381b4d8
fix(visualizer): interpolate Mix playhead on wall clock so ribbon scrolls at 60 FPS, not 10 Hz push cadence
2026-06-15 22:16:45 -04:00
daniel-c-harvey
652c90979d
fix(visualizer): lift zoom slider out of fixed backdrop's stacking context so it receives pointer events again (P10 W1)
2026-06-15 21:54:22 -04:00
daniel-c-harvey
45bf5e5d37
fix(visualizer): lay Mix datum across a 2-D R8 texture to respect GL_MAX_TEXTURE_SIZE; manual texelFetch lerp avoids row-wrap seam
2026-06-15 19:28:52 -04:00
daniel-c-harvey
06b58304c5
fix(visualizer): blank Mix ribbon at rest + init/draw diagnostics (P10 W1)
2026-06-15 17:45:21 -04:00
daniel-c-harvey
cab181db4b
refactor(visualizer): remove dead sampleCount field from Datum — shader uses durationSeconds only
2026-06-15 12:49:47 -04:00
daniel-c-harvey
b451dda79e
feat(visualizer): WebGL2 fragment-shader Mix renderer at parity; datum-as-texture, shader-clock rAF, drop CSS backdrop-filter (P10 W1)
2026-06-15 12:43:56 -04:00
daniel-c-harvey
c64455f2f2
fix(visualizer): gate rAF loop on is-playing; one-shot redraws while idle (§E)
2026-06-14 18:31:24 -04:00
daniel-c-harvey
2d0a565765
feat(public): scrolling Canvas 2D Mix visualizer — windowed, playback-coupled, zoomable, read-only (8.K W2)
2026-06-14 18:20:32 -04:00
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
88ac5b2c88
fix(audio): support WAVE_FORMAT_EXTENSIBLE PCM WAVs, normalizing them to standard PCM on upload
2026-06-10 15:20:34 -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
bd15b66aee
feature: Home Page & Footer Mobile Friendly
Deploy DeepDrftAPI / Build, Publish & Bundle (push) Successful in 1m56s
Deploy DeepDrftManager / Build & Publish (push) Successful in 1m3s
Deploy DeepDrftPublic / Build & Publish (push) Successful in 3m22s
Deploy DeepDrftAPI / Deploy (push) Successful in 1m33s
Deploy DeepDrftManager / Deploy (push) Successful in 1m27s
Deploy DeepDrftPublic / Deploy (push) Successful in 1m29s
2026-06-07 13:48:12 -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