daniel-c-harvey
db7afe4ea7
feat(p10-reframe-w2): CPU wax-blob lava physics + 2D collision; smin metaball render
2026-06-16 12:19:30 -04:00
daniel-c-harvey
294414d00a
fix(queue): guard OnTrackEnded against direct-play cross-context advance
...
Only advance when player's CurrentTrack.Id matches queue's Current.Id;
direct-play call sites (SessionDetail, StreamNowButton, resume) that
supersede the queue no longer spuriously advance the album. Adds
regression test covering the scenario.
2026-06-16 00:13:51 -04:00
daniel-c-harvey
2b42e01cd0
feat(player): add IQueueService orchestrating album playback above the single-slot player (P11 11.F)
...
Queue owns ordered tracks, current index, skip-fwd/back, and auto-advance via the player's TrackEnded hook; binds through Attach (no ctor growth, no service-locator). Player-bar skip controls; empty-queue play unchanged. Adds QueueService unit tests.
2026-06-16 00:04: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
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
737c423d9c
feat: replace /archive with release-cardinal searchable browser (Phase 9 §8.H)
...
Retire the three-card overview for a search + medium + genre browser over all
releases. Adds q/genre filter params to the api/release paged read path,
mirroring the existing api/track/page TrackFilter pattern.
2026-06-13 20:47:50 -04:00
daniel-c-harvey
8b62915083
Make release Medium writable via upload + meta-edit; resolve detail-page track by releaseId not album title
2026-06-13 11:34:45 -04:00
daniel-c-harvey
af724ce570
Phase 9 Wave 4: ARCHIVE nav + Cuts/Sessions/Mixes pages + MixWaveformVisualizer
...
Replaces flat RELEASES/SESSIONS/MIXES nav with ARCHIVE dropdown (PageRoute.Children,
one-level cap, dual-role node). Adds /archive overview, /cuts (AlbumsView + medium
filter; /albums redirects), /sessions + /sessions/{id} (hero-dominant), /mixes +
/mixes/{id} (MixWaveformVisualizer full-page background). Extracts ReleaseDetailScaffold
from TrackDetail (invariant trio). PersistentComponentState bridge on all new pages.
Click-to-seek seam designed on MixWaveformVisualizer (inert until wired).
2026-06-12 23:05:25 -04:00
daniel-c-harvey
f767d288c5
feat: normalize release-cardinal fields out of track into a Release entity (Phase 8 §8.0)
2026-06-11 12:51:21 -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
8b94a5fdf7
fix: assign seek CTS synchronously and guard load finally to stop seek/load race
2026-06-10 14:30:12 -04:00
daniel-c-harvey
fb27918ed6
fix: guard LoadTrackStreaming OCE catch with loadCts identity so an in-flight seek isn't clobbered mid-load
2026-06-10 14:22:35 -04:00
daniel-c-harvey
f25d0f624f
Merge branch 'seek-hardening' into dev
2026-06-10 13:25:17 -04:00
daniel-c-harvey
43f54cb950
Merge branch 'p2-w1-filter-views' into dev
2026-06-10 12:43:33 -04:00
daniel-c-harvey
f40940b957
fix: guard SeekBeyondBuffer OCE catch with when(seekCts.IsCancellationRequested) so timeout OCEs fall through to error handler
2026-06-10 11:08:54 -04:00
daniel-c-harvey
6fe7663667
fix: harden seek — timeout no longer swallowed as cancel, rapid seek-on-seek no longer clears active seek flag
2026-06-10 10:55:49 -04:00
daniel-c-harvey
5cae83b9ed
feat: add search/album/genre filtering and /albums + /genres browse pages
2026-06-10 10:54:56 -04:00
daniel-c-harvey
0fd1977353
fix: silence false error log when streaming is cancelled during seek
2026-06-10 09:01:59 -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
3f02686012
docs: move Phase 2.5 Stream Now to COMPLETED.md
2026-06-07 18:39:49 -04:00
daniel-c-harvey
0d4ef369b9
feat: Stream Now instant-play of a random track from the nav button
2026-06-07 18:33:08 -04:00
daniel-c-harvey
c83b132522
feature: Embed Frame Player
2026-06-06 15:43:09 -04:00
daniel-c-harvey
8de7342352
Replace MudSlider seekbar with WaveformSeeker loudness-waveform control
...
DOM bar chart with clip-overlay progress split; pointer-capture drag;
WaveformProfile fetched on load (fire-and-forget, cancellable); flat
fallback when no profile; small lazily-loaded waveformSeeker.js for
getBoundingClientRect and setPointerCapture.
2026-06-05 17:35:11 -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
072189be9c
fix: remove orphaned EF/Npgsql refs, trailing slash on SqlApi, ITrackDataService doc
2026-05-25 13:02:14 -04:00
Daniel Harvey
4351302a25
Flip ITrackService/TrackManager to DTO output; TrackConverter is the sole entity<->DTO path across all consumers
2026-05-25 11:35:04 -04:00
Daniel Harvey
2fac9e51e6
refactor(client): rename GetDarkModeAsync→GetDarkMode, drop commented JS interop, fix misleading comment
2026-05-21 06:29:13 -04:00
Daniel Harvey
e8072f8b17
refactor(public): in-process ITrackDataService on server prerender; HTTP on WASM
2026-05-20 16:49:43 -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